[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: some more JOBS



On Fri, Aug 10, 2001 at 03:28:59PM +0530, Nikunj A. Dadhania wrote:
> here is the patch

Thanks. A correction:
 
> 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",

You need a change here, too ^^^^^.

>  #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",

No need to print the thing twice, once is enough.

fsid does not change with USE_FILE_OFFSET64 (it's not related to files at
all).

>  #endif
>  			filename,
> -			statfsbuf.f_fsid.__val[0],
> -			statfsbuf.f_fsid.__val[1],
> +			statfsbuf.f_fsid,
> +			statfsbuf.f_fsid,

And only one of these two.

>  			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

Same here, only one time each.  The 16 was only a guess, it is needed to make the
column align.  I suggest a test run to find the real value (17 = 8 + 1 + 8?)

> -        switch (statfsbuf.f_type) {
> -        	case AFFS_SUPER_MAGIC:

Why did you reindent the whole thing?

> +	case MINIX_SUPER_MAGIC:
> +		printf("MINIX\n");
> +	case MINIX_SUPER_MAGIC2:


Here is a bug in the upstream code? The entry misses a break;

>  #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

Why did you touch this code? long is correct for these.

> @@ -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,


> -    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);

Ayupp, we have a problem here. st_dev is dev_t which is int on Linux, but
on the Hurd, it is the same as fsid (long).  But why did you remove the cast
to int of statbuf.st_ino?

It is possible to determine the size of the field in C.  When you do that
and set a variable st_dev_len to 4/8 and then switch on that, do you think
this would be a good solution? Otherwise, you can also just do

#ifndef (__GNU__)
Original code
#else
Your version
#endif

Which is far simpler ;)

Thanks,
Marcus



-- 
`Rhubarb is no Egyptian god.' Debian http://www.debian.org brinkmd@debian.org
Marcus Brinkmann              GNU    http://www.gnu.org    marcus@gnu.org
Marcus.Brinkmann@ruhr-uni-bochum.de
http://www.marcus-brinkmann.de



Reply to: