utils: pass a const string to parsePath()

Remove the slash hack, allocate memory for the user name.
This commit is contained in:
Max Kellermann 2011-09-09 22:17:35 +02:00
parent cceaec1d74
commit 61fc01e79e
2 changed files with 14 additions and 15 deletions

View File

@ -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);

View File

@ -31,6 +31,7 @@
} while (0)
#endif /* !assert_static */
char *parsePath(char *path);
char *
parsePath(const char *path);
#endif