This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.24-356-gd4d8a12


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  d4d8a129602f17b29ccdbffd55198fd6eb7bf9c7 (commit)
       via  87686aeefdf419bc7d02cae25f5b45e9306ba6ff (commit)
      from  5874510faaf3cbd0bb112aaacab9f225002beed1 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=d4d8a129602f17b29ccdbffd55198fd6eb7bf9c7

commit d4d8a129602f17b29ccdbffd55198fd6eb7bf9c7
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Fri Aug 26 12:19:18 2016 -0300

    Consolidate Linux truncate implementations
    
    This patch consolidates all Linux truncate implementation on
    sysdeps/unix/sysv/linux/truncate{64}.c.  It is based on
    {INTERNAL,INLINE}_SYSCALL patch [1] to simplify the syscall
    construction.
    
    General idea is to build ftruncate iff __OFF_T_MATCHES_OFF64_T is not
    defined, otherwise ftruncate64 will be build and ftruncate will be an
    alias.  The fallocate will use old compat syscall and pass 32-bit off_t
    argument, while fallocate64 will handle the correct off64_t passing using
    __ALIGNMENT_ARG and SYSCALL_LL64 macros.
    
    Tested on x86_64, i386, aarch64, and armhf.
    
    	* sysdeps/unix/sysv/linux/arm/truncate64.c: Remove file.
    	* sysdeps/unix/sysv/linux/generic/wordsize-32/truncate.c: Likewise.
    	* sysdeps/sysv/linux/generic/wordsize-32/truncate64.c: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips32/truncate64.c: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips64/truncate64.c: Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c: Likewise.
    	* sysdeps/unix/sysv/linux/wordsize-64/truncate64.c: Likewise.
    	* sysdeps/unix/sysv/linux/truncate.c: New file.
    	* sysdeps/unix/sysv/linux/truncate64.c (truncate64): Use
    	INLINE_SYSCALL_CALL, __ALIGNMENT_ARG and SYSCALL_LL64 macros.
    	* sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (truncate):
    	Remove.
    	* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list (truncate):
    	Likewise.
    
    [1] https://sourceware.org/ml/libc-alpha/2016-08/msg00646.html

diff --git a/ChangeLog b/ChangeLog
index 419e0be..b083ad6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,20 @@
 2016-11-09  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
+	* sysdeps/unix/sysv/linux/arm/truncate64.c: Remove file.
+	* sysdeps/unix/sysv/linux/generic/wordsize-32/truncate.c: Likewise.
+	* sysdeps/sysv/linux/generic/wordsize-32/truncate64.c: Likewise.
+	* sysdeps/unix/sysv/linux/mips/mips32/truncate64.c: Likewise.
+	* sysdeps/unix/sysv/linux/mips/mips64/truncate64.c: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c: Likewise.
+	* sysdeps/unix/sysv/linux/wordsize-64/truncate64.c: Likewise.
+	* sysdeps/unix/sysv/linux/truncate.c: New file.
+	* sysdeps/unix/sysv/linux/truncate64.c (truncate64): Use
+	INLINE_SYSCALL_CALL, __ALIGNMENT_ARG and SYSCALL_LL64 macros.
+	* sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (truncate):
+	Remove.
+	* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list (truncate):
+	Likewise.
+
 	* posix/tst-truncate-common.c: New file.
 	* posix/tst-truncate.c: Use tst-truncate-common.c.
 	* posix/tst-truncate64.c: Likewise and add LFS tests.
