Marcus Brinkmann <[EMAIL PROTECTED]> writes:

> On Fri, Aug 10, 2001 at 10:29:15AM +0530, Nikunj A. Dadhania wrote:
> > Marcus Brinkmann <[EMAIL PROTECTED]> writes:
> > There is a member of stat structure fsid. its declared as
> >    typedef __u_quad_t __fsid_t;     /* Type of file system IDs.  */
> 
> The program stat has two issues:
> 
> 1. It accesses internal symbols of glibc (__var).  Everything beginning with
> two underscores is "strictly forbidden" if you want to follow the book.
> More so, there is absolutely no need to access those symbols.  As the GNU
> version of st_fsid shows, the special definition of the fsid type is
> purely a technical implementation issue to make the variable occupy a
> certain number of bytes in some special way.  Applications should be
> completely unaware of this.
> 
> stat should be changed to simply access st_fsid (not __val at all), and
> print it out as a long long.  For this you need to reformat the format
> specifiers a bit (%-16Lx for example, etc)

> 
> You should list all filesystem types in hurd/hurd_types.h.  In fact, this
> could easily be scripted and the code automatically generated, but cut&paste
> is also ok.  I suggest to simply use the XXX in FSTYPE_XXX for the string to
> print.

done

here is the patch

thanks,
nikunj

patch
========================================================================

diff -ruN stat-2.5.orig/fs.h hurd/stat/stat-2.5.orig/fs.h
--- stat-2.5.orig/fs.h  Mon Oct 11 17:53:17 1999
+++ hurd/stat/stat-2.5.orig/fs.h        Fri Aug 10 14:06:45 2001
@@ -1,6 +1,6 @@
 /* define the magic numbers as given by statfs(2) */
 /* please send additions to [EMAIL PROTECTED]     */
-
+#if defined(__linux__)
 #define        AFFS_SUPER_MAGIC      0xADFF
 #define EXT_SUPER_MAGIC       0x137D
 #define EXT2_OLD_SUPER_MAGIC  0xEF51
@@ -23,3 +23,7 @@
 #define UFS_MAGIC             0x00011954
 #define _XIAFS_SUPER_MAGIC    0x012FD16D
 #define        NTFS_SUPER_MAGIC      0x5346544e
