diff options
Diffstat (limited to 'src/ConfigPath.cxx')
-rw-r--r-- | src/ConfigPath.cxx | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/src/ConfigPath.cxx b/src/ConfigPath.cxx deleted file mode 100644 index b88de3934..000000000 --- a/src/ConfigPath.cxx +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2003-2013 The Music Player Daemon Project - * http://www.musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "config.h" -#include "ConfigPath.hxx" -#include "fs/AllocatedPath.hxx" -#include "fs/Traits.hxx" -#include "fs/Domain.hxx" -#include "util/Error.hxx" -#include "ConfigGlobal.hxx" - -#include <glib.h> - -#include <assert.h> -#include <string.h> - -#ifndef WIN32 -#include <pwd.h> - -/** - * Determine a given user's home directory. - */ -static AllocatedPath -GetHome(const char *user, Error &error) -{ - passwd *pw = getpwnam(user); - if (pw == nullptr) { - error.Format(path_domain, - "no such user: %s", user); - return AllocatedPath::Null(); - } - - return AllocatedPath::FromFS(pw->pw_dir); -} - -/** - * Determine the current user's home directory. - */ -static AllocatedPath -GetHome(Error &error) -{ - const char *home = g_get_home_dir(); - if (home == nullptr) { - error.Set(path_domain, - "problems getting home for current user"); - return AllocatedPath::Null(); - } - - return AllocatedPath::FromUTF8(home, error); -} - -/** - * Determine the configured user's home directory. - */ -static AllocatedPath -GetConfiguredHome(Error &error) -{ - const char *user = config_get_string(CONF_USER, nullptr); - return user != nullptr - ? GetHome(user, error) - : GetHome(error); -} - -#endif - -AllocatedPath -ParsePath(const char *path, Error &error) -{ - assert(path != nullptr); - -#ifndef WIN32 - if (path[0] == '~') { - ++path; - - if (*path == '\0') - return GetConfiguredHome(error); - - AllocatedPath home = AllocatedPath::Null(); - - if (*path == '/') { - home = GetConfiguredHome(error); - - ++path; - } else { - const char *slash = strchr(path, '/'); - const char *end = slash == nullptr - ? path + strlen(path) - : slash; - const std::string user(path, end); - home = GetHome(user.c_str(), error); - - if (slash == nullptr) - return home; - - path = slash + 1; - } - - if (home.IsNull()) - return AllocatedPath::Null(); - - AllocatedPath path2 = AllocatedPath::FromUTF8(path, error); - if (path2.IsNull()) - return AllocatedPath::Null(); - - return AllocatedPath::Build(home, path2); - } else if (!PathTraits::IsAbsoluteUTF8(path)) { - error.Format(path_domain, - "not an absolute path: %s", path); - return AllocatedPath::Null(); - } else { -#endif - return AllocatedPath::FromUTF8(path, error); -#ifndef WIN32 - } -#endif -} |