Mercurial > mplayer.hg
annotate path.c @ 34929:c410ef9752a0
Initialize a few more AVFrame fields to avoid FFmpeg errors.
However this really needs to be done via FFmpeg somehow to avoid
issues each time new fields are added, either by exposing
ff_init_buffer_info as public API or by calling get_buffer etc.
through wrappers that take care of the initialization.
author | reimar |
---|---|
date | Sat, 14 Jul 2012 11:37:22 +0000 |
parents | 9f5d0eade1bd |
children |
rev | line source |
---|---|
12891
54ea3d6e657c
added src level documentation for the get_path() function
al
parents:
12358
diff
changeset
|
1 /* |
54ea3d6e657c
added src level documentation for the get_path() function
al
parents:
12358
diff
changeset
|
2 * Get path to config dir/file. |
54ea3d6e657c
added src level documentation for the get_path() function
al
parents:
12358
diff
changeset
|
3 * |
54ea3d6e657c
added src level documentation for the get_path() function
al
parents:
12358
diff
changeset
|
4 * Return Values: |
54ea3d6e657c
added src level documentation for the get_path() function
al
parents:
12358
diff
changeset
|
5 * Returns the pointer to the ALLOCATED buffer containing the |
54ea3d6e657c
added src level documentation for the get_path() function
al
parents:
12358
diff
changeset
|
6 * zero terminated path string. This buffer has to be FREED |
54ea3d6e657c
added src level documentation for the get_path() function
al
parents:
12358
diff
changeset
|
7 * by the caller. |
30429
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
8 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
9 * This file is part of MPlayer. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
10 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
11 * MPlayer is free software; you can redistribute it and/or modify |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
12 * it under the terms of the GNU General Public License as published by |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
13 * the Free Software Foundation; either version 2 of the License, or |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
14 * (at your option) any later version. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
15 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
16 * MPlayer is distributed in the hope that it will be useful, |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
19 * GNU General Public License for more details. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
20 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
21 * You should have received a copy of the GNU General Public License along |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
22 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29212
diff
changeset
|
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
12891
54ea3d6e657c
added src level documentation for the get_path() function
al
parents:
12358
diff
changeset
|
24 */ |
24242
76f5d8892c04
Clean up the way get_path is handled: Compile get_path.c to an object to link
diego
parents:
23806
diff
changeset
|
25 |
76f5d8892c04
Clean up the way get_path is handled: Compile get_path.c to an object to link
diego
parents:
23806
diff
changeset
|
26 #include <stdio.h> |
76f5d8892c04
Clean up the way get_path is handled: Compile get_path.c to an object to link
diego
parents:
23806
diff
changeset
|
27 #include <stdlib.h> |
76f5d8892c04
Clean up the way get_path is handled: Compile get_path.c to an object to link
diego
parents:
23806
diff
changeset
|
28 #include <string.h> |
30591 | 29 #include "config.h" |
24242
76f5d8892c04
Clean up the way get_path is handled: Compile get_path.c to an object to link
diego
parents:
23806
diff
changeset
|
30 #include "mp_msg.h" |
30901 | 31 #include "path.h" |
24242
76f5d8892c04
Clean up the way get_path is handled: Compile get_path.c to an object to link
diego
parents:
23806
diff
changeset
|
32 |
27397
d47744b95b78
Give a CONFIG_ prefix to preprocessor directives that lacked one and
diego
parents:
27341
diff
changeset
|
33 #ifdef CONFIG_MACOSX_BUNDLE |
15237
55d9619d75e5
replace Carbon.h by coreFoundation.h, fix build with x11 enable on mac osx with --enable-macosx-bundle enable
nplourde
parents:
15145
diff
changeset
|
34 #include <CoreFoundation/CoreFoundation.h> |
15145
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
35 #include <sys/types.h> |
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
36 #include <sys/stat.h> |
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
37 #include <unistd.h> |
28364
3e3bd9da4c7e
Use OS preprocessor checks with '#if defined()' consistently.
diego
parents:
27749
diff
changeset
|
38 #elif defined(__MINGW32__) |
24266 | 39 #include <windows.h> |
28364
3e3bd9da4c7e
Use OS preprocessor checks with '#if defined()' consistently.
diego
parents:
27749
diff
changeset
|
40 #elif defined(__CYGWIN__) |
27722 | 41 #include <windows.h> |
42 #include <sys/cygwin.h> | |
26056
5ce6348b1a6e
On OS/2, fall back on the directory where MPlayer is installed if both
diego
parents:
24267
diff
changeset
|
43 #endif |
5ce6348b1a6e
On OS/2, fall back on the directory where MPlayer is installed if both
diego
parents:
24267
diff
changeset
|
44 |
30838
0bb5a351cdd7
Include osdep/osdep.h instead of checking a platfrom specific macro to include
komh
parents:
30591
diff
changeset
|
45 #include "osdep/osdep.h" |
0bb5a351cdd7
Include osdep/osdep.h instead of checking a platfrom specific macro to include
komh
parents:
30591
diff
changeset
|
46 |
18889
e60c8c7399d2
get_path as const, patch by Stefan Huehner, stefan AT huehner-org
reynaldo
parents:
16872
diff
changeset
|
47 char *get_path(const char *filename){ |
34897 | 48 // temporary buffer that will be freed |
49 char *tmp = 0; | |
2557 | 50 char *homedir; |
51 char *buff; | |
24267
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
52 #ifdef __MINGW32__ |
34896
139743f7e085
config_dir variable should not be static, but it should point
reimar
parents:
32751
diff
changeset
|
53 const char *config_dir = "/mplayer"; |
9926
ad429d617df4
allow config file loading outside of cygwin environment
faust3
parents:
3746
diff
changeset
|
54 #else |
34896
139743f7e085
config_dir variable should not be static, but it should point
reimar
parents:
32751
diff
changeset
|
55 const char *config_dir = "/.mplayer"; |
9926
ad429d617df4
allow config file loading outside of cygwin environment
faust3
parents:
3746
diff
changeset
|
56 #endif |
2557 | 57 int len; |
27397
d47744b95b78
Give a CONFIG_ prefix to preprocessor directives that lacked one and
diego
parents:
27341
diff
changeset
|
58 #ifdef CONFIG_MACOSX_BUNDLE |
15145
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
59 struct stat dummy; |
15625
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
60 CFIndex maxlen=256; |
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
61 CFURLRef res_url_ref=NULL; |
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
62 CFURLRef bdl_url_ref=NULL; |
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
63 char *res_url_path = NULL; |
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
64 char *bdl_url_path = NULL; |
15145
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
65 #endif |
2557 | 66 |
16872
9d4becb83656
Allow the user to set the $MPLAYER_HOME environment variable to point to the location
albeu
parents:
16781
diff
changeset
|
67 if ((homedir = getenv("MPLAYER_HOME")) != NULL) |
9d4becb83656
Allow the user to set the $MPLAYER_HOME environment variable to point to the location
albeu
parents:
16781
diff
changeset
|
68 config_dir = ""; |
9d4becb83656
Allow the user to set the $MPLAYER_HOME environment variable to point to the location
albeu
parents:
16781
diff
changeset
|
69 else if ((homedir = getenv("HOME")) == NULL) |
9926
ad429d617df4
allow config file loading outside of cygwin environment
faust3
parents:
3746
diff
changeset
|
70 { |
34897 | 71 #if !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(__OS2__) |
72 return NULL; | |
73 #else | |
74 int i; | |
75 char path[260]; | |
76 #ifdef __OS2__ | |
77 PPIB ppib; | |
78 // Get process info blocks | |
79 DosGetInfoBlocks(NULL, &ppib); | |
80 // Get full path of the executable | |
81 DosQueryModuleName(ppib->pib_hmte, sizeof( path ), path); | |
82 #else | |
83 GetModuleFileNameA(NULL, path, 260); | |
84 #endif | |
85 // Extract directory part | |
86 tmp = homedir = mp_dirname(path); | |
87 // Convert backslashes to slashes | |
88 for (i = 0; homedir[i]; i++) | |
89 if (homedir[i] == '\\') homedir[i] = '/'; | |
90 // If there is a trailing slash remove it. | |
91 // If there isn't, remove the one from config dir (if homedir | |
92 // ends up e.g. c:) | |
93 if (i && homedir[i-1] == '/') homedir[i-1] = 0; | |
94 else config_dir++; | |
95 #endif | |
9926
ad429d617df4
allow config file loading outside of cygwin environment
faust3
parents:
3746
diff
changeset
|
96 } |
2557 | 97 len = strlen(homedir) + strlen(config_dir) + 1; |
98 if (filename == NULL) { | |
23806 | 99 if ((buff = malloc(len)) == NULL) |
2557 | 100 return NULL; |
101 sprintf(buff, "%s%s", homedir, config_dir); | |
102 } else { | |
103 len += strlen(filename) + 1; | |
23806 | 104 if ((buff = malloc(len)) == NULL) |
2557 | 105 return NULL; |
106 sprintf(buff, "%s%s/%s", homedir, config_dir, filename); | |
107 } | |
15145
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
108 |
27397
d47744b95b78
Give a CONFIG_ prefix to preprocessor directives that lacked one and
diego
parents:
27341
diff
changeset
|
109 #ifdef CONFIG_MACOSX_BUNDLE |
24267
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
110 if (stat(buff, &dummy)) { |
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
111 |
15625
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
112 res_url_ref=CFBundleCopyResourcesDirectoryURL(CFBundleGetMainBundle()); |
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
113 bdl_url_ref=CFBundleCopyBundleURL(CFBundleGetMainBundle()); |
24267
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
114 |
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
115 if (res_url_ref&&bdl_url_ref) { |
15625
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
116 |
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
117 res_url_path=malloc(maxlen); |
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
118 bdl_url_path=malloc(maxlen); |
15145
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
119 |
24267
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
120 while (!CFURLGetFileSystemRepresentation(res_url_ref, true, res_url_path, maxlen)) { |
15145
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
121 maxlen*=2; |
15625
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
122 res_url_path=realloc(res_url_path, maxlen); |
15145
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
123 } |
15625
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
124 CFRelease(res_url_ref); |
24267
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
125 |
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
126 while (!CFURLGetFileSystemRepresentation(bdl_url_ref, true, bdl_url_path, maxlen)) { |
15625
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
127 maxlen*=2; |
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
128 bdl_url_path=realloc(bdl_url_path, maxlen); |
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
129 } |
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
130 CFRelease(bdl_url_ref); |
24267
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
131 |
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
132 if (strcmp(res_url_path, bdl_url_path) == 0) |
15625
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
133 res_url_path = NULL; |
15145
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
134 } |
24267
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
135 |
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
136 if (res_url_path&&filename) { |
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
137 if ((strlen(filename)+strlen(res_url_path)+2)>maxlen) { |
15625
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
138 maxlen=strlen(filename)+strlen(res_url_path)+2; |
15145
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
139 } |
15625
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
140 free(buff); |
23806 | 141 buff = malloc(maxlen); |
15625
4be161b8e0ef
compare resource url with bundle url, if its the same path do not use has conf file location.
nplourde
parents:
15237
diff
changeset
|
142 strcpy(buff, res_url_path); |
24267
70437b99ccee
cosmetics: Fix up whitespace, indentation and similar things.
diego
parents:
24266
diff
changeset
|
143 |
15145
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
144 strcat(buff,"/"); |
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
145 strcat(buff, filename); |
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
146 } |
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
147 } |
a7f11c8091e4
allows the Mac OS X version of MPlayer to look for its data files inside the Resources directory of the appwrapper. patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12891
diff
changeset
|
148 #endif |
34897 | 149 free(tmp); |
3746 | 150 mp_msg(MSGT_GLOBAL,MSGL_V,"get_path('%s') -> '%s'\n",filename,buff); |
2557 | 151 return buff; |
152 } | |
16781
6809ca5dd307
allow mencoder to load win32 codecs properly patch by Zuxy <zuxy.meng at gmail.com>
faust3
parents:
15625
diff
changeset
|
153 |
27727
48c1ae64255b
Replace preprocessor check for WIN32 with checks for __MINGW32__ and __CYGWIN__.
diego
parents:
27722
diff
changeset
|
154 #if (defined(__MINGW32__) || defined(__CYGWIN__)) && defined(CONFIG_WIN32DLL) |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28364
diff
changeset
|
155 void set_path_env(void) |
16781
6809ca5dd307
allow mencoder to load win32 codecs properly patch by Zuxy <zuxy.meng at gmail.com>
faust3
parents:
15625
diff
changeset
|
156 { |
6809ca5dd307
allow mencoder to load win32 codecs properly patch by Zuxy <zuxy.meng at gmail.com>
faust3
parents:
15625
diff
changeset
|
157 /*make our codec dirs available for LoadLibraryA()*/ |
6809ca5dd307
allow mencoder to load win32 codecs properly patch by Zuxy <zuxy.meng at gmail.com>
faust3
parents:
15625
diff
changeset
|
158 char win32path[MAX_PATH]; |
6809ca5dd307
allow mencoder to load win32 codecs properly patch by Zuxy <zuxy.meng at gmail.com>
faust3
parents:
15625
diff
changeset
|
159 #ifdef __CYGWIN__ |
30846
72ae3dd3aa6e
Replace separate Win32, XAnim and Real codec directories by one global dir.
diego
parents:
30838
diff
changeset
|
160 cygwin_conv_to_full_win32_path(BINARY_CODECS_PATH, win32path); |
16781
6809ca5dd307
allow mencoder to load win32 codecs properly patch by Zuxy <zuxy.meng at gmail.com>
faust3
parents:
15625
diff
changeset
|
161 #else /*__CYGWIN__*/ |
6809ca5dd307
allow mencoder to load win32 codecs properly patch by Zuxy <zuxy.meng at gmail.com>
faust3
parents:
15625
diff
changeset
|
162 /* Expand to absolute path unless it's already absolute */ |
30846
72ae3dd3aa6e
Replace separate Win32, XAnim and Real codec directories by one global dir.
diego
parents:
30838
diff
changeset
|
163 if (!strstr(BINARY_CODECS_PATH,":") && BINARY_CODECS_PATH[0] != '\\') { |
16781
6809ca5dd307
allow mencoder to load win32 codecs properly patch by Zuxy <zuxy.meng at gmail.com>
faust3
parents:
15625
diff
changeset
|
164 GetModuleFileNameA(NULL, win32path, MAX_PATH); |
30846
72ae3dd3aa6e
Replace separate Win32, XAnim and Real codec directories by one global dir.
diego
parents:
30838
diff
changeset
|
165 strcpy(strrchr(win32path, '\\') + 1, BINARY_CODECS_PATH); |
16781
6809ca5dd307
allow mencoder to load win32 codecs properly patch by Zuxy <zuxy.meng at gmail.com>
faust3
parents:
15625
diff
changeset
|
166 } |
30846
72ae3dd3aa6e
Replace separate Win32, XAnim and Real codec directories by one global dir.
diego
parents:
30838
diff
changeset
|
167 else strcpy(win32path, BINARY_CODECS_PATH); |
16781
6809ca5dd307
allow mencoder to load win32 codecs properly patch by Zuxy <zuxy.meng at gmail.com>
faust3
parents:
15625
diff
changeset
|
168 #endif /*__CYGWIN__*/ |
30853
88e57c2b3f58
Get rid of pointless tmppath variable in set_path_env().
diego
parents:
30846
diff
changeset
|
169 mp_msg(MSGT_WIN32, MSGL_V, "Setting PATH to %s\n", win32path); |
88e57c2b3f58
Get rid of pointless tmppath variable in set_path_env().
diego
parents:
30846
diff
changeset
|
170 if (!SetEnvironmentVariableA("PATH", win32path)) |
16781
6809ca5dd307
allow mencoder to load win32 codecs properly patch by Zuxy <zuxy.meng at gmail.com>
faust3
parents:
15625
diff
changeset
|
171 mp_msg(MSGT_WIN32, MSGL_WARN, "Cannot set PATH!"); |
6809ca5dd307
allow mencoder to load win32 codecs properly patch by Zuxy <zuxy.meng at gmail.com>
faust3
parents:
15625
diff
changeset
|
172 } |
27727
48c1ae64255b
Replace preprocessor check for WIN32 with checks for __MINGW32__ and __CYGWIN__.
diego
parents:
27722
diff
changeset
|
173 #endif /* (defined(__MINGW32__) || defined(__CYGWIN__)) && defined(CONFIG_WIN32DLL) */ |
30900
e907ff9e7e77
Move SetCodecPath() from loader to get_path.c and make it unconditional.
diego
parents:
30853
diff
changeset
|
174 |
30907
b32527b30d17
Get rid of pointless def_path variable; use codec_path directly instead.
diego
parents:
30902
diff
changeset
|
175 char *codec_path = BINARY_CODECS_PATH; |
30900
e907ff9e7e77
Move SetCodecPath() from loader to get_path.c and make it unconditional.
diego
parents:
30853
diff
changeset
|
176 |
e907ff9e7e77
Move SetCodecPath() from loader to get_path.c and make it unconditional.
diego
parents:
30853
diff
changeset
|
177 static int needs_free = 0; |
e907ff9e7e77
Move SetCodecPath() from loader to get_path.c and make it unconditional.
diego
parents:
30853
diff
changeset
|
178 |
30902 | 179 void set_codec_path(const char *path) |
30900
e907ff9e7e77
Move SetCodecPath() from loader to get_path.c and make it unconditional.
diego
parents:
30853
diff
changeset
|
180 { |
e907ff9e7e77
Move SetCodecPath() from loader to get_path.c and make it unconditional.
diego
parents:
30853
diff
changeset
|
181 if (needs_free) |
30907
b32527b30d17
Get rid of pointless def_path variable; use codec_path directly instead.
diego
parents:
30902
diff
changeset
|
182 free(codec_path); |
30900
e907ff9e7e77
Move SetCodecPath() from loader to get_path.c and make it unconditional.
diego
parents:
30853
diff
changeset
|
183 if (path == 0) { |
30907
b32527b30d17
Get rid of pointless def_path variable; use codec_path directly instead.
diego
parents:
30902
diff
changeset
|
184 codec_path = BINARY_CODECS_PATH; |
30900
e907ff9e7e77
Move SetCodecPath() from loader to get_path.c and make it unconditional.
diego
parents:
30853
diff
changeset
|
185 needs_free = 0; |
e907ff9e7e77
Move SetCodecPath() from loader to get_path.c and make it unconditional.
diego
parents:
30853
diff
changeset
|
186 return; |
e907ff9e7e77
Move SetCodecPath() from loader to get_path.c and make it unconditional.
diego
parents:
30853
diff
changeset
|
187 } |
30907
b32527b30d17
Get rid of pointless def_path variable; use codec_path directly instead.
diego
parents:
30902
diff
changeset
|
188 codec_path = malloc(strlen(path) + 1); |
b32527b30d17
Get rid of pointless def_path variable; use codec_path directly instead.
diego
parents:
30902
diff
changeset
|
189 strcpy(codec_path, path); |
30900
e907ff9e7e77
Move SetCodecPath() from loader to get_path.c and make it unconditional.
diego
parents:
30853
diff
changeset
|
190 needs_free = 1; |
e907ff9e7e77
Move SetCodecPath() from loader to get_path.c and make it unconditional.
diego
parents:
30853
diff
changeset
|
191 } |
32543
18338ee51c9d
Export mp_basename in a function instead of duplicate macros in various places
cboesch
parents:
30907
diff
changeset
|
192 |
32645 | 193 /** |
194 * @brief Returns the basename substring of a path. | |
195 */ | |
32543
18338ee51c9d
Export mp_basename in a function instead of duplicate macros in various places
cboesch
parents:
30907
diff
changeset
|
196 const char *mp_basename(const char *path) |
18338ee51c9d
Export mp_basename in a function instead of duplicate macros in various places
cboesch
parents:
30907
diff
changeset
|
197 { |
18338ee51c9d
Export mp_basename in a function instead of duplicate macros in various places
cboesch
parents:
30907
diff
changeset
|
198 char *s; |
18338ee51c9d
Export mp_basename in a function instead of duplicate macros in various places
cboesch
parents:
30907
diff
changeset
|
199 |
18338ee51c9d
Export mp_basename in a function instead of duplicate macros in various places
cboesch
parents:
30907
diff
changeset
|
200 #if HAVE_DOS_PATHS |
18338ee51c9d
Export mp_basename in a function instead of duplicate macros in various places
cboesch
parents:
30907
diff
changeset
|
201 s = strrchr(path, '\\'); |
18338ee51c9d
Export mp_basename in a function instead of duplicate macros in various places
cboesch
parents:
30907
diff
changeset
|
202 if (s) |
32545
25de211794e8
Handle correctly paths with mixed '/' and '\' in it.
cboesch
parents:
32544
diff
changeset
|
203 path = s + 1; |
32555
8a556b3aff79
Handle ':' on systems with DOS paths: it allows paths like C:foo.avi.
cboesch
parents:
32554
diff
changeset
|
204 s = strrchr(path, ':'); |
8a556b3aff79
Handle ':' on systems with DOS paths: it allows paths like C:foo.avi.
cboesch
parents:
32554
diff
changeset
|
205 if (s) |
8a556b3aff79
Handle ':' on systems with DOS paths: it allows paths like C:foo.avi.
cboesch
parents:
32554
diff
changeset
|
206 path = s + 1; |
32543
18338ee51c9d
Export mp_basename in a function instead of duplicate macros in various places
cboesch
parents:
30907
diff
changeset
|
207 #endif |
18338ee51c9d
Export mp_basename in a function instead of duplicate macros in various places
cboesch
parents:
30907
diff
changeset
|
208 s = strrchr(path, '/'); |
32544 | 209 return s ? s + 1 : path; |
32543
18338ee51c9d
Export mp_basename in a function instead of duplicate macros in various places
cboesch
parents:
30907
diff
changeset
|
210 } |
32554 | 211 |
212 /** | |
32643 | 213 * @brief Allocates a new buffer containing the directory name |
214 * @param path Original path. Must be a valid string. | |
32554 | 215 * |
32643 | 216 * @note The path returned always contains a trailing slash '/'. |
217 * On systems supporting DOS paths, '\' is also considered as a directory | |
218 * separator in addition to the '/'. | |
32554 | 219 */ |
220 char *mp_dirname(const char *path) | |
221 { | |
222 const char *base = mp_basename(path); | |
223 size_t len = base - path; | |
224 char *dirname; | |
225 | |
226 if (len == 0) | |
227 return strdup("./"); | |
228 dirname = malloc(len + 1); | |
229 if (!dirname) | |
230 return NULL; | |
231 strncpy(dirname, path, len); | |
232 dirname[len] = '\0'; | |
233 return dirname; | |
234 } | |
32644 | 235 |
236 /** | |
32663 | 237 * @brief Join two paths if path is not absolute. |
238 * @param base File or directory base path. | |
239 * @param path Path to concatenate with the base. | |
240 * @return New allocated string with the path, or NULL in case of error. | |
241 * @warning Do not forget the trailing path separator at the end of the base | |
242 * path if it is a directory: since file paths are also supported, | |
243 * this separator will make the distinction. | |
244 * @note Paths of the form c:foo, /foo or \foo will still depends on the | |
245 * current directory on Windows systems, even though they are considered | |
246 * as absolute paths in this function. | |
32644 | 247 */ |
32663 | 248 char *mp_path_join(const char *base, const char *path) |
32644 | 249 { |
32663 | 250 char *ret, *tmp; |
251 | |
32644 | 252 #if HAVE_DOS_PATHS |
32663 | 253 if ((path[0] && path[1] == ':') || path[0] == '\\' || path[0] == '/') |
32644 | 254 #else |
32663 | 255 if (path[0] == '/') |
32644 | 256 #endif |
32663 | 257 return strdup(path); |
258 | |
259 ret = mp_dirname(base); | |
260 if (!ret) | |
261 return NULL; | |
262 tmp = realloc(ret, strlen(ret) + strlen(path) + 1); | |
263 if (!tmp) { | |
264 free(ret); | |
265 return NULL; | |
266 } | |
267 ret = tmp; | |
268 strcat(ret, path); | |
269 return ret; | |
32644 | 270 } |
32751 | 271 |
272 /** | |
273 * @brief Same as mp_path_join but always treat the first parameter as a | |
274 * directory. | |
275 * @param dir Directory base path. | |
276 * @param append Right part to append to dir. | |
277 * @return New allocated string with the path, or NULL in case of error. | |
278 */ | |
279 char *mp_dir_join(const char *dir, const char *append) | |
280 { | |
281 char *tmp, *ret; | |
282 size_t dirlen = strlen(dir); | |
283 size_t i = dirlen - 1; | |
284 | |
285 #if HAVE_DOS_PATHS | |
286 if ((dirlen == 2 && dir[0] && dir[1] == ':') // "X:" only | |
287 || dirlen == 0 || dir[i] == '\\' || dir[i] == '/') | |
288 #else | |
289 if (dirlen == 0 || dir[i] == '/') | |
290 #endif | |
291 return mp_path_join(dir, append); | |
292 | |
293 tmp = malloc(dirlen + 2); | |
294 if (!tmp) | |
295 return NULL; | |
296 strcpy(tmp, dir); | |
297 strcpy(tmp + dirlen, "/"); | |
298 ret = mp_path_join(tmp, append); | |
299 free(tmp); | |
300 return ret; | |
301 } |