From 85800279bcad0b3495ccc22374f42cd04675f9e4 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Fri, 24 Jan 2003 11:44:14 +0000 Subject: 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 --- libc/sysdeps/linux/mips/bits/kernel_stat.h | 79 ++---------------------------- 1 file changed, 5 insertions(+), 74 deletions(-) (limited to 'libc/sysdeps/linux/mips/bits') diff --git a/libc/sysdeps/linux/mips/bits/kernel_stat.h b/libc/sysdeps/linux/mips/bits/kernel_stat.h index 314676456..e8721ee7c 100644 --- a/libc/sysdeps/linux/mips/bits/kernel_stat.h +++ b/libc/sysdeps/linux/mips/bits/kernel_stat.h @@ -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 @@ struct stat { }; #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 @@ struct stat64 { unsigned long st_pad2; long long st_blocks; }; -#endif -#endif #endif /* _BITS_STAT_STRUCT_H */ -- cgit v1.2.3