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