razf.c: replaced many calloc() calls with one large calloc() using RAZF_STRUCT_SIZE... hamrhein
authorHenry Amrhein <hamrhein@caltech.edu>
Tue, 15 Jan 2013 22:54:50 +0000 (14:54 -0800)
committerHenry Amrhein <hamrhein@caltech.edu>
Tue, 15 Jan 2013 22:54:50 +0000 (14:54 -0800)
razf.c

diff --git a/razf.c b/razf.c
index 022397169188e89a8ed49c4ef846fc18fa1a026b..d6aede2aa01d783a349c352cb6f54fb28545d25d 100644 (file)
--- 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);