From 7b0a0eca766348d53f7e4e2ac76f4a9f7b296a61 Mon Sep 17 00:00:00 2001 From: mar Date: Tue, 5 Dec 1989 18:33:02 +0000 Subject: [PATCH] detect running out of memory --- lib/hash.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/hash.c b/lib/hash.c index aedd5e46..c6cef7ee 100644 --- a/lib/hash.c +++ b/lib/hash.c @@ -22,8 +22,14 @@ int size; struct hash *h; h = (struct hash *) malloc(sizeof(struct hash)); + if (h == (struct hash *) NULL) + return((struct hash *) NULL); h->size = size; h->data = (struct bucket **) malloc(size * sizeof(char *)); + if (h->data == (struct bucket **) NULL) { + free(h); + return((struct hash *) NULL); + } bzero(h->data, size * sizeof(char *)); return(h); } @@ -71,7 +77,7 @@ char *value; /* Store an item in the hash table. Returns 0 if the key was not previously - * there, or 1 if it was. + * there, 1 if it was, or -1 if we ran out of memory. */ int hash_store(h, key, value) @@ -84,6 +90,8 @@ char *value; p = &(h->data[hash_func(h, key)]); if (*p == NULL) { b = *p = (struct bucket *) malloc(sizeof(struct bucket)); + if (b == (struct bucket *) NULL) + return(-1); b->next = NULL; b->key = key; b->data = value; @@ -97,6 +105,8 @@ char *value; return(1); } b = *p = (struct bucket *) malloc(sizeof(struct bucket)); + if (b == (struct bucket *) NULL) + return(-1); b->next = NULL; b->key = key; b->data = value; -- 2.45.2