summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-10-29 16:58:16 +0100
committerFelix Fietkau <nbd@openwrt.org>2013-10-29 17:08:15 +0100
commit594f4dcd3a37b087fe8c1a4737bbd41a620c24a9 (patch)
tree76483e41fa6f629f18bcf95c8645763895e7cf9f
parent0bdaf23dc9fc786698787593381efefd527e5f89 (diff)
proto-shell: replace variable length name char arrays with pointers, using calloc_a
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-rw-r--r--proto-shell.c32
1 files changed, 15 insertions, 17 deletions
diff --git a/proto-shell.c b/proto-shell.c
index 629f43b..6bbfe10 100644
--- a/proto-shell.c
+++ b/proto-shell.c
@@ -41,22 +41,22 @@ enum proto_shell_sm {
struct proto_shell_handler {
struct list_head list;
struct proto_handler proto;
- struct uci_blob_param_list config;
char *config_buf;
+ char *script_name;
bool init_available;
- char script_name[];
+
+ struct uci_blob_param_list config;
};
struct proto_shell_dependency {
struct list_head list;
+ char *interface;
struct proto_shell_state *proto;
struct interface_user dep;
union if_addr host;
bool v6;
-
- char interface[];
};
struct proto_shell_state {
@@ -618,13 +618,14 @@ proto_shell_add_host_dependency(struct proto_shell_state *state, struct blob_att
{
struct proto_shell_dependency *dep;
struct blob_attr *host = tb[NOTIFY_HOST];
- struct blob_attr *ifname = tb[NOTIFY_IFNAME];
- size_t ifnamelen = (ifname) ? blobmsg_data_len(ifname) : 1;
+ struct blob_attr *ifname_a = tb[NOTIFY_IFNAME];
+ const char *ifname_str = ifname_a ? blobmsg_data(ifname_a) : "";
+ char *ifname;
if (!host)
return UBUS_STATUS_INVALID_ARGUMENT;
- dep = calloc(1, sizeof(*dep) + ifnamelen);
+ dep = calloc_a(sizeof(*dep), &ifname, strlen(ifname_str) + 1);
if (inet_pton(AF_INET, blobmsg_data(host), &dep->host) < 1) {
if (inet_pton(AF_INET6, blobmsg_data(host), &dep->host) < 1) {
free(dep);
@@ -635,10 +636,7 @@ proto_shell_add_host_dependency(struct proto_shell_state *state, struct blob_att
}
dep->proto = state;
- if (ifname)
- memcpy(dep->interface, blobmsg_data(ifname), ifnamelen);
- else
- dep->interface[0] = 0;
+ dep->interface = strcpy(ifname, ifname_str);
dep->dep.cb = proto_shell_if_up_cb;
interface_add_user(&dep->dep, NULL);
@@ -739,18 +737,18 @@ proto_shell_add_handler(const char *script, const char *name, json_object *obj)
struct proto_shell_handler *handler;
struct proto_handler *proto;
json_object *config, *tmp;
- char *str;
+ char *proto_name, *script_name;
- handler = calloc_a(sizeof(*handler) + strlen(script) + 1,
- &str, strlen(name) + 1);
+ handler = calloc_a(sizeof(*handler),
+ &proto_name, strlen(name) + 1,
+ &script_name, strlen(script) + 1);
if (!handler)
return;
- strcpy(handler->script_name, script);
- strcpy(str, name);
+ handler->script_name = strcpy(script_name, script);
proto = &handler->proto;
- proto->name = str;
+ proto->name = strcpy(proto_name, name);
proto->config_params = &handler->config;
proto->attach = proto_shell_attach;