mpd/src/path.h
Eric Wong cb8f1af3bd Cleanup #includes of standard system headers and put them in one place
This will make refactoring features easier, especially now that
pthreads support and larger refactorings are on the horizon.

Hopefully, this will make porting to other platforms (even
non-UNIX-like ones for masochists) easier, too.

os_compat.h will house all the #includes for system headers
considered to be the "core" of MPD.  Headers for optional
features will be left to individual source files.

git-svn-id: https://svn.musicpd.org/mpd/trunk@7130 09075e82-0dd4-0310-85a5-a0d7c8717e4f
2008-01-03 07:29:49 +00:00

93 lines
3.1 KiB
C

/* the Music Player Daemon (MPD)
* Copyright (C) 2003-2007 by Warren Dukes (warren.dukes@gmail.com)
* This project's homepage is: 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef PATH_H
#define PATH_H
#include "../config.h"
#include "os_compat.h"
#if !defined(MPD_PATH_MAX)
# if defined(MAXPATHLEN)
# define MPD_PATH_MAX MAXPATHLEN
# elif defined(PATH_MAX)
# define MPD_PATH_MAX PATH_MAX
# else
# define MPD_PATH_MAX 256
# endif
#endif
extern const char *musicDir;
void initPaths(void);
void finishPaths(void);
char *fs_charset_to_utf8(char *dst, char *str);
char *utf8_to_fs_charset(char *dst, char *str);
void setFsCharset(char *charset);
char *getFsCharset(void);
/*
* pfx_dir - sets dst="$pfx/$path" and returns a pointer to path inside * dst
* this will unconditionally put a '/' between pfx and path unlike
* the static pfx_path() function in path.c
* dst is assumed to be MAXPATHLEN in size
* dst can point to the same location as path, but not pfx, which makes
* this better than sprintf(3) in some cases
*/
char *pfx_dir(char *dst,
const char *path, const size_t path_len,
const char *pfx, const size_t pfx_len);
/* relative music path to absolute music path */
char *rmp2amp_r(char *dst, const char *rel_path);
/* relative playlist path to absolute playlist path */
char *rpp2app_r(char *dst, const char *rel_path);
/*
* parent_path - saner version of dirname(3) with slightly different semantics
* - we will return "" instead of "." or "/" if we have no parent
* this is because we only deal with internal paths
* - we always skip over redundant slashes in the middle, if there are any
* - we will never get meaningful paths with trailing slashes in our callers
* (set handle_trailing_slashes to true if we do)
*/
char *parent_path(char *path_max_tmp, const char *path);
/* strips extra "///" and leading "/" and trailing "/" */
char *sanitizePathDup(char *path);
/* this is actually like strlcpy (OpenBSD), but we don't actually want to
* blindly use it everywhere, only for paths that are OK to truncate (for
* error reporting and such.
* dest must be MPD_PATH_MAX bytes large (which is standard in mpd) */
void pathcpy_trunc(char *dest, const char *src);
/*
* converts a path passed from a client into an absolute FS path.
* paths passed by clients do NOT have file suffixes in them
*/
void utf8_to_fs_playlist_path(char *path_max_tmp, const char *utf8path);
#endif