X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=interface.c;h=352c73496bd449fc6e179709f0cb74c74a1fcb87;hp=fddb861b09fea310217fe435642cd6465e2abd80;hb=fabdd4fc5c7354e897f91e96e734f584776736c7;hpb=2eca28705a27ab37ee902308af2c134c64c95e61 diff --git a/interface.c b/interface.c index fddb861..352c734 100644 --- a/interface.c +++ b/interface.c @@ -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 @@ -214,8 +198,6 @@ mark_interface_down(struct interface *iface) void __interface_set_down(struct interface *iface, bool force) { - interface_clear_errors(iface); - if (iface->state == IFS_DOWN || iface->state == IFS_TEARDOWN) return;