This is the mail archive of the libc-hacker@sourceware.cygnus.com mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Fix for ftruncate64/truncate64



Here's a patch for the endianness issues in (f)truncate64.c.

May I commit this?

Andreas

2000-05-26  Andreas Jaeger  <aj@suse.de>

	* sysdeps/unix/sysv/linux/ftruncate64.c (ftruncate64): Make order
	of arguments dependend on endianness.
	* sysdeps/unix/sysv/linux/truncate64.c: Likewise.

============================================================
Index: sysdeps/unix/sysv/linux/ftruncate64.c
--- sysdeps/unix/sysv/linux/ftruncate64.c	2000/01/17 04:04:21	1.6
+++ sysdeps/unix/sysv/linux/ftruncate64.c	2000/05/26 16:01:29
@@ -18,6 +18,7 @@
 
 #include <sys/types.h>
 #include <errno.h>
+#include <endian.h>
 #include <unistd.h>
 
 #include <sysdep.h>
@@ -31,14 +32,13 @@
 extern int __have_no_truncate64;
 #endif
 
+/* The order of hight, low depends on endianness.  */
 extern int __syscall_ftruncate64 (int fd, int high_length, int low_length);
 
 
 /* Truncate the file FD refers to to LENGTH bytes.  */
 int
-ftruncate64 (fd, length)
-     int fd;
-     off64_t length;
+ftruncate64 (int fd, off64_t length)
 {
 #ifndef __ASSUME_TRUNCATE64_SYSCALL
   if (! __have_no_truncate64)
@@ -49,8 +49,11 @@
 #ifndef __ASSUME_TRUNCATE64_SYSCALL
       int saved_errno = errno;
 #endif
+#if __BYTE_ORDER == __LITTLE_ENDIAN
       int result = INLINE_SYSCALL (ftruncate64, 3, fd, low, high);
-
+#elif __BYTE_ORDER == __BIG_ENDIAN
+      int result = INLINE_SYSCALL (ftruncate64, 3, fd, high, low);
+#endif
 #ifndef __ASSUME_TRUNCATE64_SYSCALL
       if (result != -1 || errno != ENOSYS)
 #endif
============================================================
Index: sysdeps/unix/sysv/linux/truncate64.c
--- sysdeps/unix/sysv/linux/truncate64.c	2000/01/18 04:25:51	1.7
+++ sysdeps/unix/sysv/linux/truncate64.c	2000/05/26 16:01:29
@@ -17,6 +17,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <sys/types.h>
+#include <endian.h>
 #include <errno.h>
 #include <unistd.h>
 
@@ -31,14 +32,13 @@
 int __have_no_truncate64;
 #endif
 
+/* The order of hight, low depends on endianness.  */
 extern int __syscall_truncate64 (const char *path, int high_length, int low_length);
 
 
 /* Truncate the file FD refers to to LENGTH bytes.  */
 int
-truncate64 (path, length)
-     const char *path;
-     off64_t length;
+truncate64 (const char *path, off64_t length)
 {
 #ifndef __ASSUME_TRUNCATE64_SYSCALL
   if (! __have_no_truncate64)
@@ -49,7 +49,11 @@
 #ifndef __ASSUME_TRUNCATE64_SYSCALL
       int saved_errno = errno;
 #endif
+#if __BYTE_ORDER == __LITTLE_ENDIAN
       int result = INLINE_SYSCALL (truncate64, 3, path, low, high);
+#elif __BYTE_ORDER == __BIG_ENDIAN
+      int result = INLINE_SYSCALL (truncate64, 3, path, high, low);
+#endif
 
 #ifndef __ASSUME_TRUNCATE64_SYSCALL
       if (result != -1 || errno != ENOSYS)

-- 
 Andreas Jaeger
  SuSE Labs aj@suse.de
   private aj@arthur.rhein-neckar.de

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]