diff --git a/sysdeps/unix/sysv/linux/arm/truncate64.c b/sysdeps/unix/sysv/linux/arm/truncate64.c
deleted file mode 100644
index 28563af..0000000
--- a/sysdeps/unix/sysv/linux/arm/truncate64.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sys/types.h>
-#include <endian.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include <sysdep.h>
-#include <sys/syscall.h>
-
-/* Truncate the file FD refers to to LENGTH bytes.  */
-int
-truncate64 (const char *path, off64_t length)
-{
-  unsigned int low = length & 0xffffffff;
-  unsigned int high = length >> 32;
-  int result = INLINE_SYSCALL (truncate64, 4, path, 0,
-			       __LONG_LONG_PAIR (high, low));
-  return result;
-}
diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/truncate64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/truncate64.c
deleted file mode 100644
index f2927ea..0000000
--- a/sysdeps/unix/sysv/linux/generic/wordsize-32/truncate64.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-/* Truncate the file PATH to LENGTH bytes.  */
-int
-truncate64 (const char *path, off64_t length)
-{
-  unsigned int low = length & 0xffffffff;
-  unsigned int high = length >> 32;
-  return INLINE_SYSCALL (truncate64, __ALIGNMENT_COUNT (3, 4), path,
-                         __ALIGNMENT_ARG __LONG_LONG_PAIR (high, low));
-}
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/truncate64.c b/sysdeps/unix/sysv/linux/mips/mips32/truncate64.c
deleted file mode 100644
index 28563af..0000000
--- a/sysdeps/unix/sysv/linux/mips/mips32/truncate64.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sys/types.h>
-#include <endian.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include <sysdep.h>
-#include <sys/syscall.h>
-
-/* Truncate the file FD refers to to LENGTH bytes.  */
-int
-truncate64 (const char *path, off64_t length)
-{
-  unsigned int low = length & 0xffffffff;
-  unsigned int high = length >> 32;
-  int result = INLINE_SYSCALL (truncate64, 4, path, 0,
-			       __LONG_LONG_PAIR (high, low));
-  return result;
-}
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list b/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list
index 1e3ae0a..d0d9b9a 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list
@@ -1,7 +1,5 @@
 # File name	Caller	Syscall name	Args	Strong name	Weak names
 
-truncate	-	truncate	i:si	truncate	truncate64
-
 # Semaphore and shm system calls.  msgctl, shmctl, and semctl have C
 # wrappers (to set __IPC_64).
 msgget		-	msgget		i:ii	__msgget	msgget
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/truncate64.c b/sysdeps/unix/sysv/linux/mips/mips64/truncate64.c
deleted file mode 100644
index 6e25b02..0000000
--- a/sysdeps/unix/sysv/linux/mips/mips64/truncate64.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Empty.  */
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c
deleted file mode 100644
index ccfdafa..0000000
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include <sysdep.h>
-#include <sys/syscall.h>
-
-/* Truncate the file referenced by FD to LENGTH bytes.  */
-int
-truncate64 (const char *path, off64_t length)
-{
-  /* On PPC32 64bit values are aligned in odd/even register pairs.  */
-  int result = INLINE_SYSCALL (truncate64, 4, path, 0,
-			       (long) (length >> 32),
-			       (long) length);
-  return result;
-}
diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/truncate.c b/sysdeps/unix/sysv/linux/truncate.c
similarity index 73%
rename from sysdeps/unix/sysv/linux/generic/wordsize-32/truncate.c
rename to sysdeps/unix/sysv/linux/truncate.c
index 2579951..9e71288 100644
--- a/sysdeps/unix/sysv/linux/generic/wordsize-32/truncate.c
+++ b/sysdeps/unix/sysv/linux/truncate.c
@@ -1,6 +1,5 @@
-/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+/* Copyright (C) 2016 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
-   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
@@ -16,16 +15,21 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
-#include <sys/types.h>
 #include <unistd.h>
+#include <sysdep.h>
+#include <errno.h>
 
+#ifndef __OFF_T_MATCHES_OFF64_T
 /* Truncate PATH to LENGTH bytes.  */
 int
 __truncate (const char *path, off_t length)
 {
-  return INLINE_SYSCALL (truncate64, __ALIGNMENT_COUNT (3, 4), path,
-                         __ALIGNMENT_ARG
-                         __LONG_LONG_PAIR (length >> 31, length));
+# ifndef __NR_truncate
+  return INLINE_SYSCALL_CALL (truncate64, path,
+			      __ALIGNMENT_ARG SYSCALL_LL (length));
+# else
+  return INLINE_SYSCALL_CALL (truncate, path, length);
+# endif
 }
 weak_alias (__truncate, truncate)
