volserver: Do not return ENOMEM on AIX from XVolListPartitions
authorChristof Hanke <christof.hanke@rzg.mpg.de>
Tue, 5 Oct 2010 15:01:41 +0000 (17:01 +0200)
committerDerrick Brashear <shadow@dementia.org>
Tue, 5 Oct 2010 19:27:25 +0000 (12:27 -0700)
When calling "vos partinfo" or "vos listpart" towards a server
 running AIX with no partitions attached, it would return a
ENOMEM, because unlike on linux, malloc(0) returns NULL on AIX.
Thus, just don't do any malloc, when we have no partitions anyway.

Change-Id: Id1900e2ab11850ada8b2e91667288576d408014b
Reviewed-on: http://gerrit.openafs.org/2912
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

src/volser/volprocs.c

index 94f4586..f609e1a 100644 (file)
@@ -1884,12 +1884,17 @@ XVolListPartitions(struct rx_call *acid, struct partEntries *pEntries)
        if (dp)
            partList.partId[j++] = i;
     }
-    pEntries->partEntries_val = (afs_int32 *) malloc(j * sizeof(int));
-    if (!pEntries->partEntries_val)
-       return ENOMEM;
-    memcpy((char *)pEntries->partEntries_val, (char *)&partList,
-          j * sizeof(int));
-    pEntries->partEntries_len = j;
+    if (j > 0) {
+       pEntries->partEntries_val = (afs_int32 *) malloc(j * sizeof(int));
+       if (!pEntries->partEntries_val)
+           return ENOMEM;
+       memcpy((char *)pEntries->partEntries_val, (char *)&partList,
+               j * sizeof(int));
+       pEntries->partEntries_len = j;
+    } else {
+       pEntries->partEntries_val = NULL;
+       pEntries->partEntries_len = 0;
+    }
     return 0;
 
 }