diff options
author | Eric Andersen <andersen@codepoet.org> | 2003-01-24 11:44:14 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2003-01-24 11:44:14 +0000 |
commit | 85800279bcad0b3495ccc22374f42cd04675f9e4 (patch) | |
tree | 30f6754fb734191d6cd7d3fad292a94c02430418 /libc/sysdeps/linux/v850 | |
parent | 8c29bb071a5d7f6cf8edb26b93bd9e48d4ad3df1 (diff) |
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
Diffstat (limited to 'libc/sysdeps/linux/v850')
-rw-r--r-- | libc/sysdeps/linux/v850/bits/kernel_stat.h | 44 |
1 files changed, 2 insertions, 42 deletions
diff --git a/libc/sysdeps/linux/v850/bits/kernel_stat.h b/libc/sysdeps/linux/v850/bits/kernel_stat.h index 435c2ce86..a4093aec0 100644 --- a/libc/sysdeps/linux/v850/bits/kernel_stat.h +++ b/libc/sysdeps/linux/v850/bits/kernel_stat.h @@ -1,8 +1,6 @@ /* Stat structure for linux/v850 */ -#ifndef __USE_FILE_OFFSET64 - -struct stat +struct kernel_stat { __kernel_dev_t st_dev; __kernel_ino_t st_ino; @@ -24,9 +22,7 @@ struct stat unsigned long __unused5; }; -#else /* __USE_FILE_OFFSET64 */ - -struct stat +struct kernel_stat64 { __kernel_dev_t st_dev; unsigned long __unused0; @@ -60,39 +56,3 @@ struct stat unsigned long __unused7; /* high 32 bits of ctime someday */ }; -#endif /* __USE_FILE_OFFSET64 */ - - -struct stat64 -{ - __kernel_dev_t st_dev; - unsigned long __unused0; - unsigned long __unused1; - - __kernel_ino64_t st_ino; - - __kernel_mode_t st_mode; - __kernel_nlink_t st_nlink; - - __kernel_uid_t st_uid; - __kernel_gid_t st_gid; - - __kernel_dev_t st_rdev; - unsigned long __unused2; - unsigned long __unused3; - - __kernel_loff_t st_size; - unsigned long st_blksize; - - unsigned long __unused4; /* future possible st_blocks high bits */ - unsigned long st_blocks; /* Number 512-byte blocks allocated. */ - - unsigned long st_atime; - unsigned long __unused5; - - unsigned long st_mtime; - unsigned long __unused6; - - unsigned long st_ctime; - unsigned long __unused7; /* high 32 bits of ctime someday */ -}; |