diff options
author | Max Kellermann <max@duempel.org> | 2011-09-09 22:35:15 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2011-09-09 22:55:57 +0200 |
commit | b42a8d236434d7ec63c742d275cd7b75adbe760b (patch) | |
tree | ee314f81f04fa7c396fd79604a61c178781a85d6 /src/utils.c | |
parent | 61fc01e79e385bc903edf1fd0cac0e5843911d58 (diff) | |
download | mpd-b42a8d236434d7ec63c742d275cd7b75adbe760b.tar.gz mpd-b42a8d236434d7ec63c742d275cd7b75adbe760b.tar.xz mpd-b42a8d236434d7ec63c742d275cd7b75adbe760b.zip |
utils: parsePath() returns GError on failure
Better error messages.
Diffstat (limited to '')
-rw-r--r-- | src/utils.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/utils.c b/src/utils.c index f8c08a08e..d3b21d369 100644 --- a/src/utils.c +++ b/src/utils.c @@ -19,6 +19,7 @@ #include "config.h" #include "utils.h" +#include "glib_compat.h" #include "conf.h" #include <glib.h> @@ -41,12 +42,23 @@ #include <windows.h> #endif +G_GNUC_CONST +static inline GQuark +parse_path_quark(void) +{ + return g_quark_from_static_string("path"); +} + char * -parsePath(const char *path) +parsePath(const char *path, G_GNUC_UNUSED GError **error_r) { + assert(path != NULL); + assert(error_r == NULL || *error_r == NULL); + #ifndef WIN32 if (!g_path_is_absolute(path) && path[0] != '~') { - g_warning("\"%s\" is not an absolute path", path); + g_set_error(error_r, parse_path_quark(), 0, + "not an absolute path: %s", path); return NULL; } else if (path[0] == '~') { const char *home; @@ -56,7 +68,8 @@ parsePath(const char *path) if (user != NULL) { struct passwd *passwd = getpwnam(user); if (!passwd) { - g_warning("no such user %s", user); + g_set_error(error_r, parse_path_quark(), 0, + "no such user: %s", user); return NULL; } @@ -64,8 +77,9 @@ parsePath(const char *path) } else { home = g_get_home_dir(); if (home == NULL) { - g_warning("problems getting home " - "for current user"); + g_set_error_literal(error_r, parse_path_quark(), 0, + "problems getting home " + "for current user"); return NULL; } } @@ -81,7 +95,8 @@ parsePath(const char *path) struct passwd *passwd = getpwnam(user); if (!passwd) { - g_warning("user \"%s\" not found", user); + g_set_error(error_r, parse_path_quark(), 0, + "no such user: %s", user); g_free(user); return NULL; } |