]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
Do not allocate path for known places an close resource asap
authorLucas De Marchi <lucas.demarchi@profusion.mobi>
Fri, 9 Dec 2011 17:33:37 +0000 (15:33 -0200)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Fri, 9 Dec 2011 17:45:55 +0000 (15:45 -0200)
This place is not supposed to exceed PATH_MAX. So, use snprintf instead
of asprintf.

Close the index before iterating the values.

libkmod/libkmod.c

index 975b4b48c9018eb2a99f97b6ee3647204a53c0ca..f91e74fcf75212aa9576bfb3964628f8f29c0d68 100644 (file)
@@ -358,23 +358,23 @@ static int kmod_lookup_alias_from_alias_bin(struct kmod_ctx *ctx,
                                                const char *name,
                                                struct kmod_list **list)
 {
-       char *fn;
+       char fn[PATH_MAX];
        int err, nmatch = 0;
        struct index_file *idx;
        struct index_value *realnames, *realname;
 
-       if (asprintf(&fn, "%s/%s.bin", ctx->dirname, file) < 0)
-               return -ENOMEM;
+       fn[PATH_MAX - 1] = '\0';
+       snprintf(fn, sizeof(fn) - 1, "%s/%s.bin", ctx->dirname, file);
 
        DBG(ctx, "file=%s name=%s\n", fn, name);
 
        idx = index_file_open(fn);
-       if (idx == NULL) {
-               free(fn);
+       if (idx == NULL)
                return -ENOSYS;
-       }
 
        realnames = index_searchwild(idx, name);
+       index_file_close(idx);
+
        for (realname = realnames; realname; realname = realnames->next) {
                struct kmod_module *mod;
 
@@ -389,8 +389,6 @@ static int kmod_lookup_alias_from_alias_bin(struct kmod_ctx *ctx,
        }
 
        index_values_free(realnames);
-       index_file_close(idx);
-       free(fn);
 
        return nmatch;