From a69203a95d66595b80891aafc1ca8a59303290d0 Mon Sep 17 00:00:00 2001
From: Samo Penic <samo.penic@gmail.com>
Date: Fri, 18 Oct 2019 09:16:27 +0000
Subject: [PATCH] Debugged all the leaks. Decompression still not working

---
 src/snapshot.c |   20 ++++++++++++--------
 src/io.c       |    9 ++++++---
 src/tape       |    2 +-
 src/snapshot.h |    2 +-
 4 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/src/io.c b/src/io.c
index abd4fce..7a14447 100644
--- a/src/io.c
+++ b/src/io.c
@@ -255,16 +255,18 @@
 	fprintf(fh, " <UnstructuredGrid>\n");
     fprintf(fh, "<Piece NumberOfPoints=\"%u\" NumberOfCells=\"%u\">\n",vlist->n+monono*polyno+fonono*filno, blist->n+monono*polyno+filno*(fonono-1)+vesicle->tlist->n);
     fprintf(fh,"<PointData Scalars=\"vertices_idx\">\n<DataArray type=\"Int64\" Name=\"vertices_idx\" format=\"binary\">");
-	int *int_vector=(int *)malloc((vlist->n+monono*polyno+fonono*filno)*sizeof(ts_uint));
+	long *int_vector=(long *)malloc((vlist->n+monono*polyno+fonono*filno)*sizeof(long));
+// sizes are as expected 4 bytes for int and 1 byte for char
+//	printf("size of ts_uint %ld, of int %ld, of char %ld",sizeof(ts_uint), sizeof(int), sizeof(char));
 	int offset=0;
    	for(i=0;i<vlist->n;i++){
 	//	fprintf(fh,"%u ",vtx[i]->idx);
 		int_vector[i+offset]=vtx[i]->idx;
     }
+	offset=offset+i;
 	//polymeres
 	if(poly){
 		poly_idx=vlist->n;
-		offset=offset+i;
 		for(i=0;i<vesicle->poly_list->n;i++){
 			for(j=0;j<vesicle->poly_list->poly[i]->vlist->n;j++,poly_idx++){
 				//fprintf(fh,"%u ", poly_idx);
@@ -285,7 +287,8 @@
 			offset=offset+j;
 		}
 	}
-	char *printout=ts_compress_intlist(int_vector,(vlist->n+monono*polyno+fonono*filno)*sizeof(ts_uint));
+	printf("Offset in the end is %d, should be %d",offset,(vlist->n+monono*polyno+fonono*filno) );
+	char *printout=ts_compress((char *)int_vector,offset*sizeof(long), offset);
 	fprintf(fh,"%s",printout);
 	free(printout);
 
diff --git a/src/snapshot.c b/src/snapshot.c
index bbdb317..53bca9d 100644
--- a/src/snapshot.c
+++ b/src/snapshot.c
@@ -156,7 +156,8 @@
 	char *compr=(char *)malloc(data_len*sizeof(char));
 	defstream.avail_out = data_len+1;
 	defstream.next_out = (unsigned char *)compr;
-	deflateInit(&defstream, Z_BEST_COMPRESSION);
+	deflateInit(&defstream, 6);
+//	deflateInit(&defstream, Z_BEST_COMPRESSION);
     	deflate(&defstream, Z_FINISH);
     	deflateEnd(&defstream);
 	*compressed=compr;
@@ -172,19 +173,22 @@
 	return nbase;
 }
 
-char *ts_compress_intlist(int *data, ts_uint data_len){
+char *ts_compress(char *data, ts_uint data_len, ts_uint original_len){
 	size_t nbase1, nbase2;
 	char *compr;
-	size_t number_of_compressed_bytes=ts_compress_data((char *)data, data_len*sizeof(int), &compr);
+	size_t number_of_compressed_bytes=ts_compress_data(data, data_len, &compr);
 	char *encoded_compressed=base64_encode((unsigned char *)compr,number_of_compressed_bytes,&nbase1);
 	free(compr);
-	ts_uint header[4]={1, data_len, data_len, nbase1};
+	ts_uint header[4]={1, original_len, original_len, number_of_compressed_bytes};
 	char *encoded_header=(char *)base64_encode((unsigned char *)header, 4*sizeof(ts_uint), &nbase2);
-	encoded_header=realloc(encoded_header, nbase1+nbase2);
-	encoded_header=strcat(encoded_header,encoded_compressed);
-	fprintf(stderr,"WAS HERE %d\n", data_len);
+	char *return_value=malloc((nbase1+nbase2+1)*sizeof(char));
+	strncpy(return_value,encoded_header,nbase2);
+	strncpy(return_value+nbase2,encoded_compressed,nbase1);
+	*(return_value+nbase1+nbase2)=0;
+	printf("Compressed size in bytes= %ld, size of encoded header= %ld, size of encoded compressed= %ld.\n",number_of_compressed_bytes, nbase2, nbase1);
 	free(encoded_compressed);
-	return encoded_header;
+	free(encoded_header);
+	return return_value;
 }
 
 ts_uint ts_decompress_string64(char *b64, ts_uint data_len, char **decompressed){
diff --git a/src/snapshot.h b/src/snapshot.h
index 4a632db..e7a3865 100644
--- a/src/snapshot.h
+++ b/src/snapshot.h
@@ -26,5 +26,5 @@
 void build_decoding_table();
 void base64_cleanup();
 ts_uint ts_compress_string64(char *data, ts_uint data_len, char **compressed);
-char *ts_compress_intlist(int *data, ts_uint data_len);
+char *ts_compress(char *data, ts_uint data_len, ts_uint original_len);
 #endif
diff --git a/src/tape b/src/tape
index bdce9e7..2e0edfd 100644
--- a/src/tape
+++ b/src/tape
@@ -30,7 +30,7 @@
 
 ####### Polymer (brush) definitions ###########
 # npoly is a number of polymers attached to npoly distinct vertices on vesicle
-npoly=10
+npoly=0
 # nmono is a number of monomers in each polymer
 nmono=20
 # Spring constant between monomers of the polymer

--
Gitblit v1.9.3