aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Jaeger <aj@suse.de>2000-05-26 20:11:43 +0000
committerAndreas Jaeger <aj@suse.de>2000-05-26 20:11:43 +0000
commit1869e7d1341a3c01b5aa0d231e4708c35e374b83 (patch)
treee0e61c3f053a603d6400228735c5fddcc9766d7e
parentf0b2767b75f31e04f2c22260b857595f081e748d (diff)
downloadglibc-1869e7d1341a3c01b5aa0d231e4708c35e374b83.zip
glibc-1869e7d1341a3c01b5aa0d231e4708c35e374b83.tar.gz
glibc-1869e7d1341a3c01b5aa0d231e4708c35e374b83.tar.bz2
* sysdeps/unix/sysv/linux/ftruncate64.c (ftruncate64): Make order
of arguments dependend on endianness. * sysdeps/unix/sysv/linux/truncate64.c: Likewise.
-rw-r--r--sysdeps/unix/sysv/linux/ftruncate64.c11
-rw-r--r--sysdeps/unix/sysv/linux/truncate64.c10
2 files changed, 14 insertions, 7 deletions
diff --git a/sysdeps/unix/sysv/linux/ftruncate64.c b/sysdeps/unix/sysv/linux/ftruncate64.c
index a38d5bd..40e2879 100644
--- a/sysdeps/unix/sysv/linux/ftruncate64.c
+++ b/sysdeps/unix/sysv/linux/ftruncate64.c
@@ -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 @@ ftruncate64 (fd, length)
#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
diff --git a/sysdeps/unix/sysv/linux/truncate64.c b/sysdeps/unix/sysv/linux/truncate64.c
index 2f8d5a3..e921442 100644
--- a/sysdeps/unix/sysv/linux/truncate64.c
+++ b/sysdeps/unix/sysv/linux/truncate64.c
@@ -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 @@ truncate64 (path, length)
#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)