From 7b14d729bd03d231fb7c4b090aecff5f1aea9c9e Mon Sep 17 00:00:00 2001 From: Christof Hanke Date: Tue, 5 Oct 2010 17:01:41 +0200 Subject: [PATCH] volserver: Do not return ENOMEM on AIX from XVolListPartitions 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. Reviewed-on: http://gerrit.openafs.org/2912 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit 21e1bb9bb46b0e8e2523c3310ea8e602d2b07091) Change-Id: I88181baf4b4b5d0078593ffb27dedfd3f761db57 Reviewed-on: http://gerrit.openafs.org/3050 --- src/volser/volprocs.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/volser/volprocs.c b/src/volser/volprocs.c index 6237b874f..8f398092d 100644 --- a/src/volser/volprocs.c +++ b/src/volser/volprocs.c @@ -1887,12 +1887,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; } -- 2.39.5