+#endif
diff --git a/sysdeps/unix/sysv/linux/truncate64.c b/sysdeps/unix/sysv/linux/truncate64.c
index 92a6bc4..0d70da7 100644
--- a/sysdeps/unix/sysv/linux/truncate64.c
+++ b/sysdeps/unix/sysv/linux/truncate64.c
@@ -15,21 +15,23 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sys/types.h>
-#include <endian.h>
-#include <errno.h>
 #include <unistd.h>
-
 #include <sysdep.h>
-#include <sys/syscall.h>
+#include <errno.h>
 
-/* Truncate the file referenced by FD to LENGTH bytes.  */
+#ifndef __NR_truncate64
+# define __NR_truncate64 __NR_truncate
+#endif
+
+/* Truncate PATH to LENGTH bytes.  */
 int
-truncate64 (const char *path, off64_t length)
+__truncate64 (const char *path, off64_t length)
 {
-  unsigned int low = length & 0xffffffff;
-  unsigned int high = length >> 32;
-  int result = INLINE_SYSCALL (truncate64, 3, path,
-			       __LONG_LONG_PAIR (high, low));
-  return result;
+  return INLINE_SYSCALL_CALL (truncate64, path,
+			      __ALIGNMENT_ARG SYSCALL_LL64 (length));
 }
+weak_alias (__truncate64, truncate64)
+
+#ifdef __OFF_T_MATCHES_OFF64_T
+weak_alias (__truncate64, truncate);
+#endif
diff --git a/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list b/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list
index 8c20ef9..99236ba 100644
--- a/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list
@@ -3,7 +3,6 @@
 fstatfs		-	fstatfs		i:ip	__fstatfs	fstatfs fstatfs64 __fstatfs64
 statfs		-	statfs		i:sp	__statfs	statfs statfs64
 mmap		-	mmap		b:aniiii __mmap		mmap __mmap64 mmap64
-truncate	-	truncate	i:si	truncate	truncate64
 getrlimit	-	getrlimit	i:ip	__getrlimit	getrlimit getrlimit64 __getrlimit64
 setrlimit	-	setrlimit	i:ip	__setrlimit	setrlimit setrlimit64
 readahead	-	readahead	i:iii	__readahead	readahead
diff --git a/sysdeps/unix/sysv/linux/wordsize-64/truncate64.c b/sysdeps/unix/sysv/linux/wordsize-64/truncate64.c
deleted file mode 100644
index 8999768..0000000
--- a/sysdeps/unix/sysv/linux/wordsize-64/truncate64.c
+++ /dev/null
@@ -1 +0,0 @@
-/* truncate64 is the same as truncate. */

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=87686aeefdf419bc7d02cae25f5b45e9306ba6ff

commit 87686aeefdf419bc7d02cae25f5b45e9306ba6ff
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Fri Aug 26 10:42:58 2016 -0300

    Consolidate Linux ftruncate implementations
    
    THis patch consolidates all Linux ftruncate implementation on
    sysdeps/unix/sysv/linux/ftruncate{64}.c.  It is based on
    {INTERNAL,INLINE}_SYSCALL patch [1] to simplify the syscall construction.
    
    General idea is to build ftruncate iff __OFF_T_MATCHES_OFF64_T is not
    defined, otherwise ftruncate64 will be build and ftruncate will be an
    alias.  The fallocate will use old compat syscall and pass 32-bit off_t
    argument, while fallocate64 will handle the correct off64_t passing using
    __ALIGNMENT_ARG and SYSCALL_LL64 macros.
    
    Tested on x86_64, i386, aarch64, and armhf.
    
    	* posix/tst-truncate-common.c: New file.
    	* posix/tst-truncate.c: Use tst-truncate-common.c.
    	* posix/tst-truncate64.c: Likewise and add LFS tests.
    	* sysdeps/unix/sysv/linux/arm/ftruncate64.c: Remove file.
    	* sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate.c: Likewise.
    	* sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate64.c: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips32/ftruncate64.c: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips64/ftruncate64.c: Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c: Likewise.
    	* sysdeps/unix/sysv/linux/wordsize-64/ftruncate64.c: Likewise.
    	* sysdeps/unix/sysv/linux/ftruncate.c: New file.
    	* sysdeps/unix/sysv/linux/ftruncate64.c (__ftruncate64): Use
    	INLINE_SYSCALL_CALL, __ALIGNMENT_ARG and SYSCALL_LL64 macros.
    	[__OFF_T_MATCHES_OFF64_T] (ftruncate): Add alias.
    	* sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (ftruncate):
    	Remove.
    	* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list (ftruncate):
    	Likewise.
    
    [1] https://sourceware.org/ml/libc-alpha/2016-08/msg00646.html

