Introduce x2nrealloc() helper function, and use it.
authorBen Pfaff <blp@nicira.com>
Wed, 17 Dec 2008 00:19:36 +0000 (16:19 -0800)
committerBen Pfaff <blp@nicira.com>
Wed, 17 Dec 2008 00:56:49 +0000 (16:56 -0800)
Also fixes a bug in read_cert_file() in vconn-ssl.c: "sizeof *certs"
should have been "sizeof **certs".  In fact the sizes will be identical
in all practical cases since both *certs and **certs are pointer types,
so this is not an important fix.

lib/fatal-signal.c
lib/util.c
lib/util.h
lib/vconn-ssl.c
secchan/secchan.c
secchan/status.c

index ac9e2a59f559b514eeb3680773aa739425b612e2..e4bc457780ffa8178a1ea7f14a8dd9aee7e6c41c 100644 (file)
@@ -201,8 +201,7 @@ fatal_signal_add_file_to_unlink(const char *file)
 
     fatal_signal_block();
     if (n_files >= max_files) {
-        max_files = max_files * 2 + 1;
-        files = xrealloc(files, sizeof *files * max_files);
+        files = x2nrealloc(files, &max_files, sizeof *files);
     }
     files[n_files++] = xstrdup(file);
     fatal_signal_unblock();
index 72138a0668ac00b874f234077ecbe118dd9ec9a1..abf005d34f3f7681727036cc2ac16d141330eca8 100644 (file)
@@ -118,6 +118,13 @@ xvasprintf(const char *format, va_list args)
     return s;
 }
 
+void *
+x2nrealloc(void *p, size_t *n, size_t s)
+{
+    *n = *n == 0 ? 1 : 2 * *n;
+    return xrealloc(p, *n * s);
+}
+
 char *
 xasprintf(const char *format, ...)
 {
index 8dee9b6d46b54d01b43b78cb022993357d94b4a6..8172b69e46c96e0a20d832f4a983d5aaa2bdd1b4 100644 (file)
@@ -102,6 +102,7 @@ char *xmemdup0(const char *, size_t);
 char *xstrdup(const char *);
 char *xasprintf(const char *format, ...) PRINTF_FORMAT(1, 2);
 char *xvasprintf(const char *format, va_list) PRINTF_FORMAT(1, 0);
+void *x2nrealloc(void *p, size_t *n, size_t s);
 
 #ifndef HAVE_STRLCPY
 void strlcpy(char *dst, const char *src, size_t size);
index 383714af47bb8bde4d341a30d606e416fecbab9e..6d24e277bfe05a908f135b21114a0ab8625e929a 100644 (file)
@@ -1087,8 +1087,7 @@ read_cert_file(const char *file_name, X509 ***certs, size_t *n_certs)
 
         /* Add certificate to array. */
         if (*n_certs >= allocated_certs) {
-            allocated_certs = 1 + 2 * allocated_certs;
-            *certs = xrealloc(*certs, sizeof *certs * allocated_certs);
+            *certs = x2nrealloc(*certs, &allocated_certs, sizeof **certs);
         }
         (*certs)[(*n_certs)++] = certificate;
 
index fa8d6e859502e885825c24bc13beb85c0e3891e4..e2712cd112d531b147fdb8b456ac4c49f54f4f4f 100644 (file)
@@ -313,10 +313,8 @@ add_hook(struct secchan *secchan, const struct hook_class *class, void *aux)
     struct hook *hook;
 
     if (secchan->n_hooks >= secchan->allocated_hooks) {
-        secchan->allocated_hooks = secchan->allocated_hooks * 2 + 1;
-        secchan->hooks = xrealloc(secchan->hooks,
-                                  (sizeof *secchan->hooks
-                                   * secchan->allocated_hooks));
+        secchan->hooks = x2nrealloc(secchan->hooks, &secchan->allocated_hooks,
+                                    sizeof *secchan->hooks);
     }
     hook = &secchan->hooks[secchan->n_hooks++];
     hook->class = class;
index 8b6224c4636641de8059600b1d6a8343ce5b9cb4..cf22812360ed48ee024beb82d6ea2ae45ae13388 100644 (file)
@@ -58,7 +58,7 @@ struct switch_status {
     const struct settings *s;
     time_t booted;
     struct switch_status_category *categories;
-    int n_categories, allocated_categories;
+    size_t n_categories, allocated_categories;
 };
 
 struct status_reply {
@@ -195,10 +195,8 @@ switch_status_register_category(struct switch_status *ss,
 {
     struct switch_status_category *c;
     if (ss->n_categories >= ss->allocated_categories) {
-        ss->allocated_categories = 1 + ss->allocated_categories * 2;
-        ss->categories = xrealloc(ss->categories,
-                                  (sizeof *ss->categories
-                                   * ss->allocated_categories));
+        ss->categories = x2nrealloc(ss->categories, &ss->allocated_categories,
+                                    sizeof *ss->categories);
     }
     c = &ss->categories[ss->n_categories++];
     c->cb = cb;