[patch] basic seeking support for XFILE
Josef Zlomek
josef.zlomek at email.cz
Tue Aug 20 08:27:57 GMT 2002
Hello,
this patch adds support for SEEK_SET and SEEK_END seeking for XFILE in the HEAD
branch. I need it for the smbclient's command reput (i.e. continue with the put
where it finished when the connection had broken or transfer had been terminated).
Patch follows.
Josef
diff -ur samba.cvs/source/lib/xfile.c samba.seek/source/lib/xfile.c
--- samba.cvs/source/lib/xfile.c Fri Jul 19 06:00:21 2002
+++ samba.seek/source/lib/xfile.c Tue Aug 20 08:18:07 2002
@@ -25,7 +25,7 @@
XFILE replaces stdio. It is less efficient, but at least it works
when you have lots of files open
- The main restriction on XFILE is that it doesn't support seeking,
+ The main restriction on XFILE is that it doesn't support SEEK_CUR
and doesn't support O_RDWR. That keeps the code simple.
*/
@@ -341,3 +341,33 @@
*s = 0;
return s0;
}
+
+off_t x_lseek(XFILE *f, off_t offset, int whence)
+{
+ if (x_ferror(f))
+ return -1;
+
+ /* only SEEK_SET and SEEK_END are supported */
+ /* SEEK_CUR needs internal offset counter */
+ if (whence != SEEK_SET && whence != SEEK_END) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ /* empty the buffer */
+ switch (f->open_flags & O_ACCMODE) {
+ case O_RDONLY:
+ f->bufused = 0;
+ break;
+ case O_WRONLY:
+ if (x_fflush(f) != 0)
+ return -1;
+ break;
+ default:
+ errno = EINVAL;
+ return -1;
+ }
+
+ f->flags &= ~X_FLAG_EOF;
+ return sys_lseek(f->fd, offset, whence);
+}
More information about the samba-technical
mailing list