diff --git a/ChangeLog b/ChangeLog
index a705ff1..419e0be 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,24 @@
+2016-11-09  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+
+	* posix/tst-truncate-common.c: New file.
+	* posix/tst-truncate.c: Use tst-truncate-common.c.
+	* posix/tst-truncate64.c: Likewise and add LFS tests.
+	* sysdeps/unix/sysv/linux/arm/ftruncate64.c: Remove file.
+	* sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate.c: Likewise.
+	* sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate64.c: Likewise.
+	* sysdeps/unix/sysv/linux/mips/mips32/ftruncate64.c: Likewise.
+	* sysdeps/unix/sysv/linux/mips/mips64/ftruncate64.c: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c: Likewise.
+	* sysdeps/unix/sysv/linux/wordsize-64/ftruncate64.c: Likewise.
+	* sysdeps/unix/sysv/linux/ftruncate.c: New file.
+	* sysdeps/unix/sysv/linux/ftruncate64.c (__ftruncate64): Use
+	INLINE_SYSCALL_CALL, __ALIGNMENT_ARG and SYSCALL_LL64 macros.
+	[__OFF_T_MATCHES_OFF64_T] (ftruncate): Add alias.
+	* sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (ftruncate):
+	Remove.
+	* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list (ftruncate):
+	Likewise.
+
 2016-11-08  Joseph Myers  <joseph@codesourcery.com>
 
 	[BZ #20790]
diff --git a/posix/tst-truncate-common.c b/posix/tst-truncate-common.c
new file mode 100644
index 0000000..80bf277
--- /dev/null
+++ b/posix/tst-truncate-common.c
@@ -0,0 +1,88 @@
+/* Common f{truncate} tests definitions.
+   Copyright (C) 2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+static void do_prepare (void);
+#define PREPARE(argc, argv)     do_prepare ()
+static int do_test (void);
+#define TEST_FUNCTION           do_test ()
+
+#include <test-skeleton.c>
+
+static char *temp_filename;
+static int temp_fd;
+
+static void
+do_prepare (void)
+{
+  temp_fd = create_temp_file ("tst-trucate.", &temp_filename);
+  if (temp_fd == -1)
+    {
+      printf ("cannot create temporary file: %m\n");
+      exit (1);
+    }
+}
+
+#define FAIL(str) \
+  do { printf ("error: %s (line %d)\n", str, __LINE__); return 1; } while (0)
+
+static int
+do_test_with_offset (off_t offset)
+{
+  struct stat st;
+  char buf[1000];
+
+  memset (buf, 0xcf, sizeof (buf));
+
+  if (pwrite (temp_fd, buf, sizeof (buf), offset) != sizeof (buf))
+    FAIL ("write failed");
+  if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + sizeof (buf)))
+    FAIL ("initial size wrong");
+
+  if (ftruncate (temp_fd, offset + 800) < 0)
+    FAIL ("size reduction with ftruncate failed");
+  if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 800))
+    FAIL ("size after reduction with ftruncate is incorrect");
+
+  /* The following test covers more than POSIX.  POSIX does not require
+     that ftruncate() can increase the file size.  But we are testing
+     Unix systems.  */
+  if (ftruncate (temp_fd, offset + 1200) < 0)
+    FAIL ("size increate with ftruncate failed");
+  if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 1200))
+    FAIL ("size after increase is incorrect");
+
+  if (truncate (temp_filename, offset + 800) < 0)
+    FAIL ("size reduction with truncate failed");
+  if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 800))
+    FAIL ("size after reduction with truncate incorrect");
+
+  /* The following test covers more than POSIX.  POSIX does not require
+     that truncate() can increase the file size.  But we are testing
+     Unix systems.  */
+  if (truncate (temp_filename, (offset + 1200)) < 0)
+    FAIL ("size increase with truncate failed");
+  if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 1200))
+    FAIL ("size increase with truncate is incorrect");
+
+  return 0;
+}
diff --git a/posix/tst-truncate.c b/posix/tst-truncate.c
index 99bddb3..3166c3b 100644
--- a/posix/tst-truncate.c
+++ b/posix/tst-truncate.c
@@ -17,116 +17,10 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
-#include <error.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/stat.h>
+#include "tst-truncate-common.c"
 