+#elif defined(__GNU__)
+#include <hurd/hurd_types.h>
+#endif
+
diff -ruN stat-2.5.orig/stat.c hurd/stat/stat-2.5.orig/stat.c
--- stat-2.5.orig/stat.c        Thu May 10 13:25:29 2001
+++ hurd/stat/stat-2.5.orig/stat.c      Fri Aug 10 14:48:27 2001
@@ -23,11 +23,11 @@
 #ifdef __USE_FILE_OFFSET64
                printf("%s %x %x %lu %lx %lld %lld %lld %ld %lld %lld\n",
 #else
-               printf("%s %x %x %d %x %ld %ld %ld %d %ld %ld\n",
+               printf("%s %Lx %Lx %d %x %d %d %d %d %d %d\n",
 #endif
                        filename,
-                       statfsbuf.f_fsid.__val[0],
-                       statfsbuf.f_fsid.__val[1],
+                       statfsbuf.f_fsid,
+                       statfsbuf.f_fsid,
                        statfsbuf.f_namelen,
                        statfsbuf.f_type,
                        statfsbuf.f_blocks,
@@ -42,78 +42,162 @@
        
        printf("  File: \"%s\"\n", filename);
 #ifdef __USE_FILE_OFFSET64 
-       printf("    ID: %-8x %-8x Namelen: %-7ld Type: ", 
statfsbuf.f_fsid.__val[0], statfsbuf.f_fsid.__val[1], statfsbuf.f_namelen);
+       printf("    ID: %-16Lx %-16Lx Namelen: %-7ld Type: ", statfsbuf.f_fsid, 
statfsbuf.f_fsid, statfsbuf.f_namelen);
 #else
-       printf("    ID: %-8x %-8x Namelen: %-7d Type: ", 
statfsbuf.f_fsid.__val[0], statfsbuf.f_fsid.__val[1], statfsbuf.f_namelen);
+       printf("    ID: %-16Lx %-16Lx Namelen: %-7d Type: ", statfsbuf.f_fsid, 
statfsbuf.f_fsid, statfsbuf.f_namelen);
 #endif
 
-        switch (statfsbuf.f_type) {
-               case AFFS_SUPER_MAGIC:
-                       printf("AFFS\n");
-                       break;
-               case EXT_SUPER_MAGIC:
-                       printf("EXT\n");
-                       break;
-               case EXT2_OLD_SUPER_MAGIC:
-                       printf("EXT2\n");
-                       break;
-               case EXT2_SUPER_MAGIC:
-                       printf("EXT2\n");
-                       break;
-               case HPFS_SUPER_MAGIC:
-                       printf("HPFS\n");
-                       break;
-               case ISOFS_SUPER_MAGIC:
-                       printf("ISOFS\n");
-                       break;
-               case MINIX_SUPER_MAGIC:
-                       printf("MINIX\n");
-               case MINIX_SUPER_MAGIC2:
-                       printf("MINIX (30 char.)\n");
-                       break;
-               case MINIX2_SUPER_MAGIC:
-                       printf("MINIX V2\n");
-                       break;
-               case MINIX2_SUPER_MAGIC2:
-                       printf("MINIX V2 (30 char.)\n");
-                       break;
-               case MSDOS_SUPER_MAGIC:
-                       printf("MSDOS\n");
-                       break;
-               case NCP_SUPER_MAGIC:
-                       printf("NOVELL\n");
-                       break;
-               case NFS_SUPER_MAGIC:
-                       printf("NFS\n");
-                       break;
-               case PROC_SUPER_MAGIC:
-                       printf("PROC\n");
-                       break;
-               case SMB_SUPER_MAGIC:
-                       printf("SMB\n");
-                       break;
-               case XENIX_SUPER_MAGIC:
-                       printf("XENIX\n");
-                       break;
-               case SYSV4_SUPER_MAGIC:
-                       printf("SYSV4\n");
-                       break;
-               case SYSV2_SUPER_MAGIC:
-                       printf("SYSV2\n");
-                       break;
-               case COH_SUPER_MAGIC:
-                       printf("COH\n");
-                       break;
-               case UFS_MAGIC:
-                       printf("UFS\n");
-                       break;
-               case _XIAFS_SUPER_MAGIC:
-                       printf("XIA\n");
-                       break;
-               case NTFS_SUPER_MAGIC:
-                       printf("NTFS\n");
-                       break;
-               default:
+       switch (statfsbuf.f_type) {
+#if defined(__linux__)
+       case AFFS_SUPER_MAGIC:
+               printf("AFFS\n");
+               break;
+       case EXT_SUPER_MAGIC:
+               printf("EXT\n");
+               break;
+       case EXT2_OLD_SUPER_MAGIC:
+               printf("EXT2\n");
+               break;
+       case EXT2_SUPER_MAGIC:
+               printf("EXT2\n");
+               break;
+       case HPFS_SUPER_MAGIC:
+               printf("HPFS\n");
+               break;
+       case ISOFS_SUPER_MAGIC:
+               printf("ISOFS\n");
+               break;
+       case MINIX_SUPER_MAGIC:
+               printf("MINIX\n");
+       case MINIX_SUPER_MAGIC2:
+               printf("MINIX (30 char.)\n");
+               break;
+       case MINIX2_SUPER_MAGIC:
+               printf("MINIX V2\n");
+               break;
+       case MINIX2_SUPER_MAGIC2:
+               printf("MINIX V2 (30 char.)\n");
+               break;
+       case MSDOS_SUPER_MAGIC:
+               printf("MSDOS\n");
+               break;
+       case NCP_SUPER_MAGIC:
+               printf("NOVELL\n");
+               break;
+       case NFS_SUPER_MAGIC:
+               printf("NFS\n");
+               break;
+       case PROC_SUPER_MAGIC:
+               printf("PROC\n");
+               break;
+       case SMB_SUPER_MAGIC:
+               printf("SMB\n");
+               break;
+       case XENIX_SUPER_MAGIC:
+               printf("XENIX\n");
+               break;
+       case SYSV4_SUPER_MAGIC:
+               printf("SYSV4\n");
+               break;
+       case SYSV2_SUPER_MAGIC:
+               printf("SYSV2\n");
+               break;
+       case COH_SUPER_MAGIC:
+               printf("COH\n");
+               break;
+       case UFS_MAGIC:
+               printf("UFS\n");
+               break;
+       case _XIAFS_SUPER_MAGIC:
+               printf("XIA\n");
+               break;
+       case NTFS_SUPER_MAGIC:
+               printf("NTFS\n");
+               break;
+#elif defined(__GNU__)         
+       case FSTYPE_UFS:
+               printf("UFS\n");
+               break;
+       case FSTYPE_NFS:
+               printf("NFS\n");
+               break;
+       case FSTYPE_GFS:
+               printf("GFS\n");
+               break;
+       case FSTYPE_LFS:
+               printf("LFS\n");
+               break;
+       case FSTYPE_SYSV:
+               printf("SYSV\n");
+               break;
+       case FSTYPE_FTP:
+               printf("FTP\n");
+               break;
+       case FSTYPE_TAR:
+               printf("TAR\n");
+               break;
+       case FSTYPE_AR:
+               printf("AR\n");
+               break;
+       case FSTYPE_CPIO:
+               printf("CPIO\n");
+               break;
+       case FSTYPE_MSLOSS:
+               printf("MSLOSS\n");
+               break;
+       case FSTYPE_CPM:
+               printf("CPM\n");
+               break;
+       case FSTYPE_HFS:
+               printf("HFS\n");
+               break;
+       case FSTYPE_DTFS:
+               printf("DTFS\n");
+               break;
+       case FSTYPE_GRFS:
+               printf("GRFS\n");
+               break;
+       case FSTYPE_TERM:
+               printf("TERM\n");
+               break;
+       case FSTYPE_DEV:
+               printf("DEV\n");
+               break;
+       case FSTYPE_PROC:
+               printf("PROC\n");
+               break;
+       case FSTYPE_IFSOCK:
+               printf("IFSOCK\n");
+               break;
+       case FSTYPE_AFS:
+               printf("AFS\n");
+               break;
+       case FSTYPE_DFS:
+               printf("DFS\n");
+               break;
+       case FSTYPE_PROC9:
+               printf("PROC9\n");
+               break;
+       case FSTYPE_SOCKET:
+               printf("SOCKET\n");
+               break;
+       case FSTYPE_MISC:
+               printf("MISC\n");
+               break;
+       case FSTYPE_EXT2FS:
+               printf("EXT2FS\n");
+               break;
+       case FSTYPE_HTTP:
+               printf("HTTP\n");
+               break;
+       case FSTYPE_MEMFS:
+               printf("MEMFS\n");
+               break;
+       case FSTYPE_ISO9660:
+               printf("ISO9660\n");
+               break;
+#endif
+       default:
 #ifdef __USE_FILE_OFFSET64 
                        printf("UNKNOWN (0x%lx)\n", statfsbuf.f_type);
 #else
@@ -124,8 +208,8 @@
        printf("Blocks: Total: %-10lld Free: %-10lld Available: %-10lld Size: 
%ld\n",  statfsbuf.f_blocks, statfsbuf.f_bfree, statfsbuf.f_bavail, 
statfsbuf.f_bsize);
        printf("Inodes: Total: %-10lld Free: %-10lld\n", statfsbuf.f_files, 
statfsbuf.f_ffree);
 #else
-       printf("Blocks: Total: %-10ld Free: %-10ld Available: %-10ld Size: 
%d\n", statfsbuf.f_blocks, statfsbuf.f_bfree, statfsbuf.f_bavail, 
statfsbuf.f_bsize);
-       printf("Inodes: Total: %-10ld Free: %-10ld\n", statfsbuf.f_files, 
statfsbuf.f_ffree);
+       printf("Blocks: Total: %-10d Free: %-10d Available: %-10d Size: %d\n", 
statfsbuf.f_blocks, statfsbuf.f_bfree, statfsbuf.f_bavail, statfsbuf.f_bsize);
+       printf("Inodes: Total: %-10d Free: %-10d\n", statfsbuf.f_files, 
statfsbuf.f_ffree);
 #endif
 }
                                                                                
                                                                          
@@ -145,14 +229,14 @@
     }
     
     if (terse != 0) {
-               printf("%s %u %u %x %d %d %x %d %d %x %x %d %d %d %d\n",
+               printf("%s %u %u %x %d %d %Lx %d %d %x %x %d %d %d %d\n",
                        filename,
                        (unsigned int)statbuf.st_size,
                        (unsigned int)statbuf.st_blocks,
                        statbuf.st_mode,
                        statbuf.st_uid,
                        statbuf.st_gid,
-                       (int)statbuf.st_dev,
+                       statbuf.st_dev,
                        (int)statbuf.st_ino,
                        (int)statbuf.st_nlink,
                        major(statbuf.st_rdev),
@@ -203,8 +287,8 @@
        (void) printf("Unknown\n");
     }
 
-    printf("Device: %xh/%dd\tInode: %-10d  Links: %-5d", (int)statbuf.st_dev, 
(int)statbuf.st_dev,
-        (int)statbuf.st_ino, (int)statbuf.st_nlink);
+    printf("Device: %Lxh/%dd\tInode: %-10d  Links: %-5d", 
statbuf.st_dev,(int)statbuf.st_dev,
+        statbuf.st_ino, (int)statbuf.st_nlink);
 
     i = statbuf.st_mode & S_IFMT;
     if (i == S_IFCHR || i == S_IFBLK)



Reply via email to