diff options
author | Ulrich Drepper <drepper@redhat.com> | 2007-07-28 18:13:45 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2007-07-28 18:13:45 +0000 |
commit | a95a608f1b07a5c6e562294c570e89645d9b6176 (patch) | |
tree | b093b4ffc94db6d7bfa2fc62afe47cae946e6e2c /sysdeps/unix/sysv/linux/posix_fallocate.c | |
parent | 429849d03dc4d390653f2d0a57eeed2cc359dbec (diff) | |
download | glibc-a95a608f1b07a5c6e562294c570e89645d9b6176.tar.gz |
* sysdeps/posix/posix_fallocate64.c: Undefine
__posix_fallocate64_l64 before alias handling.
* sysdeps/unix/sysv/linux/posix_fallocate.c: New file.
* sysdeps/unix/sysv/linux/posix_fallocate64.c: New file.
* sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c: New file.
* sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c: New file.
* io/tst-posix_fallocate.c: Include <fcntl.h>.
2007-07-23 Jakub Jelinek <jakub@redhat.com>
* locale/programs/ld-collate.c (atwc): New variable.
(add_to_tablewc): New toplevel function, moved from collate_output.
(collate_output): Remove add_to_tablewc nested function.
* iconv/iconvconfig.c (hash_table, hash_size): New toplevel vars.
(name_insert): New function.
(write_output): Remove hash_table and hash_size vars and name_insert
nested function.
Diffstat (limited to 'sysdeps/unix/sysv/linux/posix_fallocate.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/posix_fallocate.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/posix_fallocate.c b/sysdeps/unix/sysv/linux/posix_fallocate.c new file mode 100644 index 0000000000..9cfade60ca --- /dev/null +++ b/sysdeps/unix/sysv/linux/posix_fallocate.c @@ -0,0 +1,60 @@ +/* Copyright (C) 2007 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <fcntl.h> +#include <kernel-features.h> +#include <sysdep.h> + +#define posix_fallocate static internal_fallocate +#include <sysdeps/posix/posix_fallocate.c> +#undef posix_fallocate + +#if !defined __ASSUME_FALLOCATE && defined __NR_fallocate +int __have_fallocate attribute_hidden; +#endif + + +/* Reserve storage for the data of the file associated with FD. */ +int +posix_fallocate (int fd, __off_t offset, __off_t len) +{ +#ifdef __NR_fallocate +# ifndef __ASSUME_FALLOCATE + if (__builtin_expect (__have_fallocate >= 0, 1)) +# endif + { + INTERNAL_SYSCALL_DECL (err); + int res = INTERNAL_SYSCALL (fallocate, err, 4, fd, 0, + __LONG_LONG_PAIR (offset >> 31, offset), + __LONG_LONG_PAIR (len >> 31, len)); + + if (! INTERNAL_SYSCALL_ERROR_P (res, err)) + return 0; + +# ifndef __ASSUME_FALLOCATE + if (__builtin_expect (INTERNAL_SYSCALL_ERRNO (res, err) == ENOSYS, 0)) + __have_fallocate = -1; + else +# endif + if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) + return INTERNAL_SYSCALL_ERRNO (res, err); + } +#endif + + return internal_fallocate (fd, offset, len); +} |