From: Henry Amrhein Date: Tue, 15 Jan 2013 22:54:50 +0000 (-0800) Subject: razf.c: replaced many calloc() calls with one large calloc() using RAZF_STRUCT_SIZE... X-Git-Url: http://woldlab.caltech.edu/gitweb/?p=samtools.git;a=commitdiff_plain;h=6af18f61e244218ba9d73efbfe56742d24b0685e razf.c: replaced many calloc() calls with one large calloc() using RAZF_STRUCT_SIZE macro --- diff --git a/razf.c b/razf.c index 0223971..d6aede2 100644 --- a/razf.c +++ b/razf.c @@ -206,68 +206,28 @@ static RAZF* razf_open_w(int fd){ #ifdef _WIN32 setmode(fd, O_BINARY); #endif - if ((rz = calloc(1, sizeof(RAZF))) == NULL) { + if ((rz = calloc(1, RAZF_STRUCT_SIZE)) == NULL) { fprintf(stderr, "[%s] failure to allocate RAZF structure.\n", __func__); return NULL; } + rz->stream = (z_stream *)rz + sizeof(RAZF); + rz->inbuf = rz->stream + sizeof(z_stream); + rz->outbuf = rz->inbuf + RZ_BUFFER_SIZE; + rz->index = rz->outbuf + RZ_BUFFER_SIZE; + rz->header = (gz_header *)rz->index + sizeof(ZBlockIndex); + rz->header->extra = (Bytef *)rz->header + sizeof(gz_header); rz->mode = 'w'; #ifdef _USE_KNETFILE - rz->x.fpw = fd; + rz->x.fpw = fd; #else rz->filedes = fd; #endif - if ((rz->stream = calloc(sizeof(z_stream), 1)) == NULL) { - fprintf(stderr, "[%s] failure to allocate stream buffer.\n", __func__); - free(rz); - return NULL; - } - if ((rz->inbuf = malloc(RZ_BUFFER_SIZE)) == NULL) { - fprintf(stderr, "[%s] failure to allocate input buffer.\n", __func__); - free(rz->stream); - free(rz); - return NULL; - } - if ((rz->outbuf = malloc(RZ_BUFFER_SIZE)) == NULL) { - fprintf(stderr, "[%s] failure to allocate output buffer.\n", __func__); - free(rz->stream); - free(rz->inbuf); - free(rz); - return NULL; - } - if ((rz->index = calloc(sizeof(ZBlockIndex), 1)) == NULL) { - fprintf(stderr, "[%s] failure to allocate index.\n", __func__); - free(rz->stream); - free(rz->inbuf); - free(rz->outbuf); - free(rz); - return NULL; - } - deflateInit2(rz->stream, RZ_COMPRESS_LEVEL, Z_DEFLATED, WINDOW_BITS + 16, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); rz->stream->avail_out = RZ_BUFFER_SIZE; rz->stream->next_out = rz->outbuf; - if ((rz->header = calloc(sizeof(gz_header), 1)) == NULL) { - fprintf(stderr, "[%s] failure to allocate header buffer.\n", __func__); - free(rz->stream); - free(rz->inbuf); - free(rz->outbuf); - free(rz->index); - free(rz); - return NULL; - } rz->header->os = 0x03; //Unix rz->header->text = 0; rz->header->time = 0; - if ((rz->header->extra = malloc(7)) == NULL) { - fprintf(stderr, "[%s] failure to allocate header buffer.\n", __func__); - free(rz->stream); - free(rz->inbuf); - free(rz->outbuf); - free(rz->index); - free(rz->header); - free(rz); - return NULL; - } strncpy((char*)rz->header->extra, "RAZF", 4); rz->header->extra[4] = 1; // obsolete field // block size = RZ_BLOCK_SIZE, Big-Endian @@ -467,10 +427,16 @@ static RAZF* razf_open_r(int fd, int _load_index){ int n, is_be, ret; int64_t end; unsigned char c[] = "RAZF"; - if ((rz = calloc(1, sizeof(RAZF))) == NULL) { + if ((rz = calloc(1, RAZF_STRUCT_SIZE)) == NULL) { fprintf(stderr, "[%s] failure to allocate RAZF structure.\n", __func__); return NULL; } + rz->stream = (z_stream *)rz + sizeof(RAZF); + rz->inbuf = rz->stream + sizeof(z_stream); + rz->outbuf = rz->inbuf + RZ_BUFFER_SIZE; + rz->index = rz->outbuf + RZ_BUFFER_SIZE; + rz->header = (gz_header *)rz->index + sizeof(ZBlockIndex); + rz->header->extra = (Bytef *)rz->header + sizeof(gz_header); rz->mode = 'r'; #ifdef _USE_KNETFILE rz->x.fpr = fp; @@ -480,24 +446,6 @@ static RAZF* razf_open_r(int fd, int _load_index){ #endif rz->filedes = fd; #endif - if ((rz->stream = calloc(sizeof(z_stream), 1)) == NULL) { - fprintf(stderr, "[%s] failure to allocate z_stream.\n", __func__); - free(rz); - return NULL; - } - if ((rz->inbuf = malloc(RZ_BUFFER_SIZE)) == NULL) { - fprintf(stderr, "[%s] failure to allocate input buffer.\n", __func__); - free(rz->stream); - free(rz); - return NULL; - } - if ((rz->outbuf = malloc(RZ_BUFFER_SIZE)) == NULL) { - fprintf(stderr, "[%s] failure to allocate output buffer.\n", __func__); - free(rz->inbuf); - free(rz->stream); - free(rz); - return NULL; - } rz->end = rz->src_end = 0x7FFFFFFFFFFFFFFFLL; #ifdef _USE_KNETFILE n = knet_read(rz->x.fpr, rz->inbuf, RZ_BUFFER_SIZE);