This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[COMMITTED PATCH] Clean up POSIX.1 implementation of truncate.
- From: Roland McGrath <roland at hack dot frob dot com>
- To: "GNU C. Library" <libc-alpha at sourceware dot org>
- Date: Mon, 6 May 2013 14:57:03 -0700 (PDT)
- Subject: [COMMITTED PATCH] Clean up POSIX.1 implementation of truncate.
2013-05-06 Roland McGrath <roland@hack.frob.com>
* 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.
--- 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)