diff --git a/ChangeLog b/ChangeLog index 50d9e9c4e3..9d2a25d582 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2013-05-06 Roland McGrath + + * sysdeps/posix/truncate.c (__truncate): Renamed from truncate. + Call __ names for open, ftruncate, and close. + For LENGTH==0 case, just use O_TRUNC rather than calling ftruncate. + (truncate): Define as weak alias. + 2013-05-06 Joseph Myers * math/gen-libm-test.pl (parse_args): Initialize x before each diff --git a/sysdeps/posix/truncate.c b/sysdeps/posix/truncate.c index ae29be8106..7ef1400eb5 100644 --- a/sysdeps/posix/truncate.c +++ b/sysdeps/posix/truncate.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1995-2013 Free Software Foundation, Inc. +/* Truncate a file given by name. Generic POSIX.1 version. + Copyright (C) 1995-2013 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 @@ -22,20 +23,22 @@ /* Truncate PATH to LENGTH bytes. */ int -truncate (path, length) - const char *path; - off_t length; +__truncate (const char *path, off_t length) { int fd, ret, save; - fd = open (path, O_WRONLY); + fd = __open (path, O_WRONLY | (length == 0 ? O_TRUNC : 0)); if (fd < 0) return -1; - ret = ftruncate (fd, length); + if (length == 0) + ret = 0; + else + ret = __ftruncate (fd, length); save = errno; - (void) close (fd); + (void) __close (fd); if (ret < 0) __set_errno (save); return ret; } +weak_alias (__truncate, truncate)