glibc/sysdeps/posix/posix_fallocate64.c

143 lines
4.0 KiB
C
Raw Normal View History

/* Copyright (C) 2000-2015 Free Software Foundation, Inc.
update. 2000-04-14 Ulrich Drepper <drepper@redhat.com> * include/sys/statfs.h: Add prototypes for __statfs64 and __fstatfs64. * sysdeps/generic/fstatfs64.c (__fstatfs64): Renamed to fstatfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/fstatfs64.c: Likewise. * sysdeps/generic/statfs64.c (__statfs64): Renamed to statfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/statfs64.c: Likewise. * io/Makefile (routines): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/Versions [libc] (GLIBC_2.2): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/fcntl.h: Declare posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * sysdeps/generic/fadvise.c: New file. * sysdeps/generic/fadvise64.c: New file. * sysdeps/generic/fallocate.c: New file. * sysdeps/generic/fallocate64.c: New file. * sysdeps/posix/fallocate.c: New file. * sysdeps/posix/fallocate64.c: New file. * sysdeps/generic/bits/fcntl.h: Define POSIX_FADV_NORMAL, POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED, POSIX_FADV_DONTNEED, and POSIX_FADV_NOREUSE. * sysdeps/mach/hurd/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. * sysdeps/generic/madvise.c (__madvise): Renamed to posix_madvise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise.
2000-04-14 07:51:02 +00:00
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.
update. 2000-04-14 Ulrich Drepper <drepper@redhat.com> * include/sys/statfs.h: Add prototypes for __statfs64 and __fstatfs64. * sysdeps/generic/fstatfs64.c (__fstatfs64): Renamed to fstatfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/fstatfs64.c: Likewise. * sysdeps/generic/statfs64.c (__statfs64): Renamed to statfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/statfs64.c: Likewise. * io/Makefile (routines): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/Versions [libc] (GLIBC_2.2): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/fcntl.h: Declare posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * sysdeps/generic/fadvise.c: New file. * sysdeps/generic/fadvise64.c: New file. * sysdeps/generic/fallocate.c: New file. * sysdeps/generic/fallocate64.c: New file. * sysdeps/posix/fallocate.c: New file. * sysdeps/posix/fallocate64.c: New file. * sysdeps/generic/bits/fcntl.h: Define POSIX_FADV_NORMAL, POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED, POSIX_FADV_DONTNEED, and POSIX_FADV_NOREUSE. * sysdeps/mach/hurd/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. * sysdeps/generic/madvise.c (__madvise): Renamed to posix_madvise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise.
2000-04-14 07:51:02 +00:00
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.
update. 2000-04-14 Ulrich Drepper <drepper@redhat.com> * include/sys/statfs.h: Add prototypes for __statfs64 and __fstatfs64. * sysdeps/generic/fstatfs64.c (__fstatfs64): Renamed to fstatfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/fstatfs64.c: Likewise. * sysdeps/generic/statfs64.c (__statfs64): Renamed to statfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/statfs64.c: Likewise. * io/Makefile (routines): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/Versions [libc] (GLIBC_2.2): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/fcntl.h: Declare posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * sysdeps/generic/fadvise.c: New file. * sysdeps/generic/fadvise64.c: New file. * sysdeps/generic/fallocate.c: New file. * sysdeps/generic/fallocate64.c: New file. * sysdeps/posix/fallocate.c: New file. * sysdeps/posix/fallocate64.c: New file. * sysdeps/generic/bits/fcntl.h: Define POSIX_FADV_NORMAL, POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED, POSIX_FADV_DONTNEED, and POSIX_FADV_NOREUSE. * sysdeps/mach/hurd/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. * sysdeps/generic/madvise.c (__madvise): Renamed to posix_madvise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise.
2000-04-14 07:51:02 +00:00
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/>. */
update. 2000-04-14 Ulrich Drepper <drepper@redhat.com> * include/sys/statfs.h: Add prototypes for __statfs64 and __fstatfs64. * sysdeps/generic/fstatfs64.c (__fstatfs64): Renamed to fstatfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/fstatfs64.c: Likewise. * sysdeps/generic/statfs64.c (__statfs64): Renamed to statfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/statfs64.c: Likewise. * io/Makefile (routines): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/Versions [libc] (GLIBC_2.2): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/fcntl.h: Declare posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * sysdeps/generic/fadvise.c: New file. * sysdeps/generic/fadvise64.c: New file. * sysdeps/generic/fallocate.c: New file. * sysdeps/generic/fallocate64.c: New file. * sysdeps/posix/fallocate.c: New file. * sysdeps/posix/fallocate64.c: New file. * sysdeps/generic/bits/fcntl.h: Define POSIX_FADV_NORMAL, POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED, POSIX_FADV_DONTNEED, and POSIX_FADV_NOREUSE. * sysdeps/mach/hurd/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. * sysdeps/generic/madvise.c (__madvise): Renamed to posix_madvise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise.
2000-04-14 07:51:02 +00:00
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdint.h>
#include <sys/fcntl.h>
update. 2000-04-14 Ulrich Drepper <drepper@redhat.com> * include/sys/statfs.h: Add prototypes for __statfs64 and __fstatfs64. * sysdeps/generic/fstatfs64.c (__fstatfs64): Renamed to fstatfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/fstatfs64.c: Likewise. * sysdeps/generic/statfs64.c (__statfs64): Renamed to statfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/statfs64.c: Likewise. * io/Makefile (routines): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/Versions [libc] (GLIBC_2.2): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/fcntl.h: Declare posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * sysdeps/generic/fadvise.c: New file. * sysdeps/generic/fadvise64.c: New file. * sysdeps/generic/fallocate.c: New file. * sysdeps/generic/fallocate64.c: New file. * sysdeps/posix/fallocate.c: New file. * sysdeps/posix/fallocate64.c: New file. * sysdeps/generic/bits/fcntl.h: Define POSIX_FADV_NORMAL, POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED, POSIX_FADV_DONTNEED, and POSIX_FADV_NOREUSE. * sysdeps/mach/hurd/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. * sysdeps/generic/madvise.c (__madvise): Renamed to posix_madvise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise.
2000-04-14 07:51:02 +00:00
#include <sys/stat.h>
#include <sys/statfs.h>
/* Reserve storage for the data of the file associated with FD. This
emulation is far from perfect, but the kernel cannot do not much
better for network file systems, either. */
update. 2000-04-14 Ulrich Drepper <drepper@redhat.com> * include/sys/statfs.h: Add prototypes for __statfs64 and __fstatfs64. * sysdeps/generic/fstatfs64.c (__fstatfs64): Renamed to fstatfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/fstatfs64.c: Likewise. * sysdeps/generic/statfs64.c (__statfs64): Renamed to statfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/statfs64.c: Likewise. * io/Makefile (routines): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/Versions [libc] (GLIBC_2.2): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/fcntl.h: Declare posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * sysdeps/generic/fadvise.c: New file. * sysdeps/generic/fadvise64.c: New file. * sysdeps/generic/fallocate.c: New file. * sysdeps/generic/fallocate64.c: New file. * sysdeps/posix/fallocate.c: New file. * sysdeps/posix/fallocate64.c: New file. * sysdeps/generic/bits/fcntl.h: Define POSIX_FADV_NORMAL, POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED, POSIX_FADV_DONTNEED, and POSIX_FADV_NOREUSE. * sysdeps/mach/hurd/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. * sysdeps/generic/madvise.c (__madvise): Renamed to posix_madvise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise.
2000-04-14 07:51:02 +00:00
int
__posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len)
update. 2000-04-14 Ulrich Drepper <drepper@redhat.com> * include/sys/statfs.h: Add prototypes for __statfs64 and __fstatfs64. * sysdeps/generic/fstatfs64.c (__fstatfs64): Renamed to fstatfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/fstatfs64.c: Likewise. * sysdeps/generic/statfs64.c (__statfs64): Renamed to statfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/statfs64.c: Likewise. * io/Makefile (routines): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/Versions [libc] (GLIBC_2.2): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/fcntl.h: Declare posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * sysdeps/generic/fadvise.c: New file. * sysdeps/generic/fadvise64.c: New file. * sysdeps/generic/fallocate.c: New file. * sysdeps/generic/fallocate64.c: New file. * sysdeps/posix/fallocate.c: New file. * sysdeps/posix/fallocate64.c: New file. * sysdeps/generic/bits/fcntl.h: Define POSIX_FADV_NORMAL, POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED, POSIX_FADV_DONTNEED, and POSIX_FADV_NOREUSE. * sysdeps/mach/hurd/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. * sysdeps/generic/madvise.c (__madvise): Renamed to posix_madvise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise.
2000-04-14 07:51:02 +00:00
{
struct stat64 st;
if (offset < 0 || len < 0)
update. 2000-04-14 Ulrich Drepper <drepper@redhat.com> * include/sys/statfs.h: Add prototypes for __statfs64 and __fstatfs64. * sysdeps/generic/fstatfs64.c (__fstatfs64): Renamed to fstatfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/fstatfs64.c: Likewise. * sysdeps/generic/statfs64.c (__statfs64): Renamed to statfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/statfs64.c: Likewise. * io/Makefile (routines): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/Versions [libc] (GLIBC_2.2): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/fcntl.h: Declare posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * sysdeps/generic/fadvise.c: New file. * sysdeps/generic/fadvise64.c: New file. * sysdeps/generic/fallocate.c: New file. * sysdeps/generic/fallocate64.c: New file. * sysdeps/posix/fallocate.c: New file. * sysdeps/posix/fallocate64.c: New file. * sysdeps/generic/bits/fcntl.h: Define POSIX_FADV_NORMAL, POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED, POSIX_FADV_DONTNEED, and POSIX_FADV_NOREUSE. * sysdeps/mach/hurd/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. * sysdeps/generic/madvise.c (__madvise): Renamed to posix_madvise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise.
2000-04-14 07:51:02 +00:00
return EINVAL;
/* Perform overflow check. The outer cast relies on a GCC
extension. */
if ((__off64_t) ((uint64_t) offset + (uint64_t) len) < 0)
update. 2000-04-14 Ulrich Drepper <drepper@redhat.com> * include/sys/statfs.h: Add prototypes for __statfs64 and __fstatfs64. * sysdeps/generic/fstatfs64.c (__fstatfs64): Renamed to fstatfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/fstatfs64.c: Likewise. * sysdeps/generic/statfs64.c (__statfs64): Renamed to statfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/statfs64.c: Likewise. * io/Makefile (routines): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/Versions [libc] (GLIBC_2.2): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/fcntl.h: Declare posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * sysdeps/generic/fadvise.c: New file. * sysdeps/generic/fadvise64.c: New file. * sysdeps/generic/fallocate.c: New file. * sysdeps/generic/fallocate64.c: New file. * sysdeps/posix/fallocate.c: New file. * sysdeps/posix/fallocate64.c: New file. * sysdeps/generic/bits/fcntl.h: Define POSIX_FADV_NORMAL, POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED, POSIX_FADV_DONTNEED, and POSIX_FADV_NOREUSE. * sysdeps/mach/hurd/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. * sysdeps/generic/madvise.c (__madvise): Renamed to posix_madvise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise.
2000-04-14 07:51:02 +00:00
return EFBIG;
/* pwrite64 below will not do the right thing in O_APPEND mode. */
{
int flags = __fcntl (fd, F_GETFL, 0);
if (flags < 0 || (flags & O_APPEND) != 0)
return EBADF;
}
/* We have to make sure that this is really a regular file. */
update. 2000-04-14 Ulrich Drepper <drepper@redhat.com> * include/sys/statfs.h: Add prototypes for __statfs64 and __fstatfs64. * sysdeps/generic/fstatfs64.c (__fstatfs64): Renamed to fstatfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/fstatfs64.c: Likewise. * sysdeps/generic/statfs64.c (__statfs64): Renamed to statfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/statfs64.c: Likewise. * io/Makefile (routines): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/Versions [libc] (GLIBC_2.2): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/fcntl.h: Declare posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * sysdeps/generic/fadvise.c: New file. * sysdeps/generic/fadvise64.c: New file. * sysdeps/generic/fallocate.c: New file. * sysdeps/generic/fallocate64.c: New file. * sysdeps/posix/fallocate.c: New file. * sysdeps/posix/fallocate64.c: New file. * sysdeps/generic/bits/fcntl.h: Define POSIX_FADV_NORMAL, POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED, POSIX_FADV_DONTNEED, and POSIX_FADV_NOREUSE. * sysdeps/mach/hurd/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. * sysdeps/generic/madvise.c (__madvise): Renamed to posix_madvise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise.
2000-04-14 07:51:02 +00:00
if (__fxstat64 (_STAT_VER, fd, &st) != 0)
return EBADF;
if (S_ISFIFO (st.st_mode))
return ESPIPE;
if (! S_ISREG (st.st_mode))
return ENODEV;
if (len == 0)
{
/* This is racy, but there is no good way to satisfy a
zero-length allocation request. */
if (st.st_size < offset)
{
int ret = __ftruncate64 (fd, offset);
if (ret != 0)
ret = errno;
return ret;
}
return 0;
}
/* Minimize data transfer for network file systems, by issuing
single-byte write requests spaced by the file system block size.
(Most local file systems have fallocate support, so this fallback
code is not used there.) */
unsigned increment;
{
struct statfs64 f;
if (__fstatfs64 (fd, &f) != 0)
return errno;
if (f.f_bsize == 0)
increment = 512;
else if (f.f_bsize < 4096)
increment = f.f_bsize;
else
/* NFS clients do not propagate the block size of the underlying
storage and may report a much larger value which would still
leave holes after the loop below, so we cap the increment at
4096. */
increment = 4096;
}
/* Write a null byte to every block. This is racy; we currently
lack a better option. Compare-and-swap against a file mapping
might address local races, but requires interposition of a signal
handler to catch SIGBUS. */
for (offset += (len - 1) % increment; len > 0; offset += increment)
update. 2000-04-14 Ulrich Drepper <drepper@redhat.com> * include/sys/statfs.h: Add prototypes for __statfs64 and __fstatfs64. * sysdeps/generic/fstatfs64.c (__fstatfs64): Renamed to fstatfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/fstatfs64.c: Likewise. * sysdeps/generic/statfs64.c (__statfs64): Renamed to statfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/statfs64.c: Likewise. * io/Makefile (routines): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/Versions [libc] (GLIBC_2.2): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/fcntl.h: Declare posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * sysdeps/generic/fadvise.c: New file. * sysdeps/generic/fadvise64.c: New file. * sysdeps/generic/fallocate.c: New file. * sysdeps/generic/fallocate64.c: New file. * sysdeps/posix/fallocate.c: New file. * sysdeps/posix/fallocate64.c: New file. * sysdeps/generic/bits/fcntl.h: Define POSIX_FADV_NORMAL, POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED, POSIX_FADV_DONTNEED, and POSIX_FADV_NOREUSE. * sysdeps/mach/hurd/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. * sysdeps/generic/madvise.c (__madvise): Renamed to posix_madvise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise.
2000-04-14 07:51:02 +00:00
{
len -= increment;
if (offset < st.st_size)
{
unsigned char c;
ssize_t rsize = __libc_pread64 (fd, &c, 1, offset);
if (rsize < 0)
return errno;
/* If there is a non-zero byte, the block must have been
allocated already. */
else if (rsize == 1 && c != 0)
continue;
}
if (__libc_pwrite64 (fd, "", 1, offset) != 1)
update. 2000-04-14 Ulrich Drepper <drepper@redhat.com> * include/sys/statfs.h: Add prototypes for __statfs64 and __fstatfs64. * sysdeps/generic/fstatfs64.c (__fstatfs64): Renamed to fstatfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/fstatfs64.c: Likewise. * sysdeps/generic/statfs64.c (__statfs64): Renamed to statfs64. Make old name weak alias. * sysdeps/unix/sysv/linux/statfs64.c: Likewise. * io/Makefile (routines): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/Versions [libc] (GLIBC_2.2): Add posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * io/fcntl.h: Declare posix_fadvise, posix_fadvise64, posix_fallocate, and posix_fallocate64. * sysdeps/generic/fadvise.c: New file. * sysdeps/generic/fadvise64.c: New file. * sysdeps/generic/fallocate.c: New file. * sysdeps/generic/fallocate64.c: New file. * sysdeps/posix/fallocate.c: New file. * sysdeps/posix/fallocate64.c: New file. * sysdeps/generic/bits/fcntl.h: Define POSIX_FADV_NORMAL, POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED, POSIX_FADV_DONTNEED, and POSIX_FADV_NOREUSE. * sysdeps/mach/hurd/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. * sysdeps/generic/madvise.c (__madvise): Renamed to posix_madvise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise.
2000-04-14 07:51:02 +00:00
return errno;
}
return 0;
}
#undef __posix_fallocate64_l64
#include <shlib-compat.h>
#include <bits/wordsize.h>
#if __WORDSIZE == 32 && SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3)
int
Update. 2004-03-10 Ulrich Drepper <drepper@redhat.com> * include/libc-symbols.h: Define attribute_compat_text_section and attribute_compat_data_section. * io/ftw.c: Mark compat code with attribute_compat_text_section. * libio/iofopncook.c: Likewise. * libio/oldfileops.c: Likewise. * libio/oldiofclose.c: Likewise. * libio/oldiofdopen.c: Likewise. * libio/oldiofgetpos.c: Likewise. * libio/oldiofgetpos64.c: Likewise. * libio/oldiofopen.c: Likewise. * libio/oldiofsetpos.c: Likewise. * libio/oldiofsetpos64.c: Likewise. * libio/oldiopopen.c: Likewise. * libio/oldpclose.c: Likewise. * libio/oldtmpfile.c: Likewise. * nptl/forward.c: Likewise. * nss/getXXbyYY_r.c: Likewise. * nss/getXXent_r.c: Likewise. * posix/tst-vfork1.c: Likewise. * stdlib/canonicalize.c: Likewise. * stdlib/old_atexit.c: Likewise. * sysdeps/generic/glob.c: Likewise. * sysdeps/posix/posix_fallocate64.c: Likewise. * sysdeps/unix/sysv/linux/i386/alphasort64.c: Likewise. * sysdeps/unix/sysv/linux/i386/chown.c: Likewise. * sysdeps/unix/sysv/linux/i386/glob64.c: Likewise. * sysdeps/unix/sysv/linux/i386/msgctl.c: Likewise. * sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c: Likewise. * sysdeps/unix/sysv/linux/i386/posix_fadvise64.S: Likewise. * sysdeps/unix/sysv/linux/i386/readdir64.c: Likewise. * sysdeps/unix/sysv/linux/i386/readdir64_r.c: Likewise. * sysdeps/unix/sysv/linux/i386/scandir64.c: Likewise. * sysdeps/unix/sysv/linux/i386/semctl.c: Likewise. * sysdeps/unix/sysv/linux/i386/shmctl.c: Likewise. * sysdeps/unix/sysv/linux/i386/versionsort64.c: Likewise. * sysdeps/unix/sysv/linux/i386/syscalls.list: vm86@@GLIBC_2.3.4 should be the default symbol. Having none misses the point.
2004-03-10 09:29:17 +00:00
attribute_compat_text_section
__posix_fallocate64_l32 (int fd, off64_t offset, size_t len)
{
return __posix_fallocate64_l64 (fd, offset, len);
}
versioned_symbol (libc, __posix_fallocate64_l64, posix_fallocate64,
GLIBC_2_3_3);
compat_symbol (libc, __posix_fallocate64_l32, posix_fallocate64, GLIBC_2_2);
#else
strong_alias (__posix_fallocate64_l64, posix_fallocate64);
#endif