utils: parsePath() returns GError on failure
Better error messages.
This commit is contained in:
parent
61fc01e79e
commit
b42a8d2364
|
@ -513,10 +513,10 @@ config_dup_path(const char *name, GError **error_r)
|
||||||
if (param == NULL)
|
if (param == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
char *path = parsePath(param->value);
|
char *path = parsePath(param->value, error_r);
|
||||||
if (G_UNLIKELY(path == NULL))
|
if (G_UNLIKELY(path == NULL))
|
||||||
g_set_error(error_r, config_quark(), 0,
|
g_prefix_error(error_r,
|
||||||
"Invalid path in \"%s\" at line %i",
|
"Invalid path in \"%s\" at line %i: ",
|
||||||
name, param->line);
|
name, param->line);
|
||||||
|
|
||||||
return path;
|
return path;
|
||||||
|
|
|
@ -190,11 +190,11 @@ fifo_output_init(G_GNUC_UNUSED const struct audio_format *audio_format,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
path = parsePath(value);
|
path = parsePath(value, error);
|
||||||
g_free(value);
|
g_free(value);
|
||||||
if (!path) {
|
if (!path) {
|
||||||
g_set_error(error, fifo_output_quark(), errno,
|
g_prefix_error(error, "Invalid path in line %i: ",
|
||||||
"Could not parse \"path\" parameter");
|
param->line);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
27
src/utils.c
27
src/utils.c
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "glib_compat.h"
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
@ -41,12 +42,23 @@
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char *
|
G_GNUC_CONST
|
||||||
parsePath(const char *path)
|
static inline GQuark
|
||||||
|
parse_path_quark(void)
|
||||||
{
|
{
|
||||||
|
return g_quark_from_static_string("path");
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
parsePath(const char *path, G_GNUC_UNUSED GError **error_r)
|
||||||
|
{
|
||||||
|
assert(path != NULL);
|
||||||
|
assert(error_r == NULL || *error_r == NULL);
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
if (!g_path_is_absolute(path) && path[0] != '~') {
|
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;
|
return NULL;
|
||||||
} else if (path[0] == '~') {
|
} else if (path[0] == '~') {
|
||||||
const char *home;
|
const char *home;
|
||||||
|
@ -56,7 +68,8 @@ parsePath(const char *path)
|
||||||
if (user != NULL) {
|
if (user != NULL) {
|
||||||
struct passwd *passwd = getpwnam(user);
|
struct passwd *passwd = getpwnam(user);
|
||||||
if (!passwd) {
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +77,8 @@ parsePath(const char *path)
|
||||||
} else {
|
} else {
|
||||||
home = g_get_home_dir();
|
home = g_get_home_dir();
|
||||||
if (home == NULL) {
|
if (home == NULL) {
|
||||||
g_warning("problems getting home "
|
g_set_error_literal(error_r, parse_path_quark(), 0,
|
||||||
|
"problems getting home "
|
||||||
"for current user");
|
"for current user");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -81,7 +95,8 @@ parsePath(const char *path)
|
||||||
|
|
||||||
struct passwd *passwd = getpwnam(user);
|
struct passwd *passwd = getpwnam(user);
|
||||||
if (!passwd) {
|
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);
|
g_free(user);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#ifndef MPD_UTILS_H
|
#ifndef MPD_UTILS_H
|
||||||
#define MPD_UTILS_H
|
#define MPD_UTILS_H
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#ifndef assert_static
|
#ifndef assert_static
|
||||||
|
@ -32,6 +33,6 @@
|
||||||
#endif /* !assert_static */
|
#endif /* !assert_static */
|
||||||
|
|
||||||
char *
|
char *
|
||||||
parsePath(const char *path);
|
parsePath(const char *path, GError **error_r);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue