use calloc_a for interface error allocations
authorFelix Fietkau <nbd@openwrt.org>
Mon, 31 Dec 2012 15:36:01 +0000 (16:36 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 31 Dec 2012 15:36:16 +0000 (16:36 +0100)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
interface.c
netifd.h

index 77654fe1d6edab28908ab076e8578fca81b7ba99..352c73496bd449fc6e179709f0cb74c74a1fcb87 100644 (file)
@@ -79,8 +79,7 @@ void interface_add_error(struct interface *iface, const char *subsystem,
        struct interface_error *error;
        int i, len = 0;
        int *datalen = NULL;
-       char *dest;
-       int subsystem_len = 0, code_len = 0;
+       char *dest, *d_subsys, *d_code;
 
        if (n_data) {
                len = n_data * sizeof(char *);
@@ -91,17 +90,9 @@ void interface_add_error(struct interface *iface, const char *subsystem,
                }
        }
 
-       if (subsystem) {
-               subsystem_len = strlen(subsystem) + 1;
-               len += subsystem_len;
-       }
-
-       if (code) {
-               code_len = strlen(code) + 1;
-               len += code_len;
-       }
-
-       error = calloc(1, sizeof(*error) + sizeof(char *) + len);
+       error = calloc_a(sizeof(*error) + sizeof(char *) + len,
+               &d_subsys, subsystem ? strlen(subsystem) + 1 : 0,
+               &d_code, code ? strlen(code) + 1 : 0);
        if (!error)
                return;
 
@@ -115,18 +106,11 @@ void interface_add_error(struct interface *iface, const char *subsystem,
        }
        error->data[n_data++] = NULL;
 
-       dest = (char *) &error->data[n_data];
-       if (subsystem) {
-               error->subsystem = dest;
-               strcpy(dest, subsystem);
-               dest += subsystem_len;
-       }
+       if (subsystem)
+               error->subsystem = strcpy(d_subsys, subsystem);
 
-       if (code) {
-               error->code = dest;
-               strcpy(dest, code);
-               dest += code_len;
-       }
+       if (code)
+               error->code = strcpy(d_code, code);
 }
 
 static void
index aa955ef50f9516749f4fb767770bdce4cc919680..befa2ccb331985e11f18c62d2726a8d1843fe1c7 100644 (file)
--- a/netifd.h
+++ b/netifd.h
@@ -22,6 +22,7 @@
 
 #include <libubox/uloop.h>
 #include <libubox/ustream.h>
+#include <libubox/utils.h>
 
 #include <libubus.h>