changeset 64:7d7e310c3270

GNU file utilities
author Jim Meyering <jim@meyering.net>
date Sat, 22 May 1993 02:01:31 +0000
parents 9e544a5358a7
children 82fc1441ad84
files lib/fsusage.c lib/mountlist.c lib/rename.c
diffstat 3 files changed, 47 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lib/fsusage.c
+++ b/lib/fsusage.c
@@ -156,9 +156,11 @@
      no matter what value f_bsize has.  */
 #define convert_blocks(b) (b)
 #ifndef _SEQUENT_		/* _SEQUENT_ is DYNIX/ptx.  */
+#ifndef DOLPHIN			/* DOLPHIN 3.8.alfa/7.18 has f_bavail */
 #define f_bavail f_bfree
 #endif
 #endif
+#endif
 
 #ifdef STAT_STATVFS		/* SVR4.  */
   struct statvfs fsd;
--- a/lib/mountlist.c
+++ b/lib/mountlist.c
@@ -82,6 +82,12 @@
 #include <sys/vfs.h>
 #endif
 
+#ifdef DOLPHIN
+/* So special that it's not worth putting this in autoconf.  */
+#undef MOUNTED_FREAD_FSTYP
+#define MOUNTED_GETMNTTBL
+#endif
+
 #ifdef MOUNTED_GETMNTENT1	/* 4.3BSD, SunOS, HP-UX, Dynix, Irix.  */
 /* Return the value of the hexadecimal number represented by CP.
    No prefix (like '0x') or suffix (like 'h') is expected to be
@@ -358,6 +364,26 @@
   }
 #endif /* MOUNTED_FREAD || MOUNTED_FREAD_FSTYP.  */
 
+#ifdef MOUNTED_GETMNTTBL	/* DolphinOS goes it's own way */
+  {
+    struct mntent **mnttbl=getmnttbl(),**ent;
+    for (ent=mnttbl;*ent;ent++)
+      {
+	me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
+	me->me_devname = xstrdup ( (*ent)->mt_resource);
+	me->me_mountdir = xstrdup( (*ent)->mt_directory);
+	me->me_type =  xstrdup ((*ent)->mt_fstype);
+	me->me_dev = -1;	/* Magic; means not known yet. */
+	me->me_next = NULL;
+	
+	/* Add to the linked list. */
+	mtail->me_next = me;
+	mtail = me;
+      }
+    endmnttbl();
+  }
+#endif
+
 #ifdef MOUNTED_GETMNTENT2	/* SVR4.  */
   {
     struct mnttab mnt;
--- a/lib/rename.c
+++ b/lib/rename.c
@@ -34,14 +34,30 @@
      char *from;
      char *to;
 {
-  struct stat from_stats;
+  struct stat from_stats, to_stats;
   int pid, status;
 
   if (stat (from, &from_stats))
     return -1;
 
-  if (unlink (to) && errno != ENOENT)
-    return -1;
+  /* Be careful not to unlink `from' if it happens to be equal to `to' or
+     (on filesystems that silently truncate filenames after 14 characters)
+     if `from' and `to' share the significant characters. */
+  if (stat (to, &to_stats))
+    {
+      if (errno != ENOENT)
+        return -1;
+    }
+  else
+    {
+      if ((from_stats.st_dev == to_stats.st_dev)
+          && (from_stats.st_ino == to_stats.st_dev))
+        /* `from' and `to' designate the same file on that filesystem. */
+        return 0;
+
+      if (unlink (to) && errno != ENOENT)
+        return -1;
+    }
 
   if (S_ISDIR (from_stats.st_mode))
     {