[uClibc-cvs] uClibc/libc/sysdeps/linux/mips/bits kernel_stat.h,1.2,1.3

Erik Andersen andersen at codepoet.org
Fri Jan 24 11:44:45 UTC 2003


Update of /var/cvs/uClibc/libc/sysdeps/linux/mips/bits
In directory winder:/tmp/cvs-serv18234/libc/sysdeps/linux/mips/bits

Modified Files:
	kernel_stat.h 
Log Message:
Ok, people are probably going to hate me for this...  This commit changes the
type of 'struct stat' and 'struct stat64' so they use consistant types.  

This change is the result of a bug I found while trying to use GNU tar.  The
problem was caused by our using kernel types within struct stat and trying to
directly compare these values with standard types.  Trying an 'if (a < b)' when
'a' is an 'unsigned long' and 'b' is an 'int' leads to very different results
then when comparing entities of the same type (i.e. time_t values)....
Grumble.  Nasty stuff, but I'm glad I got this out of the way now.

As a result of this fix, uClibc 0.9.17 will not be binary compatible with
earlier releases.  I have always warned people this can and will happen.
 -Erik


Index: kernel_stat.h
===================================================================
RCS file: /var/cvs/uClibc/libc/sysdeps/linux/mips/bits/kernel_stat.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- kernel_stat.h	25 Aug 2002 00:22:10 -0000	1.2
+++ kernel_stat.h	24 Jan 2003 11:44:10 -0000	1.3
@@ -2,79 +2,13 @@
 #define _BITS_STAT_STRUCT_H
 
 /* This file provides whatever this particular arch's kernel thinks 
- * struct stat should look like...  It turns out each arch has a 
+ * struct kernel_stat should look like...  It turns out each arch has a 
  * different opinion on the subject... */
-#if __WORDSIZE == 64
-struct stat {
-	unsigned long	st_dev;
-	unsigned long	st_pad0[3];	/* Reserved for st_dev expansion  */
-	unsigned long long	st_ino;
-	unsigned int	st_mode;
-	int		st_nlink;
-	int		st_uid;
-	int		st_gid;
-	unsigned long	st_rdev;
-	unsigned long	st_pad1[3];	/* Reserved for st_rdev expansion  */
-	long long	st_size;
-	long		st_atime;
-	unsigned long	reserved0;	/* Reserved for st_atime expansion  */
-	long		st_mtime;
-	unsigned long	reserved1;	/* Reserved for st_mtime expansion  */
-	long		st_ctime;
-	unsigned long	reserved2;	/* Reserved for st_ctime expansion  */
-	unsigned long	st_blksize;
-	unsigned long	st_pad2;
-	long long	st_blocks;
-};
-struct stat64 {
-	unsigned long	st_dev;
-	unsigned long	st_pad0[3];	/* Reserved for st_dev expansion  */
-	unsigned long long	st_ino;
-	unsigned int	st_mode;
-	int		st_nlink;
-	int		st_uid;
-	int		st_gid;
-	unsigned long	st_rdev;
-	unsigned long	st_pad1[3];	/* Reserved for st_rdev expansion  */
-	long long	st_size;
-	long		st_atime;
-	unsigned long	reserved0;	/* Reserved for st_atime expansion  */
-	long		st_mtime;
-	unsigned long	reserved1;	/* Reserved for st_mtime expansion  */
-	long		st_ctime;
-	unsigned long	reserved2;	/* Reserved for st_ctime expansion  */
-	unsigned long	st_blksize;
-	unsigned long	st_pad2;
-	long long	st_blocks;
-};
 
+#if __WORDSIZE == 64
+#define kernel_stat kernel_stat64
 #else
-
-#ifndef __USE_FILE_OFFSET64
-struct stat {
-	unsigned int	st_dev;
-	long		st_pad1[3];		/* Reserved for network id */
-	unsigned long	st_ino;
-	unsigned int	st_mode;
-	int		st_nlink;
-	int		st_uid;
-	int		st_gid;
-	unsigned int	st_rdev;
-	long		st_pad2[2];
-	long		st_size;
-	long		st_pad3;
-	long		st_atime;
-	long		reserved0;
-	long		st_mtime;
-	long		reserved1;
-	long		st_ctime;
-	long		reserved2;
-	long		st_blksize;
-	long		st_blocks;
-	long		st_pad4[14];
-};
-#else
-struct stat {
+struct kernel_stat {
 	unsigned long	st_dev;
 	unsigned long	st_pad0[3];	/* Reserved for st_dev expansion  */
 	unsigned long long	st_ino;
@@ -97,8 +31,7 @@
 };
 #endif
 
-#ifdef __USE_LARGEFILE64
-struct stat64 {
+struct kernel_stat64 {
 	unsigned long	st_dev;
 	unsigned long	st_pad0[3];	/* Reserved for st_dev expansion  */
 	unsigned long long	st_ino;
@@ -119,8 +52,6 @@
 	unsigned long	st_pad2;
 	long long	st_blocks;
 };
-#endif
-#endif
 
 #endif	/*  _BITS_STAT_STRUCT_H */
 




More information about the uClibc-cvs mailing list