diff options
Diffstat (limited to 'libglusterfs/src/syscall.c')
| -rw-r--r-- | libglusterfs/src/syscall.c | 189 |
1 files changed, 120 insertions, 69 deletions
diff --git a/libglusterfs/src/syscall.c b/libglusterfs/src/syscall.c index e0d0b13fa..e8954cc23 100644 --- a/libglusterfs/src/syscall.c +++ b/libglusterfs/src/syscall.c @@ -1,20 +1,11 @@ /* - Copyright (c) 2009 Gluster, Inc. <http://www.gluster.com> + Copyright (c) 2008-2012 Red Hat, Inc. <http://www.redhat.com> This file is part of GlusterFS. - GlusterFS is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - GlusterFS 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see - <http://www.gnu.org/licenses/>. + This file is licensed to you under your choice of the GNU Lesser + General Public License, version 3 or any later version (LGPLv3 or + later), or the GNU General Public License, version 2 (GPLv2), in all + cases as published by the Free Software Foundation. */ #ifndef _CONFIG_H @@ -64,14 +55,14 @@ sys_readdir (DIR *dir) } -ssize_t +ssize_t sys_readlink (const char *path, char *buf, size_t bufsiz) { return readlink (path, buf, bufsiz); } -int +int sys_closedir (DIR *dir) { return closedir (dir); @@ -85,28 +76,31 @@ sys_mknod (const char *pathname, mode_t mode, dev_t dev) } -int +int sys_mkdir (const char *pathname, mode_t mode) { return mkdir (pathname, mode); } -int +int sys_unlink (const char *pathname) { +#ifdef GF_SOLARIS_HOST_OS + return solaris_unlink (pathname); +#endif return unlink (pathname); } -int +int sys_rmdir (const char *pathname) { return rmdir (pathname); } -int +int sys_symlink (const char *oldpath, const char *newpath) { return symlink (oldpath, newpath); @@ -116,11 +110,14 @@ sys_symlink (const char *oldpath, const char *newpath) int sys_rename (const char *oldpath, const char *newpath) { +#ifdef GF_SOLARIS_HOST_OS + return solaris_rename (oldpath, newpath); +#endif return rename (oldpath, newpath); } -int +int sys_link (const char *oldpath, const char *newpath) { return link (oldpath, newpath); @@ -141,7 +138,7 @@ sys_fchmod (int fd, mode_t mode) } -int +int sys_chown (const char *path, uid_t owner, gid_t group) { return chown (path, owner, group); @@ -162,21 +159,21 @@ sys_lchown (const char *path, uid_t owner, gid_t group) } -int +int sys_truncate (const char *path, off_t length) { return truncate (path, length); } -int +int sys_ftruncate (int fd, off_t length) { return ftruncate (fd, length); } -int +int sys_utimes (const char *filename, const struct timeval times[2]) { return utimes (filename, times); @@ -211,7 +208,7 @@ sys_read (int fd, void *buf, size_t count) } -ssize_t +ssize_t sys_write (int fd, const void *buf, size_t count) { return write (fd, buf, count); @@ -232,21 +229,26 @@ sys_statvfs (const char *path, struct statvfs *buf) } -int +int sys_close (int fd) { - return close (fd); + int ret = -1; + + if (fd >= 0) + ret = close (fd); + + return ret; } -int +int sys_fsync (int fd) { return fsync (fd); } -int +int sys_fdatasync (int fd) { #ifdef HAVE_FDATASYNC @@ -257,44 +259,44 @@ sys_fdatasync (int fd) } -int -sys_lsetxattr (const char *path, const char *name, const void *value, - size_t size, int flags) +int +sys_lsetxattr (const char *path, const char *name, const void *value, + size_t size, int flags) { - -#ifdef GF_LINUX_HOST_OS + +#if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__) return lsetxattr (path, name, value, size, flags); #endif #ifdef GF_BSD_HOST_OS - return extattr_set_link (path, EXTATTR_NAMESPACE_USER, + return extattr_set_link (path, EXTATTR_NAMESPACE_USER, name, value, size); #endif - + #ifdef GF_SOLARIS_HOST_OS return solaris_setxattr (path, name, value, size, flags); #endif #ifdef GF_DARWIN_HOST_OS - return setxattr (path, name, value, size, 0, + return setxattr (path, name, value, size, 0, flags|XATTR_NOFOLLOW); #endif - + } ssize_t -sys_llistxattr (const char *path, char *list, size_t size) +sys_llistxattr (const char *path, char *list, size_t size) { - -#ifdef GF_LINUX_HOST_OS + +#if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__) return llistxattr (path, list, size); #endif #ifdef GF_BSD_HOST_OS return extattr_list_link (path, EXTATTR_NAMESPACE_USER, list, size); #endif - + #ifdef GF_SOLARIS_HOST_OS return solaris_listxattr (path, list, size); #endif @@ -302,23 +304,23 @@ sys_llistxattr (const char *path, char *list, size_t size) #ifdef GF_DARWIN_HOST_OS return listxattr (path, list, size, XATTR_NOFOLLOW); #endif - + } ssize_t -sys_lgetxattr (const char *path, const char *name, void *value, size_t size) +sys_lgetxattr (const char *path, const char *name, void *value, size_t size) { - -#ifdef GF_LINUX_HOST_OS + +#if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__) return lgetxattr (path, name, value, size); #endif #ifdef GF_BSD_HOST_OS - return extattr_get_link (path, EXTATTR_NAMESPACE_USER, name, value, + return extattr_get_link (path, EXTATTR_NAMESPACE_USER, name, value, size); #endif - + #ifdef GF_SOLARIS_HOST_OS return solaris_getxattr (path, name, value, size); #endif @@ -330,19 +332,19 @@ sys_lgetxattr (const char *path, const char *name, void *value, size_t size) } -ssize_t -sys_fgetxattr (int filedes, const char *name, void *value, size_t size) +ssize_t +sys_fgetxattr (int filedes, const char *name, void *value, size_t size) { - -#ifdef GF_LINUX_HOST_OS + +#if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__) return fgetxattr (filedes, name, value, size); #endif #ifdef GF_BSD_HOST_OS - return extattr_get_fd (filedes, EXTATTR_NAMESPACE_USER, name, + return extattr_get_fd (filedes, EXTATTR_NAMESPACE_USER, name, value, size); #endif - + #ifdef GF_SOLARIS_HOST_OS return solaris_fgetxattr (filedes, name, value, size); #endif @@ -354,20 +356,46 @@ sys_fgetxattr (int filedes, const char *name, void *value, size_t size) } -int -sys_fsetxattr (int filedes, const char *name, const void *value, +int +sys_fremovexattr (int filedes, const char *name) +{ + +#if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__) + return fremovexattr (filedes, name); +#endif + + errno = ENOSYS; + return -1; +#if 0 /* TODO: to port to other OSes, fill in each of below */ +#ifdef GF_BSD_HOST_OS + return extattr_remove_fd (filedes, EXTATTR_NAMESPACE_USER, name); +#endif + +#ifdef GF_SOLARIS_HOST_OS + return solaris_fremovexattr (filedes, name); +#endif + +#ifdef GF_DARWIN_HOST_OS + return fremovexattr (filedes, name, 0); +#endif +#endif +} + + +int +sys_fsetxattr (int filedes, const char *name, const void *value, size_t size, int flags) { -#ifdef GF_LINUX_HOST_OS +#if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__) return fsetxattr (filedes, name, value, size, flags); #endif #ifdef GF_BSD_HOST_OS - return extattr_set_fd (filedes, EXTATTR_NAMESPACE_USER, name, + return extattr_set_fd (filedes, EXTATTR_NAMESPACE_USER, name, value, size); #endif - + #ifdef GF_SOLARIS_HOST_OS return solaris_fsetxattr (filedes, name, value, size, flags); #endif @@ -379,11 +407,11 @@ sys_fsetxattr (int filedes, const char *name, const void *value, } -ssize_t -sys_flistxattr (int filedes, char *list, size_t size) +ssize_t +sys_flistxattr (int filedes, char *list, size_t size) { - -#ifdef GF_LINUX_HOST_OS + +#if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__) return flistxattr (filedes, list, size); #endif @@ -402,18 +430,18 @@ sys_flistxattr (int filedes, char *list, size_t size) } -int +int sys_lremovexattr (const char *path, const char *name) { - -#ifdef GF_LINUX_HOST_OS + +#if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__) return lremovexattr (path, name); #endif #ifdef GF_BSD_HOST_OS return extattr_delete_link (path, EXTATTR_NAMESPACE_USER, name); #endif - + #ifdef GF_SOLARIS_HOST_OS return solaris_removexattr (path, name); #endif @@ -425,8 +453,31 @@ sys_lremovexattr (const char *path, const char *name) } -int +int sys_access (const char *pathname, int mode) { return access (pathname, mode); } + + +int +sys_fallocate(int fd, int mode, off_t offset, off_t len) +{ +#ifdef HAVE_FALLOCATE + return fallocate(fd, mode, offset, len); +#endif + +#ifdef HAVE_POSIX_FALLOCATE + if (mode) { + /* keep size not supported */ + errno = EOPNOTSUPP; + return -1; + } + + return posix_fallocate(fd, offset, len); +#endif + + errno = ENOSYS; + return -1; +} + |
