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 /source3/smbwrapper/smbw.c | |
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)
Diffstat (limited to 'source3/smbwrapper/smbw.c')
-rw-r--r-- | source3/smbwrapper/smbw.c | 74 |
1 files changed, 71 insertions, 3 deletions
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; } |