-
-/* Allow testing of the 64-bit versions as well.  */
-#ifndef TRUNCATE
-# define TRUNCATE truncate
-# define FTRUNCATE ftruncate
-#endif
-
-#define STRINGIFY(s) STRINGIFY2 (s)
-#define STRINGIFY2(s) #s
-
-/* Prototype for our test function.  */
-extern void do_prepare (int argc, char *argv[]);
-extern int do_test (int argc, char *argv[]);
-
-/* We have a preparation function.  */
-#define PREPARE do_prepare
-
-/* We might need a bit longer timeout.  */
-#define TIMEOUT 20 /* sec */
-
-/* This defines the `main' function and some more.  */
-#include <test-skeleton.c>
-
-/* These are for the temporary file we generate.  */
-char *name;
-int fd;
-
-void
-do_prepare (int argc, char *argv[])
+static int
+do_test (void)
 {
-   size_t name_len;
-
-#define FNAME FNAME2(TRUNCATE)
-#define FNAME2(s) "/" STRINGIFY(s) "XXXXXX"
-
-   name_len = strlen (test_dir);
-   name = xmalloc (name_len + sizeof (FNAME));
-   mempcpy (mempcpy (name, test_dir, name_len), FNAME, sizeof (FNAME));
-   add_temp_file (name);
-
-   /* Open our test file.   */
-   fd = mkstemp (name);
-   if (fd == -1)
-     error (EXIT_FAILURE, errno, "cannot open test file `%s'", name);
-}
-
-
-int
-do_test (int argc, char *argv[])
-{
-  struct stat st;
-  char buf[1000];
-
-  memset (buf, '\0', sizeof (buf));
-
-  if (write (fd, buf, sizeof (buf)) != sizeof (buf))
-    error (EXIT_FAILURE, errno, "during write");
-
-  if (fstat (fd, &st) < 0 || st.st_size != sizeof (buf))
-    error (EXIT_FAILURE, 0, "initial size wrong");
-
-
-  if (FTRUNCATE (fd, 800) < 0)
-    error (EXIT_FAILURE, errno, "size reduction with %s failed",
-	   STRINGIFY (FTRUNCATE));
-
-  if (fstat (fd, &st) < 0 || st.st_size != 800)
-    error (EXIT_FAILURE, 0, "size after reduction with %s incorrect",
-	   STRINGIFY (FTRUNCATE));
-
-  /* The following test covers more than POSIX.  POSIX does not require
-     that ftruncate() can increase the file size.  But we are testing
-     Unix systems.  */
-  if (FTRUNCATE (fd, 1200) < 0)
-    error (EXIT_FAILURE, errno, "size increase with %s failed",
-	   STRINGIFY (FTRUNCATE));
-
-  if (fstat (fd, &st) < 0 || st.st_size != 1200)
-    error (EXIT_FAILURE, 0, "size after increase with %s incorrect",
-	   STRINGIFY (FTRUNCATE));
-
-
-  if (TRUNCATE (name, 800) < 0)
-    error (EXIT_FAILURE, errno, "size reduction with %s failed",
-	   STRINGIFY (TRUNCATE));
-
-  if (fstat (fd, &st) < 0 || st.st_size != 800)
-    error (EXIT_FAILURE, 0, "size after reduction with %s incorrect",
-	   STRINGIFY (TRUNCATE));
-
-  /* The following test covers more than POSIX.  POSIX does not require
-     that truncate() can increase the file size.  But we are testing
-     Unix systems.  */
-  if (TRUNCATE (name, 1200) < 0)
-    error (EXIT_FAILURE, errno, "size increase with %s failed",
-	   STRINGIFY (TRUNCATE));
-
-  if (fstat (fd, &st) < 0 || st.st_size != 1200)
-    error (EXIT_FAILURE, 0, "size after increase with %s incorrect",
-	   STRINGIFY (TRUNCATE));
-
-
-  close (fd);
-  unlink (name);
-
-  return 0;
+  return do_test_with_offset (0);
 }
