From 829e72fe9c97feaa3d45b768984a4c47b906a23a Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 7 Oct 1998 09:57:22 +0000 Subject: yet another attempt at making this stuff portable. This time I use minimal includes in wrapped.c (This used to be commit fd6a59d8ca0932d61a60b74485841001d4f8fd44) --- source3/smbwrapper/wrapped.c | 359 ++++++++++--------------------------------- 1 file changed, 83 insertions(+), 276 deletions(-) (limited to 'source3/smbwrapper/wrapped.c') diff --git a/source3/smbwrapper/wrapped.c b/source3/smbwrapper/wrapped.c index 427075f1fe..98a62b6219 100644 --- a/source3/smbwrapper/wrapped.c +++ b/source3/smbwrapper/wrapped.c @@ -19,15 +19,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +/* NOTE: This file WILL produce compiler warnings. They are unavoidable */ -/* we don't want prototypes for this code */ -#define NO_PROTO - -#include "includes.h" - -#ifdef LINUX -#include "kernel_stat.h" -#endif +#include "config.h" +#include +#include #include "realcalls.h" int open(const char *name, int flags, mode_t mode) @@ -67,12 +63,12 @@ #ifdef HAVE__OPEN64 int _open64(const char *name, int flags, mode_t mode) { - return open64(name, flags, mode); + return open64(name, flags, mode); } #elif HAVE___OPEN64 int __open64(const char *name, int flags, mode_t mode) { - return open64(name, flags, mode); + return open64(name, flags, mode); } #endif #endif @@ -209,7 +205,7 @@ #ifdef real_getdents - int getdents(int fd, struct dirent *dirp, unsigned int count) + int getdents(int fd, void *dirp, unsigned int count) { if (smbw_fd(fd)) { return smbw_getdents(fd, dirp, count); @@ -220,12 +216,12 @@ #endif #ifdef HAVE___GETDENTS - int __getdents(int fd, struct dirent *dirp, unsigned int count) + int __getdents(int fd, void *dirp, unsigned int count) { return getdents(fd, dirp, count); } #elif HAVE__GETDENTS - int _getdents(int fd, struct dirent *dirp, unsigned int count) + int _getdents(int fd, void *dirp, unsigned int count) { return getdents(fd, dirp, count); } @@ -330,70 +326,6 @@ return real_chown(name, owner, group); } -#ifdef LINUX - int __fxstat(int vers, int fd, struct stat *st) -{ - struct kernel_stat kbuf; - int ret; - - if (smbw_fd(fd)) { - return smbw_fstat(fd, st); - } - - switch (vers) { - case _STAT_VER_LINUX_OLD: - /* Nothing to do. The struct is in the form the kernel expects - it to be. */ - return real_fstat(fd, (struct kernel_stat *)st); - break; - - case _STAT_VER_LINUX: - /* Do the system call. */ - ret = real_fstat(fd, &kbuf); - - st->st_dev = kbuf.st_dev; -#ifdef _HAVE___PAD1 - st->__pad1 = 0; -#endif - st->st_ino = kbuf.st_ino; - st->st_mode = kbuf.st_mode; - st->st_nlink = kbuf.st_nlink; - st->st_uid = kbuf.st_uid; - st->st_gid = kbuf.st_gid; - st->st_rdev = kbuf.st_rdev; -#ifdef _HAVE___PAD2 - st->__pad2 = 0; -#endif - st->st_size = kbuf.st_size; - st->st_blksize = kbuf.st_blksize; - st->st_blocks = kbuf.st_blocks; - st->st_atime = kbuf.st_atime; -#ifdef _HAVE___UNUSED1 - st->__unused1 = 0; -#endif - st->st_mtime = kbuf.st_mtime; -#ifdef _HAVE___UNUSED2 - st->__unused2 = 0; -#endif - st->st_ctime = kbuf.st_ctime; -#ifdef _HAVE___UNUSED3 - st->__unused3 = 0; -#endif -#ifdef _HAVE___UNUSED4 - st->__unused4 = 0; -#endif -#ifdef _HAVE___UNUSED5 - st->__unused5 = 0; -#endif - return ret; - - default: - errno = EINVAL; - return -1; - } -} -#endif - char *getcwd(char *buf, size_t size) { @@ -401,149 +333,72 @@ } -#ifdef LINUX - int __lxstat(int vers, const char *name, struct stat *st) -{ - struct kernel_stat kbuf; - int ret; + + int mkdir(const char *name, mode_t mode) +{ if (smbw_path(name)) { - return smbw_stat(name, st); + return smbw_mkdir(name, mode); } - switch (vers) { - case _STAT_VER_LINUX_OLD: - /* Nothing to do. The struct is in the form the kernel expects - it to be. */ - return real_lstat(name, (struct kernel_stat *)st); - break; + return real_mkdir(name, mode); +} - case _STAT_VER_LINUX: - /* Do the system call. */ - ret = real_lstat(name, &kbuf); - st->st_dev = kbuf.st_dev; -#ifdef _HAVE___PAD1 - st->__pad1 = 0; -#endif - st->st_ino = kbuf.st_ino; - st->st_mode = kbuf.st_mode; - st->st_nlink = kbuf.st_nlink; - st->st_uid = kbuf.st_uid; - st->st_gid = kbuf.st_gid; - st->st_rdev = kbuf.st_rdev; -#ifdef _HAVE___PAD2 - st->__pad2 = 0; -#endif - st->st_size = kbuf.st_size; - st->st_blksize = kbuf.st_blksize; - st->st_blocks = kbuf.st_blocks; - st->st_atime = kbuf.st_atime; -#ifdef _HAVE___UNUSED1 - st->__unused1 = 0; -#endif - st->st_mtime = kbuf.st_mtime; -#ifdef _HAVE___UNUSED2 - st->__unused2 = 0; -#endif - st->st_ctime = kbuf.st_ctime; -#ifdef _HAVE___UNUSED3 - st->__unused3 = 0; -#endif -#ifdef _HAVE___UNUSED4 - st->__unused4 = 0; -#endif -#ifdef _HAVE___UNUSED5 - st->__unused5 = 0; -#endif - return ret; +#if HAVE___FXSTAT + int __fxstat(int vers, int fd, void *st) +{ + long xx[32]; + int ret; - default: - errno = EINVAL; - return -1; + if (smbw_fd(fd)) { + return smbw_fstat(fd, st); } + + ret = real_fstat(fd, xx); + xstat_convert(vers, st, xx); + return ret; } #endif - - int mkdir(const char *name, mode_t mode) +#if HAVE___XSTAT + int __xstat(int vers, char *name, void *st) { + long xx[32]; + int ret; + if (smbw_path(name)) { - return smbw_mkdir(name, mode); + return smbw_stat(name, st); } - return real_mkdir(name, mode); + ret = real_stat(name, xx); + xstat_convert(vers, st, xx); + return ret; } +#endif -#ifdef LINUX - int __xstat(int vers, const char *name, struct stat *st) +#if HAVE___LXSTAT + int __lxstat(int vers, char *name, void *st) { - struct kernel_stat kbuf; + long xx[32]; int ret; if (smbw_path(name)) { return smbw_stat(name, st); } - switch (vers) { - case _STAT_VER_LINUX_OLD: - /* Nothing to do. The struct is in the form the kernel expects - it to be. */ - return real_stat(name, (struct kernel_stat *)st); - break; - - case _STAT_VER_LINUX: - /* Do the system call. */ - ret = real_stat(name, &kbuf); - - st->st_dev = kbuf.st_dev; -#ifdef _HAVE___PAD1 - st->__pad1 = 0; -#endif - st->st_ino = kbuf.st_ino; - st->st_mode = kbuf.st_mode; - st->st_nlink = kbuf.st_nlink; - st->st_uid = kbuf.st_uid; - st->st_gid = kbuf.st_gid; - st->st_rdev = kbuf.st_rdev; -#ifdef _HAVE___PAD2 - st->__pad2 = 0; -#endif - st->st_size = kbuf.st_size; - st->st_blksize = kbuf.st_blksize; - st->st_blocks = kbuf.st_blocks; - st->st_atime = kbuf.st_atime; -#ifdef _HAVE___UNUSED1 - st->__unused1 = 0; -#endif - st->st_mtime = kbuf.st_mtime; -#ifdef _HAVE___UNUSED2 - st->__unused2 = 0; -#endif - st->st_ctime = kbuf.st_ctime; -#ifdef _HAVE___UNUSED3 - st->__unused3 = 0; -#endif -#ifdef _HAVE___UNUSED4 - st->__unused4 = 0; -#endif -#ifdef _HAVE___UNUSED5 - st->__unused5 = 0; -#endif - return ret; - - default: - errno = EINVAL; - return -1; - } + ret = real_lstat(name, xx); + xstat_convert(vers, st, xx); + return ret; } #endif - int stat(const char *name, struct stat *st) + + int stat(const char *name, void *st) { #if HAVE___XSTAT - return __xstat(_STAT_VER, name, st); + return xstat(name, st); #else if (smbw_path(name)) { return smbw_stat(name, st); @@ -552,10 +407,10 @@ #endif } - int lstat(const char *name, struct stat *st) + int lstat(char *name, void *st) { #if HAVE___LXSTAT - return __lxstat(_STAT_VER, name, st); + return __lxstat(0, name, st); #else if (smbw_path(name)) { return smbw_stat(name, st); @@ -564,10 +419,10 @@ #endif } - int fstat(int fd, struct stat *st) + int fstat(int fd, void *st) { #if HAVE___LXSTAT - return __fxstat(_STAT_VER, fd, st); + return __fxstat(0, fd, st); #else if (smbw_fd(fd)) { return smbw_fstat(fd, st); @@ -599,7 +454,7 @@ #endif #ifdef HAVE_UTIMES - int utimes(const char *name,const struct timeval tvp[2]) + int utimes(const char *name,void *tvp) { if (smbw_path(name)) { return smbw_utimes(name, tvp); @@ -683,7 +538,7 @@ } #ifdef real_opendir - DIR *opendir(const char *name) + void *opendir(const char *name) { if (smbw_path(name)) { return smbw_opendir(name); @@ -694,7 +549,7 @@ #endif #ifdef real_readdir - struct dirent *readdir(DIR *dir) + void *readdir(void *dir) { if (smbw_dirp(dir)) { return smbw_readdir(dir); @@ -705,7 +560,7 @@ #endif #ifdef real_closedir - int closedir(DIR *dir) + int closedir(void *dir) { if (smbw_dirp(dir)) { return smbw_closedir(dir); @@ -716,7 +571,7 @@ #endif #ifdef real_telldir - off_t telldir(DIR *dir) + off_t telldir(void *dir) { if (smbw_dirp(dir)) { return smbw_telldir(dir); @@ -727,121 +582,84 @@ #endif #ifdef real_seekdir -#if SEEKDIR_RETURNS_VOID - void -#else - int -#endif -seekdir(DIR *dir, off_t offset) + int seekdir(void *dir, off_t offset) { if (smbw_dirp(dir)) { smbw_seekdir(dir, offset); - goto done; + return 0; } real_seekdir(dir, offset); - done: -#ifndef SEEKDIR_RETURNS_VOID return 0; -#endif } #endif #ifndef NO_ACL_WRAPPER - int acl(const char *pathp, int cmd, int nentries, aclent_t *aclbufp) + int acl(char *pathp, int cmd, int nentries, void *aclbufp) { if (smbw_path(pathp)) { - switch (cmd) { - case GETACL: - case GETACLCNT: - return 0; - default: - errno = ENOSYS; - return -1; - } + return smbw_acl(pathp, cmd, nentries, aclbufp); } - real_acl(pathp, cmd, nentries, aclbufp); + return real_acl(pathp, cmd, nentries, aclbufp); } #endif #ifndef NO_FACL_WRAPPER int facl(int fd, int cmd, int nentries, aclent_t *aclbufp) { - if (smbw_fd(fd)) { - switch (cmd) { - case GETACL: - case GETACLCNT: - return 0; - default: - errno = ENOSYS; - return -1; - } + if (smbw_path(pathp)) { + return smbw_facl(fd, cmd, nentries, aclbufp); } - real_facl(fd, cmd, nentries, aclbufp); + return real_facl(fd, cmd, nentries, aclbufp); } #endif int creat(const char *path, mode_t mode) { - return open(path, O_WRONLY|O_CREAT|O_TRUNC, mode); + extern int creat_bits; + return open(path, creat_bits, mode); } #ifdef HAVE_CREAT64 int creat64(const char *path, mode_t mode) { - return open64(path, O_WRONLY|O_CREAT|O_TRUNC, mode); + extern int creat_bits; + return open64(path, creat_bits, mode); } #endif #ifdef HAVE_STAT64 -static void stat64_convert(struct stat *st, struct stat64 *st64) -{ - st64->st_size = st->st_size; - st64->st_mode = st->st_mode; - st64->st_ino = st->st_ino; - st64->st_dev = st->st_dev; - st64->st_rdev = st->st_rdev; - st64->st_nlink = st->st_nlink; - st64->st_uid = st->st_uid; - st64->st_gid = st->st_gid; - st64->st_atime = st->st_atime; - st64->st_mtime = st->st_mtime; - st64->st_ctime = st->st_ctime; - st64->st_blksize = st->st_blksize; - st64->st_blocks = st->st_blocks; -} - - int stat64(const char *name, struct stat64 *st64) + int stat64(const char *name, void *st64) { if (smbw_path(name)) { - struct stat st; - int ret = stat(name, &st); - stat64_convert(&st, st64); + long xx[32]; + int ret = stat(name, xx); + stat64_convert(xx, st64); return ret; } return real_stat64(name, st64); } - int fstat64(int fd, struct stat64 *st64) + int fstat64(int fd, void *st64) { if (smbw_fd(fd)) { - struct stat st; - int ret = fstat(fd, &st); - stat64_convert(&st, st64); + long xx[32]; + int ret = fstat(fd, xx); + stat64_convert(xx, st64); return ret; } return real_fstat64(fd, st64); } - int lstat64(const char *name, struct stat64 *st64) + int lstat64(const char *name, void *st64) { if (smbw_path(name)) { - struct stat st; - int ret = lstat(name, &st); - stat64_convert(&st, st64); + long xx[32]; + int ret = lstat(name, xx); + stat64_convert(xx, st64); return ret; } return real_lstat64(name, st64); @@ -859,26 +677,14 @@ static void stat64_convert(struct stat *st, struct stat64 *st64) #endif #ifdef HAVE_READDIR64 -static void dirent64_convert(struct dirent *d, struct dirent64 *d64) -{ - d64->d_ino = d->d_ino; - d64->d_off = d->d_off; - d64->d_reclen = d->d_reclen; - strcpy(d64->d_name, d->d_name); -} - - struct dirent64 *readdir64(DIR *dir) + void *readdir64(void *dir) { if (smbw_dirp(dir)) { - struct dirent *d; - static union { - char buf[DIRP_SIZE]; - struct dirent64 d64; - } dbuf; + static long xx[70]; d = readdir(dir); if (!d) return NULL; - dirent64_convert(d, &dbuf.d64); - return &dbuf.d64; + dirent64_convert(d, xx); + return xx; } return real_readdir64(dir); } @@ -888,3 +694,4 @@ static void dirent64_convert(struct dirent *d, struct dirent64 *d64) { return smbw_fork(); } + -- cgit