Sun May 12 19:19:43 1996 Aaron Digulla <digulla@fh-konstanz.de>
authorRoland McGrath <roland@redhat.com>
Mon, 13 May 1996 18:38:20 +0000 (18:38 +0000)
committerRoland McGrath <roland@redhat.com>
Mon, 13 May 1996 18:38:20 +0000 (18:38 +0000)
* dir.c: New function: amigafy() to fold filenames
Changes HASH() to HASHI() to fold filenames on Amiga.
Stringcompares use strieq() instead of streq()
The current directory on Amiga is "" instead of "."

dir.c

diff --git a/dir.c b/dir.c
index 969f52a..84a9a42 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -97,6 +97,35 @@ dosify (filename)
 }
 #endif /* __MSDOS__ */
 
+#ifdef _AMIGA
+#include <ctype.h>
+
+static char *
+amigafy (filename)
+     char *filename;
+{
+  static char amiga_filename[136];
+  char *df;
+  int i;
+
+  if (filename == 0)
+    return 0;
+
+  df = amiga_filename;
+
+  /* First, transform the name part.  */
+  for (i = 0; *filename != '\0'; ++i)
+  {
+    *df++ = tolower (*filename);
+    ++filename;
+  }
+
+  *df = 0;
+
+  return amiga_filename;
+}
+#endif /* _AMIGA */
+
 #ifdef VMS
 
 static int
@@ -232,11 +261,11 @@ find_directory (name)
 #endif
 
   for (p = name; *p != '\0'; ++p)
-    HASH (hash, *p);
+    HASHI (hash, *p);
   hash %= DIRECTORY_BUCKETS;
 
   for (dir = directories[hash]; dir != 0; dir = dir->next)
-    if (streq (dir->name, name))
+    if (strieq (dir->name, name))
       break;
 
   if (dir == 0)
@@ -363,6 +392,10 @@ dir_contents_file_exists_p (dir, filename)
   filename = dosify (filename);
 #endif
 
+#ifdef _AMIGA
+  filename = amigafy (filename);
+#endif
+
 #ifdef VMS
   filename = vmsify (filename,0);
 #endif
@@ -384,7 +417,7 @@ dir_contents_file_exists_p (dir, filename)
 
       for (df = dir->files[hash]; df != 0; df = df->next)
        {
-         if (streq (df->name, filename))
+         if (strieq (df->name, filename))
            {
              return !df->impossible;
            }
@@ -412,7 +445,7 @@ dir_contents_file_exists_p (dir, filename)
 
       len = NAMLEN (d);
       for (i = 0; i < len; ++i)
-       HASH (newhash, d->d_name[i]);
+       HASHI (newhash, d->d_name[i]);
       newhash %= DIRFILE_BUCKETS;
 
       df = (struct dirfile *) xmalloc (sizeof (struct dirfile));
@@ -422,7 +455,7 @@ dir_contents_file_exists_p (dir, filename)
       df->impossible = 0;
       /* Check if the name matches the one we're searching for.  */
       if (filename != 0
-         && newhash == hash && streq (d->d_name, filename))
+         && newhash == hash && strieq (d->d_name, filename))
        {
          return 1;
        }
@@ -471,11 +504,17 @@ file_exists_p (name)
   dirend++;
   if (dirend == (char *)1)
     return dir_file_exists_p ("[]", name);
-#else
+#else /* !VMS */
   dirend = rindex (name, '/');
   if (dirend == 0)
     return dir_file_exists_p (".", name);
-#endif
+  if (dirend == 0)
+#ifndef _AMIGA
+    return dir_file_exists_p (".", name);
+#else /* !VMS && !AMIGA */
+    return dir_file_exists_p ("", name);
+#endif /* AMIGA */
+#endif /* VMS */
 
   dirname = (char *) alloca (dirend - name + 1);
   bcopy (name, dirname, dirend - name);
@@ -505,8 +544,12 @@ file_impossible (filename)
 #else
   dirend = rindex (p, '/');
   if (dirend == 0)
+#ifdef _AMIGA
+    dir = find_directory ("");
+#else /* !VMS && !AMIGA */
     dir = find_directory (".");
-#endif
+#endif /* AMIGA */
+#endif /* VMS */
   else
     {
       char *dirname = (char *) alloca (dirend - p + 1);
@@ -517,7 +560,7 @@ file_impossible (filename)
     }
 
   for (hash = 0; *p != '\0'; ++p)
-    HASH (hash, *p);
+    HASHI (hash, *p);
   hash %= DIRFILE_BUCKETS;
 
   if (dir->contents == 0)
@@ -574,8 +617,12 @@ file_impossible_p (filename)
 #else
   dirend = rindex (filename, '/');
   if (dirend == 0)
+#ifdef _AMIGA
+    dir = find_directory ("")->contents;
+#else /* !VMS && !AMIGA */
     dir = find_directory (".")->contents;
-#endif
+#endif /* AMIGA */
+#endif /* VMS */
   else
     {
       char *dirname = (char *) alloca (dirend - filename + 1);
@@ -592,6 +639,9 @@ file_impossible_p (filename)
 #ifdef __MSDOS__
   p = filename = dosify (p);
 #endif
+#ifdef _AMIGA
+  p = filename = amigafy (p);
+#endif
 #ifdef VMS
   p = filename = vmsify (p, 1);
 #endif
@@ -601,7 +651,7 @@ file_impossible_p (filename)
   hash %= DIRFILE_BUCKETS;
 
   for (next = dir->files[hash]; next != 0; next = next->next)
-    if (streq (filename, next->name))
+    if (strieq (filename, next->name))
       return next->impossible;
 
   return 0;