[uClibc-cvs] uClibc/libc/sysdeps/linux/sparc/bits kernel_stat.h,1.2,1.3
Erik Andersen
andersen at codepoet.org
Fri Jan 24 11:44:17 UTC 2003
Update of /var/cvs/uClibc/libc/sysdeps/linux/sparc/bits
In directory winder:/tmp/cvs-serv18234/libc/sysdeps/linux/sparc/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/sparc/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:15 -0000 1.2
+++ kernel_stat.h 24 Jan 2003 11:44:13 -0000 1.3
@@ -2,81 +2,12 @@
#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 char __pad0[6];
- unsigned short st_dev;
- unsigned long long st_ino;
- unsigned int st_mode;
- unsigned int st_nlink;
- unsigned int st_uid;
- unsigned int st_gid;
- unsigned char __pad2[6];
- unsigned short st_rdev;
- unsigned char __pad3[8];
- long long st_size;
- unsigned int st_blksize;
- unsigned char __pad4[8];
- unsigned int st_blocks;
- unsigned int st_atime;
- unsigned int __unused1;
- unsigned int st_mtime;
- unsigned int __unused2;
- unsigned int st_ctime;
- unsigned int __unused3;
- unsigned int __unused4;
- unsigned int __unused5;
-};
-struct stat64 {
- unsigned char __pad0[6];
- unsigned short st_dev;
- unsigned long long st_ino;
- unsigned int st_mode;
- unsigned int st_nlink;
- unsigned int st_uid;
- unsigned int st_gid;
- unsigned char __pad2[6];
- unsigned short st_rdev;
- unsigned char __pad3[8];
- long long st_size;
- unsigned int st_blksize;
- unsigned char __pad4[8];
- unsigned int st_blocks;
- unsigned int st_atime;
- unsigned int __unused1;
- unsigned int st_mtime;
- unsigned int __unused2;
- unsigned int st_ctime;
- unsigned int __unused3;
- unsigned int __unused4;
- unsigned int __unused5;
-};
-
-#else
-#ifndef __USE_FILE_OFFSET64
-struct stat {
- unsigned short st_dev;
- unsigned long st_ino;
- unsigned short st_mode;
- short st_nlink;
- unsigned short st_uid;
- unsigned short st_gid;
- unsigned short st_rdev;
- long st_size;
- long st_atime;
- unsigned long __unused1;
- long st_mtime;
- unsigned long __unused2;
- long st_ctime;
- unsigned long __unused3;
- long st_blksize;
- long st_blocks;
- unsigned long __unused4[2];
-};
+#define kernel_stat kernel_stat64
#else
-struct stat {
+struct kernel_stat {
unsigned char __pad0[6];
unsigned short st_dev;
unsigned long long st_ino;
@@ -102,8 +33,7 @@
};
#endif
-#ifdef __USE_LARGEFILE64
-struct stat64 {
+struct kernel_stat64 {
unsigned char __pad0[6];
unsigned short st_dev;
unsigned long long st_ino;
@@ -127,8 +57,6 @@
unsigned int __unused4;
unsigned int __unused5;
};
-#endif
-#endif
#endif /* _BITS_STAT_STRUCT_H */
More information about the uClibc-cvs
mailing list