From: Gustavo Sverzut Barbieri Date: Sun, 4 Dec 2011 19:32:44 +0000 (-0200) Subject: kmod_alias: reduce from 3 mallocs to a single one. X-Git-Tag: v1~99 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=43c29d10ff8dbe1e73bcea95b1cbb7b27547f828;p=thirdparty%2Fkmod.git kmod_alias: reduce from 3 mallocs to a single one. --- diff --git a/libkmod/libkmod-config.c b/libkmod/libkmod-config.c index 546637fe..75fdbf15 100644 --- a/libkmod/libkmod-config.c +++ b/libkmod/libkmod-config.c @@ -40,7 +40,7 @@ static const char *config_files[] = { struct kmod_alias { char *name; - char *modname; + char modname[]; }; const char *kmod_alias_get_name(const struct kmod_list *l) { @@ -58,16 +58,17 @@ static int kmod_config_add_alias(struct kmod_config *config, { struct kmod_alias *alias; struct kmod_list *list; + size_t namelen = strlen(name) + 1, modnamelen = strlen(modname) + 1; DBG(config->ctx, "name=%s modname=%s\n", name, modname); - alias = malloc(sizeof(*alias)); + alias = malloc(sizeof(*alias) + namelen + modnamelen); if (!alias) goto oom_error_init; - alias->name = strdup(name); - alias->modname = strdup(modname); - if (!alias->name || !alias->modname) - goto oom_error; + alias->name = sizeof(*alias) + modnamelen + (char *)alias; + + memcpy(alias->modname, modname, modnamelen); + memcpy(alias->name, name, namelen); list = kmod_list_append(config->aliases, alias); if (!list) @@ -76,8 +77,6 @@ static int kmod_config_add_alias(struct kmod_config *config, return 0; oom_error: - free(alias->name); - free(alias->modname); free(alias); oom_error_init: ERR(config->ctx, "out-of-memory name=%s modname=%s\n", name, modname); @@ -88,8 +87,6 @@ static void kmod_config_free_alias(struct kmod_config *config, struct kmod_list { struct kmod_alias *alias = l->data; - free(alias->modname); - free(alias->name); free(alias); config->aliases = kmod_list_remove(l);