- added pread pread64 pwrite pwrite64 and open64
authorAndrew Tridgell <tridge@samba.org>
Mon, 5 Oct 1998 02:31:39 +0000 (02:31 +0000)
committerAndrew Tridgell <tridge@samba.org>
Mon, 5 Oct 1998 02:31:39 +0000 (02:31 +0000)
- fixed utime() for null tbuf

source/smbwrapper/realcalls.h
source/smbwrapper/smbw.c
source/smbwrapper/wrapped.c

index 9017db3f0a99dbecb9259b842b2c5ded13339729..9a13ab9300d49d35a1381781d23e1c60edc66418 100644 (file)
 #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)))
index 633e63ef8d5b5a4dd19cf72f5efb92925186f39e..dbc4e2ddd9b867f5a9d11a70e2415930ae1dcd1c 100644 (file)
@@ -606,6 +606,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()
 *******************************************************/
@@ -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()
 *******************************************************/
@@ -674,6 +709,38 @@ ssize_t smbw_write(int fd, void *buf, size_t count)
        return ret;
 }
 
+/***************************************************** 
+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()
 *******************************************************/
@@ -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;
        }
index 422f3abbf5229f6ee93b2fc0c114dc7724a237da..025bbcc2db8bd947cc0913617d7b98b1980618c4 100644 (file)
@@ -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