aboutsummaryrefslogtreecommitdiff
path: root/miscutils
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2019-03-28 12:52:44 +0000
committerRon Yorston <rmy@pobox.com>2019-03-28 13:09:50 +0000
commit548ec7045bc7c80eaf03e92f390d1da2c9e9cd86 (patch)
treeb4c0102539c8889eeeec9eef8afa863510c7592b /miscutils
parent215e01e70f13f28d1a4dbe297f095b25de04ee21 (diff)
downloadbusybox-w32-548ec7045bc7c80eaf03e92f390d1da2c9e9cd86.tar.gz
busybox-w32-548ec7045bc7c80eaf03e92f390d1da2c9e9cd86.tar.bz2
busybox-w32-548ec7045bc7c80eaf03e92f390d1da2c9e9cd86.zip
win32: interpret absolute paths as relative to %SYSTEMDRIVE%
BusyBox contains hardcoded references to absolute paths which are unique in the *nix world but on Microsoft Windows are interpreted as being on the current drive. To make these unique again consider them to be relative to %SYSTEMDRIVE%. Support this by adding functions to: - determine the system drive (not using the environment variable); - change a process's current directory to the root of the system drive; - make relative paths absolute before changing directory (if needed). The following applications have been modified: - ash references /etc/profile from the system drive; - dpkg places its data store on and installs files to the system drive; - rpm installs files to the system drive; - man looks for configuration files and man pages on the system drive. See GitHub issue #158.
Diffstat (limited to 'miscutils')
-rw-r--r--miscutils/man.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/miscutils/man.c b/miscutils/man.c
index 3c1a79085..0bc11e623 100644
--- a/miscutils/man.c
+++ b/miscutils/man.c
@@ -253,11 +253,22 @@ int man_main(int argc UNUSED_PARAM, char **argv)
253 int cur_mp; 253 int cur_mp;
254 int opt, not_found; 254 int opt, not_found;
255 char *token[2]; 255 char *token[2];
256#if ENABLE_PLATFORM_MINGW32
257 char **ptr;
258#endif
256 259
257 INIT_G(); 260 INIT_G();
258 261
259 opt = getopt32(argv, "^+" "aw" "\0" "-1"/*at least one arg*/); 262 opt = getopt32(argv, "^+" "aw" "\0" "-1"/*at least one arg*/);
260 argv += optind; 263 argv += optind;
264#if ENABLE_PLATFORM_MINGW32
265 /* add system drive prefix to filenames, if necessary */
266 for (ptr = argv; *ptr; ++ptr) {
267 if (strchr(*ptr, '/') || strchr(*ptr, '\\'))
268 *ptr = xabsolute_path(*ptr);
269 }
270 chdir_system_drive();
271#endif
261 272
262 sec_list = xstrdup("0p:1:1p:2:3:3p:4:5:6:7:8:9"); 273 sec_list = xstrdup("0p:1:1p:2:3:3p:4:5:6:7:8:9");
263 274
@@ -311,7 +322,8 @@ int man_main(int argc UNUSED_PARAM, char **argv)
311 char *relpath = concat_path_file(dirname(exepath), "man"); 322 char *relpath = concat_path_file(dirname(exepath), "man");
312 if (count_mp == 0) { 323 if (count_mp == 0) {
313 /* default must match path set above */ 324 /* default must match path set above */
314 man_path_list = add_MANPATH(man_path_list, &count_mp, "/usr/man"); 325 man_path_list = add_MANPATH(man_path_list, &count_mp,
326 (char *)"/usr/man");
315 } 327 }
316 man_path_list = add_MANPATH(man_path_list, &count_mp, relpath); 328 man_path_list = add_MANPATH(man_path_list, &count_mp, relpath);
317 free(relpath); 329 free(relpath);