[dovecot-cvs] dovecot/src/lib sendfile-util.c,1.2,1.3

cras at procontrol.fi cras at procontrol.fi
Tue Jan 14 22:59:59 EET 2003


Update of /home/cvs/dovecot/src/lib
In directory danu:/tmp/cvs-serv13771/src/lib

Modified Files:
	sendfile-util.c 
Log Message:
Support for Solaris sendfilev(). Entirely untested, hope it works.



Index: sendfile-util.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/sendfile-util.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- sendfile-util.c	28 Oct 2002 03:35:05 -0000	1.2
+++ sendfile-util.c	14 Jan 2003 20:59:57 -0000	1.3
@@ -68,6 +68,34 @@
 	else
 		return -1;
 }
+
+#elif defined (HAVE_SOLARIS_SENDFILEV)
+
+#include <sys/sendfile.h>
+
+ssize_t safe_sendfile(int out_fd, int in_fd, uoff_t *offset, size_t count)
+{
+	struct sendfilevec vec;
+	size_t sbytes;
+	ssize_t ret;
+
+	i_assert(count <= SSIZE_T_MAX);
+
+	vec.sfv_fd = in_fd;
+	vec.sfv_flag = 0;
+	vec.sfv_off = *offset;
+	vec.sfv_len = count;
+
+	ret = sendfilev(out_fd, &vec, 1, &sbytes);
+
+	*offset += sbytes;
+
+	if (ret >= 0 || (ret < 0 && errno == EAGAIN && sbytes > 0))
+		return (ssize_t)sbytes;
+	else
+		return -1;
+}
+
 #else
 ssize_t safe_sendfile(int out_fd __attr_unused__, int in_fd __attr_unused__,
 		      uoff_t *offset __attr_unused__,
@@ -76,4 +104,5 @@
 	errno = EINVAL;
 	return -1;
 }
+
 #endif




More information about the dovecot-cvs mailing list