diff --git a/posix/tst-truncate64.c b/posix/tst-truncate64.c
index 64eb0a4..08c4942 100644
--- a/posix/tst-truncate64.c
+++ b/posix/tst-truncate64.c
@@ -17,7 +17,22 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define TRUNCATE truncate64
-#define FTRUNCATE ftruncate64
+#define _FILE_OFFSET_BITS 64
+#include "tst-truncate-common.c"
 
-#include "tst-truncate.c"
+static int
+do_test (void)
+{
+  int ret;
+
+  ret = do_test_with_offset (0);
+  if (ret == -1)
+    return -1;
+
+  off_t base_offset = UINT32_MAX + 512LL;
+  ret = do_test_with_offset (base_offset);
+  if (ret == -1)
+    return 1;
+
+  return 0;
+}
diff --git a/sysdeps/unix/sysv/linux/arm/ftruncate64.c b/sysdeps/unix/sysv/linux/arm/ftruncate64.c
deleted file mode 100644
index 0e8d8ba..0000000
--- a/sysdeps/unix/sysv/linux/arm/ftruncate64.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <endian.h>
-#include <unistd.h>
-
-#include <sysdep.h>
-#include <sys/syscall.h>
-
-/* Truncate the file FD refers to to LENGTH bytes.  */
-int
-__ftruncate64 (int fd, off64_t length)
-{
-  unsigned int low = length & 0xffffffff;
-  unsigned int high = length >> 32;
-  int result = INLINE_SYSCALL (ftruncate64, 4, fd, 0,
-			       __LONG_LONG_PAIR (high, low));
-  return result;
-}
-weak_alias (__ftruncate64, ftruncate64)
diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate.c b/sysdeps/unix/sysv/linux/ftruncate.c
similarity index 69%
rename from sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate.c
rename to sysdeps/unix/sysv/linux/ftruncate.c
index e1b500d..5c0cd44 100644
--- a/sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate.c
+++ b/sysdeps/unix/sysv/linux/ftruncate.c
@@ -1,6 +1,5 @@
-/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+/* Copyright (C) 2016 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
-   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
@@ -16,16 +15,21 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
-#include <sys/types.h>
 #include <unistd.h>
+#include <sysdep.h>
+#include <errno.h>
 
-/* Truncate the file FD refers to to LENGTH bytes.  */
+#ifndef __OFF_T_MATCHES_OFF64_T
+/* Truncate the file FD refers to LENGTH bytes.  */
 int
 __ftruncate (int fd, off_t length)
 {
-  return INLINE_SYSCALL (ftruncate64, __ALIGNMENT_COUNT (3, 4), fd,
-                         __ALIGNMENT_ARG
-                         __LONG_LONG_PAIR (length >> 31, length));
+# ifndef __NR_ftruncate
+  return INLINE_SYSCALL_CALL (ftruncate64, fd,
+			      __ALIGNMENT_ARG SYSCALL_LL (length));
+# else
+  return INLINE_SYSCALL_CALL (ftruncate, fd, length);
+# endif
 }
 weak_alias (__ftruncate, ftruncate)
