]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
Add helper path_make_absolute_cwd()
authorLucas De Marchi <lucas.demarchi@profusion.mobi>
Wed, 7 Dec 2011 15:51:40 +0000 (13:51 -0200)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Wed, 7 Dec 2011 15:51:40 +0000 (13:51 -0200)
libkmod/libkmod-private.h
libkmod/libkmod-util.c

index 58ac0db1f4bd7368dab8020f8bbe5d056d4e6c3a..578edf2e95de3496445e1570a14a27c3cf82f92f 100644 (file)
@@ -117,6 +117,7 @@ int read_str_long(int fd, long *value, int base) __must_check __attribute__((non
 int read_str_ulong(int fd, unsigned long *value, int base) __must_check __attribute__((nonnull(2)));
 char *strchr_replace(char *s, int c, char r);
 bool path_is_absolute(const char *p) __must_check __attribute__((nonnull(1)));
+char *path_make_absolute_cwd(const char *p) __must_check __attribute__((nonnull(1)));
 
 
 #endif
index 477139f5a9a7eb49c82aaf834026f7293e932ea9..f855bc7b697ae7c3b6f7fbc32181677eb3f62ed2 100644 (file)
@@ -221,3 +221,32 @@ bool path_is_absolute(const char *p)
 
        return p[0] == '/';
 }
+
+char *path_make_absolute_cwd(const char *p)
+{
+       char *cwd, *r;
+       size_t plen;
+       size_t cwdlen;
+
+       if (path_is_absolute(p))
+               return strdup(p);
+
+       cwd = get_current_dir_name();
+       if (cwd == NULL)
+               return NULL;
+
+       plen = strlen(p);
+       cwdlen = strlen(cwd);
+
+       /* cwd + '/' + p + '\0' */
+       r = realloc(cwd, cwdlen + 1 + plen + 1);
+       if (r == NULL) {
+               free(cwd);
+               return NULL;
+       }
+
+       r[plen] = '/';
+       memcpy(&r[plen + 1], p, plen + 1);
+
+       return r;
+}