From 21a1b3b2557f4d224cd18093e8ab2b2197725f27 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 25 Jul 1994 23:01:19 +0000 Subject: [PATCH] [__MSDOS__] (dosify): New function. (dir_contents_file_exists_p) [__MSDOS__]: Call it on FILENAME and process the result instead of FILENAME itself. (file_impossible_p) [__MSDOS__]: Likewise. Part of MSDOS/GO32 port from DJ Delorie . --- dir.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/dir.c b/dir.c index d280d2ad..07752d31 100644 --- a/dir.c +++ b/dir.c @@ -47,6 +47,49 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) #endif /* POSIX */ +#ifdef __MSDOS__ +#inlcude + +static char * +dosify (filename) + char *filename; +{ + static char dos_filename[14]; + char *df; + int i; + + if (filename == 0) + return 0; + + if (strpbrk (filename, "\"*+,;<=>?[\\]|") != 0) + return filename; + + df = dos_filename; + + /* First, transform the name part. */ + for (i = 0; *filename != '\0' && i < 8 && *filename != '.'; ++i) + *df++ = tolower (*filename++); + + /* Now skip to the next dot. */ + while (*filename != '\0' && *filename != '.') + ++filename; + if (*filename != '\0') + { + *df++ = *filename++; + for (i = 0; *filename != '\0' && i < 3 && *filename != '.'; ++i) + *df++ = tolower (*filename++); + } + + /* Look for more dots. */ + while (*filename != '\0' && *filename != '.') + ++filename; + if (*filename == '.') + return filename; + *df = 0; + return dos_filename; +} +#endif + /* Hash table of directories. */ #ifndef DIRECTORY_BUCKETS @@ -213,6 +256,10 @@ dir_contents_file_exists_p (dir, filename) /* The directory could not be stat'd or opened. */ return 0; +#ifdef __MSDOS__ + filename = dosify (filename); +#endif + hash = 0; if (filename != 0) { @@ -404,6 +451,10 @@ file_impossible_p (filename) /* There are no files entered for this directory. */ return 0; +#ifdef __MSDOS__ + p = filename = dosify (p); +#endif + for (hash = 0; *p != '\0'; ++p) HASH (hash, *p); hash %= DIRFILE_BUCKETS;