about summary refs log tree commit diff
path: root/src/engine
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-12-19 11:23:31 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-12-19 11:23:31 +0000
commit530dace4c97ea4361e4db477abbf388a497ac4e3 (patch)
tree8176d3c209ebe7092eb09af10bc3bd374ad378eb /src/engine
parent619c3097793031da5425026f6fc2305aad15e91b (diff)
downloadzcatch-530dace4c97ea4361e4db477abbf388a497ac4e3.tar.gz
zcatch-530dace4c97ea4361e4db477abbf388a497ac4e3.zip
fixed the demo recorder so it padds the data to 4 byte alignment so the compression works like it should
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/e_demorec.c12
-rw-r--r--src/engine/e_demorec.h2
2 files changed, 10 insertions, 4 deletions
diff --git a/src/engine/e_demorec.c b/src/engine/e_demorec.c
index 051337b6..f19dac22 100644
--- a/src/engine/e_demorec.c
+++ b/src/engine/e_demorec.c
@@ -113,9 +113,15 @@ static void demorec_record_write(int type, const void *data, int size)
 	
 	if(!record_file)
 		return;
-		
-	size = intpack_compress(data, size, buffer);
-	size = netcommon_compress(buffer, size, buffer2, sizeof(buffer2));
+
+	
+	/* pad the data with 0 so we get an alignment of 4,
+	else the compression won't work and miss some bytes */
+	mem_copy(buffer2, data, size);
+	while(size&3)
+		buffer2[size++] = 0;
+	size = intpack_compress(buffer2, size, buffer); /* buffer2 -> buffer */
+	size = netcommon_compress(buffer, size, buffer2, sizeof(buffer2)); /* buffer -> buffer2 */
 	
 	
 	chunk[0] = ((type&0x3)<<5);
diff --git a/src/engine/e_demorec.h b/src/engine/e_demorec.h
index d73a5a3d..3c4f3a41 100644
--- a/src/engine/e_demorec.h
+++ b/src/engine/e_demorec.h
@@ -74,4 +74,4 @@ int demorec_playback_stop();
 }
 #endif
 
-#endif
\ No newline at end of file
+#endif