r1467 - trunk/varnish-cache/lib/libvarnish

des at projects.linpro.no des at projects.linpro.no
Wed May 23 10:14:11 CEST 2007


Author: des
Date: 2007-05-23 10:14:11 +0200 (Wed, 23 May 2007)
New Revision: 1467

Modified:
   trunk/varnish-cache/lib/libvarnish/flopen.c
Log:
>From FreeBSD: if (flags & O_TRUNC), don't truncate the file until we've
successfully locked it.


Modified: trunk/varnish-cache/lib/libvarnish/flopen.c
===================================================================
--- trunk/varnish-cache/lib/libvarnish/flopen.c	2007-05-22 16:05:55 UTC (rev 1466)
+++ trunk/varnish-cache/lib/libvarnish/flopen.c	2007-05-23 08:14:11 UTC (rev 1467)
@@ -26,7 +26,7 @@
  *
  * $Id$
  * Derived from:
- * $FreeBSD: src/lib/libutil/flopen.c,v 1.4 2007/05/10 15:01:42 des Exp $
+ * $FreeBSD: src/lib/libutil/flopen.c,v 1.5 2007/05/23 08:12:34 des Exp $
  */
 
 #include <sys/file.h>
@@ -42,7 +42,7 @@
 int
 flopen(const char *path, int flags, ...)
 {
-	int fd, operation, serrno;
+	int fd, operation, serrno, truncate;
 	struct stat sb, fsb;
 	mode_t mode;
 
@@ -63,6 +63,9 @@
 	if (flags & O_NONBLOCK)
 		operation |= LOCK_NB;
 
+	truncate = (flags & O_TRUNC);
+	flags |= ~O_TRUNC;
+
 	for (;;) {
 		if ((fd = open(path, flags, mode)) == -1)
 			/* non-existent or no access */
@@ -92,6 +95,13 @@
 			close(fd);
 			continue;
 		}
+		if (truncate && ftruncate(fd, 0) != 0) {
+			/* can't happen [tm] */
+			serrno = errno;
+			close(fd);
+			errno = serrno;
+			return (-1);
+		}
 		return (fd);
 	}
 }




More information about the varnish-commit mailing list