[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