aboutsummaryrefslogtreecommitdiffstats
path: root/src/path.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/path.c173
1 files changed, 173 insertions, 0 deletions
diff --git a/src/path.c b/src/path.c
new file mode 100644
index 000000000..c91240908
--- /dev/null
+++ b/src/path.c
@@ -0,0 +1,173 @@
+/* the Music Player Daemon (MPD)
+ * (c)2003-2004 by Warren Dukes (shank@mercury.chem.pitt.edu)
+ * 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
+ */
+
+#include "path.h"
+#include "log.h"
+#include "charConv.h"
+#include "conf.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef HAVE_LOCALE
+#ifdef HAVE_LANGINFO
+#include <locale.h>
+#include <langinfo.h>
+#endif
+#endif
+
+char musicDir[MAXPATHLEN+1];
+char playlistDir[MAXPATHLEN+1];
+
+char * fsCharset = NULL;
+
+char * pathConvCharset(char * to, char * from, char * str, char * ret) {
+ if(ret) {
+ free(ret);
+ ret = NULL;
+ }
+
+ if(setCharSetConversion(to,from)==0) {
+ ret = convStrDup(str);
+ }
+
+ if(!ret) ret = strdup(str);
+
+ return ret;
+}
+
+char * fsCharsetToUtf8(char * str) {
+ static char * ret = NULL;
+
+ return ret = pathConvCharset("UTF-8",fsCharset,str,ret);
+}
+
+char * utf8ToFsCharset(char * str) {
+ static char * ret = NULL;
+
+ return ret = pathConvCharset(fsCharset,"UTF-8",str,ret);
+}
+
+void setFsCharset(char * charset) {
+ if(fsCharset) free(fsCharset);
+
+ fsCharset = strdup(charset);
+
+ DEBUG("setFsCharset: fs charset is: %s\n",fsCharset);
+
+ if(setCharSetConversion("UTF-8",fsCharset)!=0) {
+ ERROR("fs charset conversion problem: "
+ "not able to convert from \"%s\" to \"%s\"\n",
+ fsCharset,"UTF-8");
+ }
+ if(setCharSetConversion(fsCharset,"UTF-8")!=0) {
+ ERROR("fs charset conversion problem: "
+ "not able to convert from \"%s\" to \"%s\"\n",
+ "UTF-8",fsCharset);
+ }
+}
+
+char * getFsCharset() {
+ return fsCharset;
+}
+
+void initPaths() {
+#ifdef HAVE_LOCALE
+#ifdef HAVE_LANGINFO
+ char * originalLocale;
+#endif
+#endif
+ char * charset = NULL;
+
+ if(getConf()[CONF_FS_CHARSET]) {
+ charset = strdup(getConf()[CONF_FS_CHARSET]);
+ }
+#ifdef HAVE_LOCALE
+#ifdef HAVE_LANGINFO
+ else if((originalLocale = setlocale(LC_ALL,""))) {
+ char * temp;
+
+ if((temp = nl_langinfo(CODESET))) {
+ charset = strdup(temp);
+ }
+ else ERROR("problems getting charset for locale\n");
+ if(!setlocale(LC_ALL,originalLocale)) {
+ ERROR("problems resetting locale with setlocale()\n");
+ }
+ }
+#endif
+#endif
+ else ERROR("problems getting locale with setlocale()\n");
+
+ if(charset) {
+ setFsCharset(charset);
+ free(charset);
+ }
+ else {
+ ERROR("setting filesystem charset to UTF-8\n");
+ setFsCharset("UTF-8");
+ }
+}
+
+void finishPaths() {
+ free(fsCharset);
+ fsCharset = NULL;
+}
+
+char * rmp2amp(char * relativePath) {
+ static char absolutePath[MAXPATHLEN+1];
+
+ memset(absolutePath,0,MAXPATHLEN+1);
+
+ strcpy(absolutePath,musicDir);
+ strncat(absolutePath,relativePath,MAXPATHLEN-strlen(musicDir));
+
+ return absolutePath;
+}
+
+char * rpp2app(char * relativePath) {
+ static char absolutePath[MAXPATHLEN+1];
+
+ memset(absolutePath,0,MAXPATHLEN+1);
+
+ strcpy(absolutePath,playlistDir);
+ strncat(absolutePath,relativePath,MAXPATHLEN-strlen(musicDir));
+
+ return absolutePath;
+}
+
+char * parentPath(char * path) {
+ static char parentPath[MAXPATHLEN+1];
+ int i;
+
+ memset(parentPath,0,MAXPATHLEN+1);
+
+ strncpy(parentPath,path,MAXPATHLEN);
+ while(strlen(parentPath) && parentPath[strlen(parentPath)-1]=='/') {
+ parentPath[strlen(parentPath)-1] = '\0';
+ }
+ for(i=strlen(parentPath);i>=0;i--) {
+ if(parentPath[i]=='/') break;
+ parentPath[i] = '\0';
+ }
+ while(strlen(parentPath) && parentPath[strlen(parentPath)-1]=='/') {
+ parentPath[strlen(parentPath)-1] = '\0';
+ }
+
+ return parentPath;
+}