summaryrefslogtreecommitdiff
path: root/source3/smbwrapper/smbw.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1998-10-05 02:31:39 +0000
committerAndrew Tridgell <tridge@samba.org>1998-10-05 02:31:39 +0000
commit92b21b3e82d0c559ef41d40d13c3b790d14daa65 (patch)
tree000e379a0856c1741019105597544808c4af2d98 /source3/smbwrapper/smbw.c
parent5d14f8932469f232960a255170a99a308a0ffcf3 (diff)
downloadsamba-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.c74
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;
}