about summary refs log tree commit diff
path: root/libio/iofgetpos.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2002-10-23 23:50:19 +0000
committerRoland McGrath <roland@gnu.org>2002-10-23 23:50:19 +0000
commit3efdabe7624ae0a574d3919cfe9ffcb5bca21692 (patch)
tree0fff21e87bcf8b20c622f1a109f88566df789d2f /libio/iofgetpos.c
parentb02c687fd362f0a517aac69f4e934d9126e4032a (diff)
downloadglibc-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/iofgetpos.c')
-rw-r--r--libio/iofgetpos.c9
1 files changed, 8 insertions, 1 deletions
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;