Commit 61fc01e7 authored by Max Kellermann's avatar Max Kellermann

utils: pass a const string to parsePath()

Remove the slash hack, allocate memory for the user name.
parent cceaec1d
......@@ -41,7 +41,8 @@
#include <windows.h>
#endif
char *parsePath(char *path)
char *
parsePath(const char *path)
{
#ifndef WIN32
if (!g_path_is_absolute(path) && path[0] != '~') {
......@@ -71,27 +72,24 @@ char *parsePath(char *path)
++path;
} else {
bool foundSlash = false;
struct passwd *passwd;
char *c;
++path;
for (c = path + 1; *c != '\0' && *c != '/'; c++);
if (*c == '/') {
foundSlash = true;
*c = '\0';
}
const char *slash = strchr(path, '/');
char *user = slash != NULL
? g_strndup(path, slash - path)
: g_strdup(path);
passwd = getpwnam(path + 1);
struct passwd *passwd = getpwnam(user);
if (!passwd) {
g_warning("user \"%s\" not found", path + 1);
g_warning("user \"%s\" not found", user);
g_free(user);
return NULL;
}
if (foundSlash)
*c = '/';
g_free(user);
home = passwd->pw_dir;
path = c;
path = slash;
}
return g_strconcat(home, path, NULL);
......
......@@ -31,6 +31,7 @@
} while (0)
#endif /* !assert_static */
char *parsePath(char *path);
char *
parsePath(const char *path);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment