summaryrefslogtreecommitdiffstats
path: root/support/export/client.c
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2010-04-23 12:09:35 -0400
committerSteve Dickson <steved@redhat.com>2010-04-23 12:12:10 -0400
commit08e1512e4a932f41867f0b515348b9402db50cbd (patch)
tree9c92bafa32379803bad170083336bc89f76f0df0 /support/export/client.c
parentaa4b66b12b631885ed85f3ebe97e68b033407178 (diff)
downloadnfs-utils-08e1512e4a932f41867f0b515348b9402db50cbd.tar.gz
nfs-utils-08e1512e4a932f41867f0b515348b9402db50cbd.tar.xz
nfs-utils-08e1512e4a932f41867f0b515348b9402db50cbd.zip
libexport.a: Allow malloc(3) failures in client_lookup() and friends
Clean up: Use malloc(3) instead of xmalloc() in client_lookup() and client_dup(), ensuring that a failed memory allocation here doesn't cause our process to exit suddenly. Allocation of nfs_client records and the m_hostname string are now consistently handled with malloc(3), calloc(3), strdup(3), and free(3). Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'support/export/client.c')
-rw-r--r--support/export/client.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/support/export/client.c b/support/export/client.c
index 20d662a..eafc2bf 100644
--- a/support/export/client.c
+++ b/support/export/client.c
@@ -17,7 +17,7 @@
#include <string.h>
#include <ctype.h>
#include <netdb.h>
-#include "xmalloc.h"
+
#include "misc.h"
#include "nfslib.h"
#include "exportfs.h"
@@ -56,7 +56,7 @@ static void
client_free(nfs_client *clp)
{
free(clp->m_hostname);
- xfree(clp);
+ free(clp);
}
/* if canonical is set, then we *know* this is already a canonical name
@@ -111,9 +111,10 @@ client_lookup(char *hname, int canonical)
}
}
- if (!clp) {
- clp = (nfs_client *) xmalloc(sizeof(*clp));
- memset(clp, 0, sizeof(*clp));
+ if (clp == NULL) {
+ clp = calloc(1, sizeof(*clp));
+ if (clp == NULL)
+ goto out;
clp->m_type = htype;
if (!client_init(clp, hname, NULL)) {
client_free(clp);
@@ -138,7 +139,9 @@ client_dup(nfs_client *clp, struct hostent *hp)
{
nfs_client *new;
- new = (nfs_client *) xmalloc(sizeof(*new));
+ new = (nfs_client *)malloc(sizeof(*new));
+ if (new == NULL)
+ return NULL;
memcpy(new, clp, sizeof(*new));
new->m_type = MCL_FQDN;
new->m_hostname = NULL;