kmod_module: store absolute path when creating module from path
diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c
index e7a7150..0aee3ee 100644
--- a/libkmod/libkmod-module.c
+++ b/libkmod/libkmod-module.c
@@ -182,19 +182,27 @@
int err;
struct stat st;
char name[NAME_MAX];
+ char *abspath;
size_t namelen;
if (ctx == NULL || path == NULL)
return -ENOENT;
- err = stat(path, &st);
- if (err < 0)
+ abspath = path_make_absolute_cwd(path);
+ if (abspath == NULL)
+ return -ENOMEM;
+
+ err = stat(abspath, &st);
+ if (err < 0) {
+ free(abspath);
return -errno;
+ }
path_to_modname(path, name, &namelen);
m = kmod_pool_get_module(ctx, name);
if (m != NULL) {
+ free(abspath);
*mod = kmod_module_ref(m);
return 0;
}
@@ -203,15 +211,9 @@
if (m == NULL)
return -errno;
- m->path = strdup(path);
- if (m->path == NULL) {
- err = -errno;
- free(m);
- return err;
- }
-
m->ctx = kmod_ref(ctx);
memcpy(m->name, name, namelen);
+ m->path = abspath;
m->refcount = 1;
kmod_pool_add_module(ctx, m);