]> git.deb.at Git - pkg/abook.git/commitdiff
- add xrealloc_inc
authorJaakko Heinonen <jheinonen@users.sourceforge.net>
Wed, 27 Jul 2005 06:47:38 +0000 (06:47 +0000)
committerJaakko Heinonen <jheinonen@users.sourceforge.net>
Wed, 27 Jul 2005 06:47:38 +0000 (06:47 +0000)
- xmalloc cleanups

filter.c
misc.c
xmalloc.c
xmalloc.h

index e11a60e18ee9bfb35a26ead350449e67677a21cb..f5998ba9447a33335ff8ed7f995111c073b2d526 100644 (file)
--- a/filter.c
+++ b/filter.c
@@ -646,16 +646,12 @@ mutt_read_line(FILE *in, char **alias, char **rest)
        while( ! ISSPACE(*ptr) )
                ptr++;
 
-       /* includes also the trailing zero */
-       alias_len = (size_t)(ptr - tmp + 1);
+       alias_len = (size_t)(ptr - tmp);
 
-       if( (*alias = xmalloc(alias_len)) == NULL) {
-               free(line);
-               return 1;
-       }
+       *alias = xmalloc_inc(alias_len, 1);
 
-       strncpy(*alias, tmp, alias_len - 1);
-       *(*alias + alias_len - 1) = 0;
+       strncpy(*alias, tmp, alias_len);
+       *(*alias + alias_len) = 0;
 
        while(ISSPACE(*ptr))
                ptr++;
diff --git a/misc.c b/misc.c
index 6c96c5acbc6b65b5f43b18dad749460fc9a4da9d..db2a584f6a4b0683c5a819fe876b7490aa874362 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -103,7 +103,7 @@ mkstr (const char *format, ... )
                else
                        size *= 2;
                
-               buffer = xrealloc (buffer, size);
+               buffer = xrealloc(buffer, size);
        }
 }
 
@@ -218,7 +218,7 @@ getaline(FILE *f)
                        break;          /* the whole line has been read */
 
                for (inc = size, p = NULL; inc > mininc; inc /= 2)
-                       if ((p = xrealloc(buf, size + inc)) !=
+                       if ((p = xrealloc_inc(buf, size, inc)) !=
                                        NULL)
                                break;
 
@@ -235,7 +235,7 @@ getaline(FILE *f)
                buf[--len] = '\0';
 
        if (size - len > mucho) { /* a plenitude of unused memory? */
-               p = xrealloc(buf, len+1);
+               p = xrealloc_inc(buf, len, 1);
                if (p != NULL) {
                        buf = p;
                        size = len+1;
index 086f3fbb69ed9b5fe351a9078af9e75d29abf80a..bc22a97b19faa6867ee9f8535a5b0ea52d3e2a3b 100644 (file)
--- a/xmalloc.c
+++ b/xmalloc.c
@@ -78,22 +78,6 @@ xmalloc0(size_t size)
        return p;
 }
 
-void *
-xrealloc(void *ptr, size_t size)
-{
-       if((ptr = realloc(ptr, size)) == NULL)
-               (*xmalloc_handle_error)(errno);
-
-       return ptr;
-}
-
-void
-xfree(void *ptr)
-{
-       free(ptr);
-       ptr = NULL;
-}
-
 static void *
 _xmalloc_inc(size_t size, size_t inc, int zero)
 {
@@ -122,3 +106,38 @@ xmalloc0_inc(size_t size, size_t inc)
        return _xmalloc_inc(size, inc, 1);
 }
 
+void *
+xrealloc(void *ptr, size_t size)
+{
+       if((ptr = realloc(ptr, size)) == NULL)
+               (*xmalloc_handle_error)(errno);
+
+       return ptr;
+}
+
+void *
+xrealloc_inc(void *ptr, size_t size, size_t inc)
+{
+       size_t total_size = size + inc;
+
+       /*
+        * check if the calculation overflowed
+        */
+       if(total_size < size) {
+               (*xmalloc_handle_error)(EINVAL);
+               return NULL;
+       }
+
+       if((ptr = realloc(ptr, total_size)) == NULL)
+               (*xmalloc_handle_error)(errno);
+
+       return ptr;
+}
+
+void
+xfree(void *ptr)
+{
+       free(ptr);
+       ptr = NULL;
+}
+
index f8e0bc1fd09b31e54b7dbf7094216accbeca1fc7..c6c5317599619153ee9afcd273c2362b7aeb115d 100644 (file)
--- a/xmalloc.h
+++ b/xmalloc.h
@@ -8,6 +8,7 @@ void *          xmalloc(size_t);
 void *         xmalloc0(size_t);
 void *         xmalloc_inc(size_t, size_t);
 void *         xrealloc(void *, size_t);
+void *         xrealloc_inc(void *, size_t, size_t);
 void           xfree(void *);
 
 #endif