+#endif
diff --git a/sysdeps/unix/sysv/linux/ftruncate64.c b/sysdeps/unix/sysv/linux/ftruncate64.c
index a6bf878..4a00db5 100644
--- a/sysdeps/unix/sysv/linux/ftruncate64.c
+++ b/sysdeps/unix/sysv/linux/ftruncate64.c
@@ -15,22 +15,24 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sys/types.h>
-#include <errno.h>
-#include <endian.h>
 #include <unistd.h>
-
 #include <sysdep.h>
-#include <sys/syscall.h>
+#include <errno.h>
+
+#ifndef __NR_ftruncate64
+# define __NR_ftruncate64 __NR_ftruncate
+#endif
 
 /* Truncate the file referenced by FD to LENGTH bytes.  */
 int
 __ftruncate64 (int fd, off64_t length)
 {
-  unsigned int low = length & 0xffffffff;
-  unsigned int high = length >> 32;
-  int result = INLINE_SYSCALL (ftruncate64, 3, fd,
-			       __LONG_LONG_PAIR (high, low));
-  return result;
+  return INLINE_SYSCALL_CALL (ftruncate64, fd,
+			      __ALIGNMENT_ARG SYSCALL_LL64 (length));
 }
 weak_alias (__ftruncate64, ftruncate64)
+
+#ifdef __OFF_T_MATCHES_OFF64_T
+weak_alias (__ftruncate64, __ftruncate)
+weak_alias (__ftruncate64, ftruncate);
+#endif
diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate64.c
deleted file mode 100644
index 946f05a..0000000
--- a/sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate64.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-/* Truncate the file FD refers to to LENGTH bytes.  */
-int
-__ftruncate64 (int fd, off64_t length)
-{
-  unsigned int low = length & 0xffffffff;
-  unsigned int high = length >> 32;
-  return INLINE_SYSCALL (ftruncate64, __ALIGNMENT_COUNT (3, 4), fd,
-                         __ALIGNMENT_ARG __LONG_LONG_PAIR (high, low));
-}
-weak_alias (__ftruncate64, ftruncate64)
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/ftruncate64.c b/sysdeps/unix/sysv/linux/mips/mips32/ftruncate64.c
deleted file mode 100644
index 0e8d8ba..0000000
--- a/sysdeps/unix/sysv/linux/mips/mips32/ftruncate64.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <endian.h>
-#include <unistd.h>
-
-#include <sysdep.h>
-#include <sys/syscall.h>
-
-/* Truncate the file FD refers to to LENGTH bytes.  */
-int
-__ftruncate64 (int fd, off64_t length)
-{
-  unsigned int low = length & 0xffffffff;
-  unsigned int high = length >> 32;
-  int result = INLINE_SYSCALL (ftruncate64, 4, fd, 0,
-			       __LONG_LONG_PAIR (high, low));
-  return result;
-}
-weak_alias (__ftruncate64, ftruncate64)
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/ftruncate64.c b/sysdeps/unix/sysv/linux/mips/mips64/ftruncate64.c
deleted file mode 100644
index 6e25b02..0000000
--- a/sysdeps/unix/sysv/linux/mips/mips64/ftruncate64.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Empty.  */
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list b/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list
index d2d851e..1e3ae0a 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list
@@ -1,6 +1,5 @@
 # File name	Caller	Syscall name	Args	Strong name	Weak names
 
-ftruncate	-	ftruncate	i:ii	__ftruncate	ftruncate ftruncate64 __ftruncate64
 truncate	-	truncate	i:si	truncate	truncate64
 
 # Semaphore and shm system calls.  msgctl, shmctl, and semctl have C
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c
deleted file mode 100644
index 9eee1d7..0000000
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include <sysdep.h>
-#include <sys/syscall.h>
-
-/* Truncate the file referenced by FD to LENGTH bytes.  */
-int
-__ftruncate64 (int fd, off64_t length)
-{
-  /* On PPC32 64bit values are aligned in odd/even register pairs.  */
-  int result = INLINE_SYSCALL (ftruncate64, 4, fd, 0,
-			       (long) (length >> 32),
-			       (long) length);
-
-  return result;
-}
-weak_alias (__ftruncate64, ftruncate64)
diff --git a/sysdeps/unix/sysv/linux/wordsize-64/ftruncate64.c b/sysdeps/unix/sysv/linux/wordsize-64/ftruncate64.c
deleted file mode 100644
index 673a8b5..0000000
--- a/sysdeps/unix/sysv/linux/wordsize-64/ftruncate64.c
+++ /dev/null
@@ -1 +0,0 @@
-/* ftruncate64 is the same as ftruncate. */
diff --git a/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list b/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list
index 3f3569f..8c20ef9 100644
--- a/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list
@@ -3,7 +3,6 @@
 fstatfs		-	fstatfs		i:ip	__fstatfs	fstatfs fstatfs64 __fstatfs64
 statfs		-	statfs		i:sp	__statfs	statfs statfs64
 mmap		-	mmap		b:aniiii __mmap		mmap __mmap64 mmap64
