(dostounix_filename): On caseless filesystems, downcase the filename.

(unixtodos_filename): Downcase the drive letter.
(init_environment): Downcase the pathnames in the environment only when
  running on caseless filesystems.
This commit is contained in:
Miles Bader 1996-07-07 01:59:51 +00:00
parent f54b565c87
commit e2643e3e87

View file

@ -2130,12 +2130,16 @@ x_pixel_height (struct frame *f)
/* ----------------------- DOS / UNIX conversion --------------------- */
void msdos_downcase_filename (unsigned char *);
/* Destructively turn backslashes into slashes. */
void
dostounix_filename (p)
register char *p;
{
msdos_downcase_filename (p);
while (*p)
{
if (*p == '\\')
@ -2150,6 +2154,12 @@ void
unixtodos_filename (p)
register char *p;
{
if (p[1] == ':' && *p >= 'A' && *p <= 'Z')
{
*p += 'a' - 'A';
p += 2;
}
while (*p)
{
if (*p == '/')
@ -2159,7 +2169,6 @@ unixtodos_filename (p)
}
/* Get the default directory for a given drive. 0=def, 1=A, 2=B, ... */
void msdos_downcase_filename (unsigned char *);
int
getdefdir (drive, dst)
@ -2376,7 +2385,7 @@ init_environment (argc, argv, skip_args)
"c:/emacs/bin/emacs.exe" our root will be "c:/emacs". */
root = alloca (MAXPATHLEN + 20);
_fixpath (argv[0], root);
strlwr (root);
msdos_downcase_filename (root);
len = strlen (root);
while (len > 0 && root[len] != '/' && root[len] != ':')
len--;
@ -2410,7 +2419,6 @@ init_environment (argc, argv, skip_args)
if (!s) s = "c:/command.com";
t = alloca (strlen (s) + 1);
strcpy (t, s);
strlwr (t);
dostounix_filename (t);
setenv ("SHELL", t, 0);
@ -2421,7 +2429,6 @@ init_environment (argc, argv, skip_args)
/* Current directory is always considered part of MsDos's path but it is
not normally mentioned. Now it is. */
strcat (strcpy (t, ".;"), s);
strlwr (t);
dostounix_filename (t); /* Not a single file name, but this should work. */
setenv ("PATH", t, 1);