From 819a6785b3313e80437f4050267f4ba8a790dd1e Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 4 Oct 1998 01:36:40 +0000 Subject: simplied the layout of the smbwrapper code. All those 3 line files were getting unwieldy (This used to be commit a59d4e93da2cb2bb61a632ce85af0888a87a03e2) --- source3/Makefile.in | 11 +- source3/smbwrapper/access.c | 32 --- source3/smbwrapper/chdir.c | 32 --- source3/smbwrapper/chmod.c | 32 --- source3/smbwrapper/chown.c | 32 --- source3/smbwrapper/close.c | 35 --- source3/smbwrapper/closedir.c | 32 --- source3/smbwrapper/fchdir.c | 35 --- source3/smbwrapper/fcntl.c | 35 --- source3/smbwrapper/fstat.c | 84 ------- source3/smbwrapper/getcwd.c | 28 --- source3/smbwrapper/getdents.c | 36 --- source3/smbwrapper/lseek.c | 35 --- source3/smbwrapper/lstat.c | 85 ------- source3/smbwrapper/mkdir.c | 31 --- source3/smbwrapper/open.c | 36 --- source3/smbwrapper/opendir.c | 32 --- source3/smbwrapper/read.c | 35 --- source3/smbwrapper/readdir.c | 32 --- source3/smbwrapper/readlink.c | 32 --- source3/smbwrapper/realcalls.h | 25 ++- source3/smbwrapper/rename.c | 39 ---- source3/smbwrapper/rmdir.c | 31 --- source3/smbwrapper/seekdir.c | 33 --- source3/smbwrapper/smbw.c | 21 +- source3/smbwrapper/stat.c | 89 -------- source3/smbwrapper/telldir.c | 32 --- source3/smbwrapper/unlink.c | 31 --- source3/smbwrapper/utime.c | 31 --- source3/smbwrapper/wrapped.c | 497 +++++++++++++++++++++++++++++++++++++++++ source3/smbwrapper/wrapper.h | 26 +++ source3/smbwrapper/write.c | 35 --- 32 files changed, 556 insertions(+), 1076 deletions(-) delete mode 100644 source3/smbwrapper/access.c delete mode 100644 source3/smbwrapper/chdir.c delete mode 100644 source3/smbwrapper/chmod.c delete mode 100644 source3/smbwrapper/chown.c delete mode 100644 source3/smbwrapper/close.c delete mode 100644 source3/smbwrapper/closedir.c delete mode 100644 source3/smbwrapper/fchdir.c delete mode 100644 source3/smbwrapper/fcntl.c delete mode 100644 source3/smbwrapper/fstat.c delete mode 100644 source3/smbwrapper/getcwd.c delete mode 100644 source3/smbwrapper/getdents.c delete mode 100644 source3/smbwrapper/lseek.c delete mode 100644 source3/smbwrapper/lstat.c delete mode 100644 source3/smbwrapper/mkdir.c delete mode 100644 source3/smbwrapper/open.c delete mode 100644 source3/smbwrapper/opendir.c delete mode 100644 source3/smbwrapper/read.c delete mode 100644 source3/smbwrapper/readdir.c delete mode 100644 source3/smbwrapper/readlink.c delete mode 100644 source3/smbwrapper/rename.c delete mode 100644 source3/smbwrapper/rmdir.c delete mode 100644 source3/smbwrapper/seekdir.c delete mode 100644 source3/smbwrapper/stat.c delete mode 100644 source3/smbwrapper/telldir.c delete mode 100644 source3/smbwrapper/unlink.c delete mode 100644 source3/smbwrapper/utime.c create mode 100644 source3/smbwrapper/wrapped.c delete mode 100644 source3/smbwrapper/write.c (limited to 'source3') diff --git a/source3/Makefile.in b/source3/Makefile.in index a8301303f1..2ae810ae2b 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -193,16 +193,7 @@ RPCCLIENT_OBJ = rpcclient/rpcclient.o \ # rpcclient/cmd_netlogon.o \ # rpcclient/cmd_srvsvc.o -SMBWRAPPER_OBJ = smbwrapper/open.o smbwrapper/stat.o \ - smbwrapper/smbw.o smbwrapper/fstat.o smbwrapper/read.o \ - smbwrapper/lstat.o smbwrapper/close.o smbwrapper/getdents.o \ - smbwrapper/fcntl.o smbwrapper/access.o smbwrapper/chdir.o \ - smbwrapper/write.o smbwrapper/readlink.o smbwrapper/unlink.o \ - smbwrapper/rename.o smbwrapper/utime.o smbwrapper/chown.o \ - smbwrapper/chmod.o smbwrapper/lseek.o smbwrapper/getcwd.o \ - smbwrapper/mkdir.o smbwrapper/rmdir.o smbwrapper/fchdir.o \ - smbwrapper/opendir.o smbwrapper/readdir.o smbwrapper/telldir.o \ - smbwrapper/seekdir.o smbwrapper/closedir.o \ +SMBWRAPPER_OBJ = smbwrapper/smbw.o smbwrapper/wrapped.o \ $(LIBSMB_OBJ) $(PARAM_OBJ) \ $(UBIQX_OBJ) $(LIB_OBJ) diff --git a/source3/smbwrapper/access.c b/source3/smbwrapper/access.c deleted file mode 100644 index 5194b32613..0000000000 --- a/source3/smbwrapper/access.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - - int access(const char *name, int mode) -{ - if (smbw_path(name)) { - return smbw_access(name, mode); - } - - return real_access(name, mode); -} - diff --git a/source3/smbwrapper/chdir.c b/source3/smbwrapper/chdir.c deleted file mode 100644 index 3648e4431f..0000000000 --- a/source3/smbwrapper/chdir.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - -#ifdef linux -__asm__(".globl __chdir; __chdir = chdir"); -#endif - - int chdir(const char *name) -{ - return smbw_chdir(name); -} - diff --git a/source3/smbwrapper/chmod.c b/source3/smbwrapper/chmod.c deleted file mode 100644 index 50d2404a68..0000000000 --- a/source3/smbwrapper/chmod.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - - int chmod(const char *name,mode_t mode) -{ - if (smbw_path(name)) { - return smbw_chmod(name, mode); - } - - return real_chmod(name, mode); -} - diff --git a/source3/smbwrapper/chown.c b/source3/smbwrapper/chown.c deleted file mode 100644 index 31621d151d..0000000000 --- a/source3/smbwrapper/chown.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - - int chown(const char *name,uid_t owner, gid_t group) -{ - if (smbw_path(name)) { - return smbw_chown(name, owner, group); - } - - return real_chown(name, owner, group); -} - diff --git a/source3/smbwrapper/close.c b/source3/smbwrapper/close.c deleted file mode 100644 index a0491fca56..0000000000 --- a/source3/smbwrapper/close.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - -#ifdef linux -__asm__(".globl __close; __close = close"); -#endif - - ssize_t close(int fd) -{ - if (smbw_fd(fd)) { - return smbw_close(fd); - } - - return real_close(fd); -} diff --git a/source3/smbwrapper/closedir.c b/source3/smbwrapper/closedir.c deleted file mode 100644 index 23b747ebf7..0000000000 --- a/source3/smbwrapper/closedir.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - -#include "wrapper.h" - - int closedir(DIR *dir) -{ - if (smbw_dirp(dir)) { - return smbw_closedir(dir); - } - - return real_closedir(dir); -} diff --git a/source3/smbwrapper/fchdir.c b/source3/smbwrapper/fchdir.c deleted file mode 100644 index 320d8fa6a4..0000000000 --- a/source3/smbwrapper/fchdir.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - -#ifdef linux -__asm__(".globl __fchdir; __fchdir = fchdir"); -#endif - - int fchdir(int fd) -{ - if (smbw_fd(fd)) { - return smbw_fchdir(fd); - } - - return real_fchdir(fd); -} diff --git a/source3/smbwrapper/fcntl.c b/source3/smbwrapper/fcntl.c deleted file mode 100644 index fab18fbdf4..0000000000 --- a/source3/smbwrapper/fcntl.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - -#ifdef linux -__asm__(".globl __fcntl; __fcntl = fcntl"); -#endif - - int fcntl(int fd, int cmd, long arg) -{ - if (smbw_fd(fd)) { - return smbw_fcntl(fd); - } - - return real_fcntl(fd, cmd, arg); -} diff --git a/source3/smbwrapper/fstat.c b/source3/smbwrapper/fstat.c deleted file mode 100644 index dc83f4a3ca..0000000000 --- a/source3/smbwrapper/fstat.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - - 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; - } -} diff --git a/source3/smbwrapper/getcwd.c b/source3/smbwrapper/getcwd.c deleted file mode 100644 index 2b0a749904..0000000000 --- a/source3/smbwrapper/getcwd.c +++ /dev/null @@ -1,28 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - - char *getcwd(char *buf, size_t size) -{ - return smbw_getcwd(buf, size); -} - diff --git a/source3/smbwrapper/getdents.c b/source3/smbwrapper/getdents.c deleted file mode 100644 index 1ff1b6376a..0000000000 --- a/source3/smbwrapper/getdents.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - -#include "wrapper.h" - -#ifdef linux -__asm__(".globl __getdents; __getdents = getdents"); -#endif - - int getdents(unsigned int fd, struct dirent *dirp, unsigned int count) -{ - if (smbw_fd(fd)) { - return smbw_getdents(fd, dirp, count); - } - - return real_getdents(fd, dirp, count); -} diff --git a/source3/smbwrapper/lseek.c b/source3/smbwrapper/lseek.c deleted file mode 100644 index 3507dab690..0000000000 --- a/source3/smbwrapper/lseek.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - -#ifdef linux -__asm__(".globl __lseek; __lseek = lseek"); -#endif - - ssize_t lseek(int fd, off_t offset, int whence) -{ - if (smbw_fd(fd)) { - return smbw_lseek(fd, offset, whence); - } - - return real_lseek(fd, offset, whence); -} diff --git a/source3/smbwrapper/lstat.c b/source3/smbwrapper/lstat.c deleted file mode 100644 index 9ddd14662f..0000000000 --- a/source3/smbwrapper/lstat.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - - int __lxstat(int vers, const char *name, struct stat *st) -{ - struct kernel_stat kbuf; - 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_lstat(name, (struct kernel_stat *)st); - break; - - 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; - - default: - errno = EINVAL; - return -1; - } -} - diff --git a/source3/smbwrapper/mkdir.c b/source3/smbwrapper/mkdir.c deleted file mode 100644 index e28a6a59b5..0000000000 --- a/source3/smbwrapper/mkdir.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - - int mkdir(const char *name, mode_t mode) -{ - if (smbw_path(name)) { - return smbw_mkdir(name, mode); - } - - return real_mkdir(name, mode); -} diff --git a/source3/smbwrapper/open.c b/source3/smbwrapper/open.c deleted file mode 100644 index 935e99ad79..0000000000 --- a/source3/smbwrapper/open.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - -#include "wrapper.h" - -#ifdef linux -__asm__(".globl __open; __open = open"); -#endif - - int open(const char *name, int flags, mode_t mode) -{ - if (smbw_path(name)) { - return smbw_open(name, flags, mode); - } - - return real_open(name, flags, mode); -} diff --git a/source3/smbwrapper/opendir.c b/source3/smbwrapper/opendir.c deleted file mode 100644 index 87c465a777..0000000000 --- a/source3/smbwrapper/opendir.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - -#include "wrapper.h" - - DIR *opendir(const char *name) -{ - if (smbw_path(name)) { - return smbw_opendir(name); - } - - return real_opendir(name); -} diff --git a/source3/smbwrapper/read.c b/source3/smbwrapper/read.c deleted file mode 100644 index 3ca49a6309..0000000000 --- a/source3/smbwrapper/read.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - -#ifdef linux -__asm__(".globl __read; __read = read"); -#endif - - ssize_t read(int fd, void *buf, size_t count) -{ - if (smbw_fd(fd)) { - return smbw_read(fd, buf, count); - } - - return real_read(fd, buf, count); -} diff --git a/source3/smbwrapper/readdir.c b/source3/smbwrapper/readdir.c deleted file mode 100644 index 044262b9f2..0000000000 --- a/source3/smbwrapper/readdir.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - -#include "wrapper.h" - - struct dirent *readdir(DIR *dir) -{ - if (smbw_dirp(dir)) { - return smbw_readdir(dir); - } - - return real_readdir(dir); -} diff --git a/source3/smbwrapper/readlink.c b/source3/smbwrapper/readlink.c deleted file mode 100644 index 57211326aa..0000000000 --- a/source3/smbwrapper/readlink.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - - int readlink(char *path, char *buf, size_t bufsize) -{ - if (smbw_path(path)) { - return smbw_readlink(path, buf, bufsize); - } - - return real_readlink(path, buf, bufsize); -} - diff --git a/source3/smbwrapper/realcalls.h b/source3/smbwrapper/realcalls.h index 0b0a9f39cb..a234332b61 100644 --- a/source3/smbwrapper/realcalls.h +++ b/source3/smbwrapper/realcalls.h @@ -1,8 +1,26 @@ -#ifdef aix +/* + Unix SMB/Netbios implementation. + Version 2.0 + defintions of syscall entries + Copyright (C) Andrew Tridgell 1998 + + This program 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 2 of the License, or + (at your option) any later version. + + This program 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ -#include "aix-syscall.h" -#else +/* this file is partly derived from zlibc by Alain Knaff */ #define real_access(fn, mode) (syscall(SYS_access, (fn), (mode))) #define real_chdir(fn) (syscall(SYS_chdir, (fn))) @@ -48,5 +66,4 @@ #define real_utime(fn, buf) (syscall(SYS_utime, (fn), (buf))) #define real_utimes(fn, buf) (syscall(SYS_utimes, (fn), (buf))) -#endif diff --git a/source3/smbwrapper/rename.c b/source3/smbwrapper/rename.c deleted file mode 100644 index 76041f62eb..0000000000 --- a/source3/smbwrapper/rename.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - - int rename(const char *oldname,const char *newname) -{ - int p1, p2; - p1 = smbw_path(oldname); - p2 = smbw_path(newname); - if (p1 ^ p2) { - /* can't cross filesystem boundaries */ - errno = EXDEV; - return -1; - } - if (p1 && p2) { - return smbw_rename(oldname, newname); - } - - return real_rename(oldname, newname); -} diff --git a/source3/smbwrapper/rmdir.c b/source3/smbwrapper/rmdir.c deleted file mode 100644 index 120b6eaf22..0000000000 --- a/source3/smbwrapper/rmdir.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - - int rmdir(const char *name) -{ - if (smbw_path(name)) { - return smbw_rmdir(name); - } - - return real_rmdir(name); -} diff --git a/source3/smbwrapper/seekdir.c b/source3/smbwrapper/seekdir.c deleted file mode 100644 index c84aaf4caa..0000000000 --- a/source3/smbwrapper/seekdir.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - -#include "wrapper.h" - - void seekdir(DIR *dir, off_t offset) -{ - if (smbw_dirp(dir)) { - smbw_seekdir(dir, offset); - return; - } - - real_seekdir(dir, offset); -} diff --git a/source3/smbwrapper/smbw.c b/source3/smbwrapper/smbw.c index 0537996bb5..16374a7dbe 100644 --- a/source3/smbwrapper/smbw.c +++ b/source3/smbwrapper/smbw.c @@ -119,9 +119,9 @@ void smbw_init(void) /***************************************************** determine if a file descriptor is a smb one *******************************************************/ -BOOL smbw_fd(int fd) +int smbw_fd(int fd) { - if (smbw_busy) return False; + if (smbw_busy) return 0; return (fd >= SMBW_FD_OFFSET); } @@ -307,7 +307,7 @@ char *smbw_parse_path(const char *fname, char *server, char *share, char *path) determine if a path name (possibly relative) is in the smb name space *******************************************************/ -BOOL smbw_path(const char *path) +int smbw_path(const char *path) { fstring server, share; pstring s; @@ -315,10 +315,10 @@ BOOL smbw_path(const char *path) int l=strlen(SMBW_PREFIX)-1; if (path[0] == '/' && strncmp(path,SMBW_PREFIX,l)) { - return False; + return 0; } - if (smbw_busy) return False; + if (smbw_busy) return 0; smbw_init(); @@ -328,10 +328,10 @@ BOOL smbw_path(const char *path) if (strncmp(cwd,SMBW_PREFIX,l) == 0 && (cwd[l] == '/' || cwd[l] == 0)) { - return True; + return 1; } - return False; + return 0; } /***************************************************** @@ -501,14 +501,15 @@ struct smbw_dir *smbw_dir(int fd) /***************************************************** check if a DIR* is one of ours *******************************************************/ -BOOL smbw_dirp(struct smbw_dir *d) +int smbw_dirp(DIR *dirp) { + struct smbw_dir *d = (struct smbw_dir *)dirp; struct smbw_dir *dir; for (dir=smbw_dirs;dir;dir=dir->next) { - if (dir == d) return True; + if (dir == d) return 1; } - return False; + return 0; } /***************************************************** diff --git a/source3/smbwrapper/stat.c b/source3/smbwrapper/stat.c deleted file mode 100644 index 6721d41211..0000000000 --- a/source3/smbwrapper/stat.c +++ /dev/null @@ -1,89 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - - int __xstat(int vers, const char *name, struct stat *st) -{ - struct kernel_stat kbuf; - 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; - } -} - - int stat(const char *name, struct stat *st) -{ - return __xstat(_STAT_VER, name, st); -} diff --git a/source3/smbwrapper/telldir.c b/source3/smbwrapper/telldir.c deleted file mode 100644 index 13c1133c72..0000000000 --- a/source3/smbwrapper/telldir.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - -#include "wrapper.h" - - off_t telldir(DIR *dir) -{ - if (smbw_dirp(dir)) { - return smbw_telldir(dir); - } - - return real_telldir(dir); -} diff --git a/source3/smbwrapper/unlink.c b/source3/smbwrapper/unlink.c deleted file mode 100644 index 827485c095..0000000000 --- a/source3/smbwrapper/unlink.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - - int unlink(const char *name) -{ - if (smbw_path(name)) { - return smbw_unlink(name); - } - - return real_unlink(name); -} diff --git a/source3/smbwrapper/utime.c b/source3/smbwrapper/utime.c deleted file mode 100644 index 9a269aa942..0000000000 --- a/source3/smbwrapper/utime.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - - int utime(const char *name,struct timeval *tvp) -{ - if (smbw_path(name)) { - return smbw_utime(name, tvp); - } - - return real_utime(name, tvp); -} diff --git a/source3/smbwrapper/wrapped.c b/source3/smbwrapper/wrapped.c new file mode 100644 index 0000000000..71bcb76ee9 --- /dev/null +++ b/source3/smbwrapper/wrapped.c @@ -0,0 +1,497 @@ +/* + Unix SMB/Netbios implementation. + Version 2.0 + SMB wrapper functions + Copyright (C) Andrew Tridgell 1998 + + This program 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 2 of the License, or + (at your option) any later version. + + This program 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + +#include "wrapper.h" + +#ifdef linux +__asm__(".globl __open; __open = open"); +#endif + + int open(const char *name, int flags, mode_t mode) +{ + if (smbw_path(name)) { + return smbw_open(name, flags, mode); + } + + return real_open(name, flags, mode); +} + + +#ifdef linux +__asm__(".globl __chdir; __chdir = chdir"); +#endif + + int chdir(const char *name) +{ + return smbw_chdir(name); +} + + + +#ifdef linux +__asm__(".globl __close; __close = close"); +#endif + + ssize_t close(int fd) +{ + if (smbw_fd(fd)) { + return smbw_close(fd); + } + + return real_close(fd); +} + + +#ifdef linux +__asm__(".globl __fchdir; __fchdir = fchdir"); +#endif + + int fchdir(int fd) +{ + if (smbw_fd(fd)) { + return smbw_fchdir(fd); + } + + return real_fchdir(fd); +} + + +#ifdef linux +__asm__(".globl __fcntl; __fcntl = fcntl"); +#endif + + int fcntl(int fd, int cmd, long arg) +{ + if (smbw_fd(fd)) { + return smbw_fcntl(fd); + } + + return real_fcntl(fd, cmd, arg); +} + + + +#ifdef linux +__asm__(".globl __getdents; __getdents = getdents"); +#endif + + int getdents(unsigned int fd, struct dirent *dirp, unsigned int count) +{ + if (smbw_fd(fd)) { + return smbw_getdents(fd, dirp, count); + } + + return real_getdents(fd, dirp, count); +} + + +#ifdef linux +__asm__(".globl __lseek; __lseek = lseek"); +#endif + + ssize_t lseek(int fd, off_t offset, int whence) +{ + if (smbw_fd(fd)) { + return smbw_lseek(fd, offset, whence); + } + + return real_lseek(fd, offset, whence); +} + + + +#ifdef linux +__asm__(".globl __read; __read = read"); +#endif + + ssize_t read(int fd, void *buf, size_t count) +{ + if (smbw_fd(fd)) { + return smbw_read(fd, buf, count); + } + + return real_read(fd, buf, count); +} + + +#ifdef linux +__asm__(".globl __write; __write = write"); +#endif + + ssize_t write(int fd, void *buf, size_t count) +{ + if (smbw_fd(fd)) { + return smbw_write(fd, buf, count); + } + + return real_write(fd, buf, count); +} + + + int access(const char *name, int mode) +{ + if (smbw_path(name)) { + return smbw_access(name, mode); + } + + return real_access(name, mode); +} + + + + int chmod(const char *name,mode_t mode) +{ + if (smbw_path(name)) { + return smbw_chmod(name, mode); + } + + return real_chmod(name, mode); +} + + + + int chown(const char *name,uid_t owner, gid_t group) +{ + if (smbw_path(name)) { + return smbw_chown(name, owner, group); + } + + return real_chown(name, owner, group); +} + + int closedir(DIR *dir) +{ + if (smbw_dirp(dir)) { + return smbw_closedir(dir); + } + + return real_closedir(dir); +} + + + 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; + } +} + + + char *getcwd(char *buf, size_t size) +{ + return smbw_getcwd(buf, size); +} + + + + int __lxstat(int vers, const char *name, struct stat *st) +{ + struct kernel_stat kbuf; + 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_lstat(name, (struct kernel_stat *)st); + break; + + 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; + + default: + errno = EINVAL; + return -1; + } +} + + + + int mkdir(const char *name, mode_t mode) +{ + if (smbw_path(name)) { + return smbw_mkdir(name, mode); + } + + return real_mkdir(name, mode); +} + + + void seekdir(DIR *dir, off_t offset) +{ + if (smbw_dirp(dir)) { + smbw_seekdir(dir, offset); + return; + } + + real_seekdir(dir, offset); +} + + + int __xstat(int vers, const char *name, struct stat *st) +{ + struct kernel_stat kbuf; + 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; + } +} + + int stat(const char *name, struct stat *st) +{ + return __xstat(_STAT_VER, name, st); +} + + + off_t telldir(DIR *dir) +{ + if (smbw_dirp(dir)) { + return smbw_telldir(dir); + } + + return real_telldir(dir); +} + + + int unlink(const char *name) +{ + if (smbw_path(name)) { + return smbw_unlink(name); + } + + return real_unlink(name); +} + + + int utime(const char *name,struct timeval *tvp) +{ + if (smbw_path(name)) { + return smbw_utime(name, tvp); + } + + return real_utime(name, tvp); +} + + DIR *opendir(const char *name) +{ + if (smbw_path(name)) { + return smbw_opendir(name); + } + + return real_opendir(name); +} + + + struct dirent *readdir(DIR *dir) +{ + if (smbw_dirp(dir)) { + return smbw_readdir(dir); + } + + return real_readdir(dir); +} + + int readlink(char *path, char *buf, size_t bufsize) +{ + if (smbw_path(path)) { + return smbw_readlink(path, buf, bufsize); + } + + return real_readlink(path, buf, bufsize); +} + + + int rename(const char *oldname,const char *newname) +{ + int p1, p2; + p1 = smbw_path(oldname); + p2 = smbw_path(newname); + if (p1 ^ p2) { + /* can't cross filesystem boundaries */ + errno = EXDEV; + return -1; + } + if (p1 && p2) { + return smbw_rename(oldname, newname); + } + + return real_rename(oldname, newname); +} + + int rmdir(const char *name) +{ + if (smbw_path(name)) { + return smbw_rmdir(name); + } + + return real_rmdir(name); +} + diff --git a/source3/smbwrapper/wrapper.h b/source3/smbwrapper/wrapper.h index c891cd948f..d38aa4227e 100644 --- a/source3/smbwrapper/wrapper.h +++ b/source3/smbwrapper/wrapper.h @@ -1,3 +1,24 @@ +/* + Unix SMB/Netbios implementation. + Version 2.0 + SMB wrapper functions - definitions + Copyright (C) Andrew Tridgell 1998 + + This program 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 2 of the License, or + (at your option) any later version. + + This program 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + #include "config.h" #include @@ -9,3 +30,8 @@ #include #include "kernel_stat.h" #include "realcalls.h" + + +int smbw_path(const char *path); +int smbw_fd(int fd); +int smbw_dirp(DIR *); diff --git a/source3/smbwrapper/write.c b/source3/smbwrapper/write.c deleted file mode 100644 index a05f55d9a4..0000000000 --- a/source3/smbwrapper/write.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 2.0 - SMB wrapper functions - Copyright (C) Andrew Tridgell 1998 - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "wrapper.h" - -#ifdef linux -__asm__(".globl __write; __write = write"); -#endif - - ssize_t write(int fd, void *buf, size_t count) -{ - if (smbw_fd(fd)) { - return smbw_write(fd, buf, count); - } - - return real_write(fd, buf, count); -} -- cgit