-ftruncate	-	ftruncate	i:ii	__ftruncate	ftruncate ftruncate64 __ftruncate64
 truncate	-	truncate	i:si	truncate	truncate64
 getrlimit	-	getrlimit	i:ip	__getrlimit	getrlimit getrlimit64 __getrlimit64
 setrlimit	-	setrlimit	i:ip	__setrlimit	setrlimit setrlimit64

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   36 ++++++
 posix/tst-truncate-common.c                        |   88 +++++++++++++++
 posix/tst-truncate.c                               |  114 +-------------------
 posix/tst-truncate64.c                             |   21 +++-
 sysdeps/unix/sysv/linux/arm/ftruncate64.c          |   36 ------
 sysdeps/unix/sysv/linux/arm/truncate64.c           |   35 ------
 sysdeps/unix/sysv/linux/ftruncate.c                |   35 ++++++
 sysdeps/unix/sysv/linux/ftruncate64.c              |   22 ++--
 .../sysv/linux/generic/wordsize-32/ftruncate.c     |   31 ------
 .../sysv/linux/generic/wordsize-32/ftruncate64.c   |   32 ------
 .../unix/sysv/linux/generic/wordsize-32/truncate.c |   31 ------
 .../sysv/linux/generic/wordsize-32/truncate64.c    |   31 ------
 sysdeps/unix/sysv/linux/mips/mips32/ftruncate64.c  |   36 ------
 sysdeps/unix/sysv/linux/mips/mips32/truncate64.c   |   35 ------
 sysdeps/unix/sysv/linux/mips/mips64/ftruncate64.c  |    1 -
 sysdeps/unix/sysv/linux/mips/mips64/syscalls.list  |    3 -
 sysdeps/unix/sysv/linux/mips/mips64/truncate64.c   |    1 -
 .../sysv/linux/powerpc/powerpc32/ftruncate64.c     |   36 ------
 .../unix/sysv/linux/powerpc/powerpc32/truncate64.c |   34 ------
 sysdeps/unix/sysv/linux/truncate.c                 |   35 ++++++
 sysdeps/unix/sysv/linux/truncate64.c               |   26 +++--
 sysdeps/unix/sysv/linux/wordsize-64/ftruncate64.c  |    1 -
 sysdeps/unix/sysv/linux/wordsize-64/syscalls.list  |    2 -
 sysdeps/unix/sysv/linux/wordsize-64/truncate64.c   |    1 -
 24 files changed, 242 insertions(+), 481 deletions(-)
 create mode 100644 posix/tst-truncate-common.c
 delete mode 100644 sysdeps/unix/sysv/linux/arm/ftruncate64.c
 delete mode 100644 sysdeps/unix/sysv/linux/arm/truncate64.c
 create mode 100644 sysdeps/unix/sysv/linux/ftruncate.c
 delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate.c
 delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate64.c
 delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/truncate.c
 delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/truncate64.c
 delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/ftruncate64.c
 delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/truncate64.c
 delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/ftruncate64.c
 delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/truncate64.c
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c
 create mode 100644 sysdeps/unix/sysv/linux/truncate.c
 delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/ftruncate64.c
 delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/truncate64.c


hooks/post-receive
-- 
GNU C Library master sources


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