Eliminate dead NULL-assignment by avoiding unnecessary allocation
authorPanu Matilainen <pmatilai@redhat.com>
Mon, 30 May 2011 14:13:51 +0000 (17:13 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Mon, 30 May 2011 14:13:51 +0000 (17:13 +0300)
- cpioHeaderRead() only needs to alloc after successfully reading
  the next filename from the cpio header, delay alloc until
  we know the read was successful.

lib/cpio.c

index b5c39c0..bfb2fbb 100644 (file)
@@ -131,6 +131,7 @@ int cpioHeaderRead(FSM_t fsm, struct stat * st)
     char * end;
     unsigned int major, minor;
     int rc = 0;
+    char * path = NULL;
 
     fsm->wrlen = PHYS_HDR_SIZE;
     rc = fsmNext(fsm, FSM_DREAD);
@@ -163,22 +164,18 @@ int cpioHeaderRead(FSM_t fsm, struct stat * st)
     if (nameSize >= fsm->wrsize)
        return CPIOERR_BAD_HEADER;
 
-    {  char * t = xmalloc(nameSize + 1);
-       fsm->wrlen = nameSize;
-       rc = fsmNext(fsm, FSM_DREAD);
-       if (!rc && fsm->rdnb != fsm->wrlen)
-           rc = CPIOERR_BAD_HEADER;
-       if (rc) {
-           t = _free(t);
-           fsm->path = NULL;
-           return rc;
-       }
-       memcpy(t, fsm->wrbuf, fsm->rdnb);
-       t[nameSize] = '\0';
-       fsm->path = t;
-    }
+    fsm->wrlen = nameSize;
+    rc = fsmNext(fsm, FSM_DREAD);
+    if (!rc && fsm->rdnb != fsm->wrlen)
+       rc = CPIOERR_BAD_HEADER;
 
-    return 0;
+    if (!rc) {
+       path = xmalloc(nameSize + 1);
+       memcpy(path, fsm->wrbuf, fsm->rdnb);
+       path[nameSize] = '\0';
+    }
+    fsm->path = path;
+    return rc;
 }
 
 const char * cpioStrerror(int rc)