diff options
author | Roland McGrath <roland@gnu.org> | 2002-10-23 23:50:19 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-10-23 23:50:19 +0000 |
commit | 3efdabe7624ae0a574d3919cfe9ffcb5bca21692 (patch) | |
tree | 0fff21e87bcf8b20c622f1a109f88566df789d2f /libio | |
parent | b02c687fd362f0a517aac69f4e934d9126e4032a (diff) | |
download | glibc-3efdabe7624ae0a574d3919cfe9ffcb5bca21692.tar.gz glibc-3efdabe7624ae0a574d3919cfe9ffcb5bca21692.tar.xz glibc-3efdabe7624ae0a574d3919cfe9ffcb5bca21692.zip |
* libio/ftello.c (ftello): Use _IO_off64_t for type of POS.
Check for the result overflowing off_t and fail with EOVERFLOW. * libio/ioftell.c (_IO_ftell): Likewise. * libio/iofgetpos.c (_IO_new_fgetpos): Likewise. * login/logwtmp.c (logwtmp): If sizeof ut_tv != sizeof struct timeval, use a temporary timeval on the stack for gettimeofday and copy it. * login/logout.c (logout): Likewise. Reported by Steven Munroe <sjmunroe@us.ibm.com>. * sysdeps/unix/sysv/linux/bits/statfs.h (struct statfs): Use __SWORD_TYPE instead of int for member types. (struct statfs64): Likewise. * sysdeps/unix/sysv/linux/alpha/bits/statfs.h: New file. * sysdeps/unix/sysv/linux/s390/bits/statfs.h: New file. * sysdeps/unix/sysv/linux/ia64/bits/statfs.h: File removed. * sysdeps/unix/sysv/linux/sparc/bits/statfs.h: File removed. * sysdeps/unix/sysv/linux/x86_64/bits/statfs.h: File removed. * sysdeps/unix/sysv/linux/sparc/bits/statvfs.h: Moved to ... * sysdeps/unix/sysv/linux/bits/statvfs.h: ... here. (ST_NODIRATIME): Restore fixed value of 2048. * sysdeps/unix/sysv/linux/alpha/bits/statvfs.h: File removed. * sysdeps/unix/sysv/linux/ia64/bits/statvfs.h: File removed. Rearranged <bits/types.h> definitions to reduce duplication. * sysdeps/generic/bits/types.h: Rewritten, using macros from <bits/wordsize.h> and new header <bits/typesizes.h>. * posix/Makefile (headers): Add bits/typesizes.h here. * sysdeps/generic/bits/typesizes.h: New file. * sysdeps/unix/sysv/linux/alpha/bits/typesizes.h: New file. * sysdeps/unix/sysv/linux/sparc/bits/typesizes.h: New file. * sysdeps/mach/hurd/bits/typesizes.h: New file. * sysdeps/unix/sysv/linux/alpha/bits/types.h: File removed. * sysdeps/unix/sysv/linux/bits/types.h: File removed. * sysdeps/unix/sysv/linux/ia64/bits/types.h: File removed. * sysdeps/unix/sysv/linux/mips/bits/types.h: File removed. * sysdeps/unix/sysv/linux/s390/bits/types.h: File removed. * sysdeps/unix/sysv/linux/sparc/bits/types.h: File removed. * sysdeps/unix/sysv/linux/x86_64/bits/types.h: File removed. * posix/sys/types.h [__USE_POSIX199506 || __USE_UNIX98]: Include <bits/pthreadtypes.h> here, not in <bits/types.h>. * signal/signal.h: Likewise. * streams/stropts.h: Include <bits/xtitypes.h>. * streams/Makefile (headers): Add bits/xtitypes.h here. * sysdeps/generic/bits/xtitypes.h: New file. * sysdeps/s390/bits/xtitypes.h: New file. * sysdeps/ia64/bits/xtitypes.h: New file. * sysdeps/x86_64/bits/xtitypes.h: New file. * sysvipc/Makefile (headers): Add bits/ipctypes.h here. * sysdeps/generic/bits/ipctypes.h: New file. * sysdeps/mips/bits/ipctypes.h: New file. * sysdeps/gnu/bits/shm.h: Include <bits/ipctypes.h>. * sysdeps/gnu/bits/msq.h: Likewise. * sysvipc/sys/ipc.h: Likewise. 2002-10-22 Roland McGrath <roland@redhat.com> * sysdeps/generic/libc-tls.c (_dl_tls_static_used): New variable. * sysdeps/generic/ldsodefs.h (struct rtld_global): New member `_dl_tls_static_used'. (TLS_STATIC_MIN): New macro. * elf/dl-reloc.c [USE_TLS] (allocate_static_tls): New function. (CHECK_STATIC_TLS): Use it.
Diffstat (limited to 'libio')
-rw-r--r-- | libio/ftello.c | 9 | ||||
-rw-r--r-- | libio/iofgetpos.c | 9 | ||||
-rw-r--r-- | libio/ioftell.c | 9 |
3 files changed, 24 insertions, 3 deletions
diff --git a/libio/ftello.c b/libio/ftello.c index dcecf5ee50..94a2541b25 100644 --- a/libio/ftello.c +++ b/libio/ftello.c @@ -35,7 +35,7 @@ off_t ftello (fp) _IO_FILE *fp; { - _IO_off_t pos; + _IO_off64_t pos; CHECK_FILE (fp, -1L); _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, fp); _IO_flockfile (fp); @@ -55,5 +55,12 @@ ftello (fp) #endif return -1L; } + if ((_IO_off64_t) (off_t) pos != pos) + { +#ifdef EOVERFLOW + __set_errno (EOVERFLOW); +#endif + return -1L; + } return pos; } diff --git a/libio/iofgetpos.c b/libio/iofgetpos.c index c8eea79e9b..4b50898a07 100644 --- a/libio/iofgetpos.c +++ b/libio/iofgetpos.c @@ -35,7 +35,7 @@ _IO_new_fgetpos (fp, posp) _IO_FILE *fp; _IO_fpos_t *posp; { - _IO_off_t pos; + _IO_off64_t pos; int result = 0; CHECK_FILE (fp, EOF); _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); @@ -56,6 +56,13 @@ _IO_new_fgetpos (fp, posp) #endif result = EOF; } + else if ((_IO_off64_t) (__typeof (posp->__pos)) pos != pos) + { +#ifdef EOVERFLOW + __set_errno (EOVERFLOW); +#endif + result = EOF; + } else { posp->__pos = pos; diff --git a/libio/ioftell.c b/libio/ioftell.c index 8328c5b042..2a389c37be 100644 --- a/libio/ioftell.c +++ b/libio/ioftell.c @@ -34,7 +34,7 @@ long int _IO_ftell (fp) _IO_FILE *fp; { - _IO_off_t pos; + _IO_off64_t pos; CHECK_FILE (fp, -1L); _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); _IO_flockfile (fp); @@ -54,6 +54,13 @@ _IO_ftell (fp) #endif return -1L; } + if ((_IO_off64_t) (off_t) pos != pos) + { +#ifdef EOVERFLOW + __set_errno (EOVERFLOW); +#endif + return -1L; + } return pos; } INTDEF(_IO_ftell) |