diff options
author | Andrew Tridgell <tridge@samba.org> | 1998-10-05 02:31:39 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 1998-10-05 02:31:39 +0000 |
commit | 92b21b3e82d0c559ef41d40d13c3b790d14daa65 (patch) | |
tree | 000e379a0856c1741019105597544808c4af2d98 | |
parent | 5d14f8932469f232960a255170a99a308a0ffcf3 (diff) | |
download | samba-92b21b3e82d0c559ef41d40d13c3b790d14daa65.tar.gz samba-92b21b3e82d0c559ef41d40d13c3b790d14daa65.tar.bz2 samba-92b21b3e82d0c559ef41d40d13c3b790d14daa65.zip |
- added pread pread64 pwrite pwrite64 and open64
- fixed utime() for null tbuf
(This used to be commit 9047bf59b402de40e520bfc2afa1cbfad5508f72)
-rw-r--r-- | source3/smbwrapper/realcalls.h | 31 | ||||
-rw-r--r-- | source3/smbwrapper/smbw.c | 74 | ||||
-rw-r--r-- | source3/smbwrapper/wrapped.c | 60 |
3 files changed, 162 insertions, 3 deletions
diff --git a/source3/smbwrapper/realcalls.h b/source3/smbwrapper/realcalls.h index 9017db3f0a..9a13ab9300 100644 --- a/source3/smbwrapper/realcalls.h +++ b/source3/smbwrapper/realcalls.h @@ -177,6 +177,37 @@ #endif +#ifdef HAVE__OPEN64 +#define real_open64(fn,fl,m) (_open64(fn,fl,m)) +#elif HAVE___OPEN64 +#define real_open64(fn,fl,m) (__open64(fn,fl,m)) +#endif + +#ifdef HAVE__PREAD +#define real_pread(fd,buf,size,ofs) (_pread(fd,buf,size,ofs)) +#elif HAVE___PREAD +#define real_pread(fd,buf,size,ofs) (__pread(fd,buf,size,ofs)) +#endif + +#ifdef HAVE__PREAD64 +#define real_pread64(fd,buf,size,ofs) (_pread64(fd,buf,size,ofs)) +#elif HAVE___PREAD64 +#define real_pread64(fd,buf,size,ofs) (__pread64(fd,buf,size,ofs)) +#endif + +#ifdef HAVE__PWRITE +#define real_pwrite(fd,buf,size,ofs) (_pwrite(fd,buf,size,ofs)) +#elif HAVE___PWRITE +#define real_pwrite(fd,buf,size,ofs) (__pwrite(fd,buf,size,ofs)) +#endif + +#ifdef HAVE__PWRITE64 +#define real_pwrite64(fd,buf,size,ofs) (_pwrite64(fd,buf,size,ofs)) +#elif HAVE___PWRITE64 +#define real_pwrite64(fd,buf,size,ofs) (__pwrite64(fd,buf,size,ofs)) +#endif + + #define real_readlink(fn,buf,len) (syscall(SYS_readlink, (fn), (buf), (len))) #define real_rename(fn1, fn2) (syscall(SYS_rename, (fn1), (fn2))) #define real_symlink(fn1, fn2) (syscall(SYS_symlink, (fn1), (fn2))) diff --git a/source3/smbwrapper/smbw.c b/source3/smbwrapper/smbw.c index 633e63ef8d..dbc4e2ddd9 100644 --- a/source3/smbwrapper/smbw.c +++ b/source3/smbwrapper/smbw.c @@ -607,6 +607,38 @@ int smbw_open(const char *fname, int flags, mode_t mode) /***************************************************** +a wrapper for pread() +*******************************************************/ +ssize_t smbw_pread(int fd, void *buf, size_t count, off_t ofs) +{ + struct smbw_file *file; + int ret; + + DEBUG(4,("%s %d\n", + __FUNCTION__, (int)count)); + + smbw_busy++; + + file = smbw_file(fd); + if (!file) { + errno = EBADF; + smbw_busy--; + return -1; + } + + ret = cli_read(&file->srv->cli, file->f->cli_fd, buf, ofs, count); + + if (ret == -1) { + errno = smbw_errno(&file->srv->cli); + smbw_busy--; + return -1; + } + + smbw_busy--; + return ret; +} + +/***************************************************** a wrapper for read() *******************************************************/ ssize_t smbw_read(int fd, void *buf, size_t count) @@ -626,7 +658,8 @@ ssize_t smbw_read(int fd, void *buf, size_t count) return -1; } - ret = cli_read(&file->srv->cli, file->f->cli_fd, buf, file->f->offset, count); + ret = cli_read(&file->srv->cli, file->f->cli_fd, buf, + file->f->offset, count); if (ret == -1) { errno = smbw_errno(&file->srv->cli); @@ -640,6 +673,8 @@ ssize_t smbw_read(int fd, void *buf, size_t count) return ret; } + + /***************************************************** a wrapper for write() *******************************************************/ @@ -675,6 +710,38 @@ ssize_t smbw_write(int fd, void *buf, size_t count) } /***************************************************** +a wrapper for pwrite() +*******************************************************/ +ssize_t smbw_pwrite(int fd, void *buf, size_t count, off_t ofs) +{ + struct smbw_file *file; + int ret; + + DEBUG(4,("%s\n", __FUNCTION__)); + + smbw_busy++; + + file = smbw_file(fd); + if (!file) { + DEBUG(3,("bad fd in read\n")); + errno = EBADF; + smbw_busy--; + return -1; + } + + ret = cli_write(&file->srv->cli, file->f->cli_fd, buf, ofs, count); + + if (ret == -1) { + errno = smbw_errno(&file->srv->cli); + smbw_busy--; + return -1; + } + + smbw_busy--; + return ret; +} + +/***************************************************** a wrapper for close() *******************************************************/ int smbw_close(int fd) @@ -877,7 +944,7 @@ int smbw_utime(const char *fname, void *buf) pstring path; uint32 mode; - DEBUG(4,("%s (%s)\n", __FUNCTION__, fname)); + DEBUG(4,("%s (%s, 0x%x)\n", __FUNCTION__, fname, (unsigned)buf)); if (!fname) { errno = EINVAL; @@ -903,7 +970,8 @@ int smbw_utime(const char *fname, void *buf) goto failed; } - if (!cli_setatr(&srv->cli, path, mode, tbuf->modtime)) { + if (!cli_setatr(&srv->cli, path, mode, + tbuf?tbuf->modtime:time(NULL))) { errno = smbw_errno(&srv->cli); goto failed; } diff --git a/source3/smbwrapper/wrapped.c b/source3/smbwrapper/wrapped.c index 422f3abbf5..025bbcc2db 100644 --- a/source3/smbwrapper/wrapped.c +++ b/source3/smbwrapper/wrapped.c @@ -37,6 +37,61 @@ __asm__(".globl __open; __open = open"); return real_open(name, flags, mode); } +#ifdef HAVE_OPEN64 + int open64(const char *name, int flags, mode_t mode) +{ + if (smbw_path(name)) { + return smbw_open(name, flags, mode); + } + + return real_open64(name, flags, mode); +} +#endif + +#ifdef HAVE_PREAD + ssize_t pread(int fd, void *buf, size_t size, off_t ofs) +{ + if (smbw_fd(fd)) { + return smbw_pread(fd, buf, size, ofs); + } + + return real_pread(fd, buf, size, ofs); +} +#endif + +#ifdef HAVE_PREAD64 + ssize_t pread64(int fd, void *buf, size_t size, off64_t ofs) +{ + if (smbw_fd(fd)) { + return smbw_pread(fd, buf, size, ofs); + } + + return real_pread64(fd, buf, size, ofs); +} +#endif + +#ifdef HAVE_PWRITE + ssize_t pwrite(int fd, void *buf, size_t size, off_t ofs) +{ + if (smbw_fd(fd)) { + return smbw_pwrite(fd, buf, size, ofs); + } + + return real_pwrite(fd, buf, size, ofs); +} +#endif + +#ifdef HAVE_PWRITE64 + ssize_t pwrite64(int fd, void *buf, size_t size, off64_t ofs) +{ + if (smbw_fd(fd)) { + return smbw_pwrite(fd, buf, size, ofs); + } + + return real_pwrite64(fd, buf, size, ofs); +} +#endif + #ifdef HAVE___CHDIR __asm__(".globl __chdir; __chdir = chdir"); @@ -628,6 +683,11 @@ __asm__(".globl _write; _write = write"); { return open(path, O_WRONLY|O_CREAT|O_TRUNC, mode); } + + int creat64(const char *path, mode_t mode) +{ + return open64(path, O_WRONLY|O_CREAT|O_TRUNC, mode); +} #endif #ifdef HAVE_STAT64 |