Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Nov 2016 14:50:21 +0000 (UTC)
From:      =?UTF-8?Q?Dag-Erling_Sm=c3=b8rgrav?= <des@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r309109 - head/lib/libutil
Message-ID:  <201611241450.uAOEoLA5079215@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: des
Date: Thu Nov 24 14:50:21 2016
New Revision: 309109
URL: https://svnweb.freebsd.org/changeset/base/309109

Log:
  Add a warning against modifying this code without understanding it, and
  an example of how not to make it more portable.  I've had this lying
  around uncommitted since 2009...

Modified:
  head/lib/libutil/flopen.c

Modified: head/lib/libutil/flopen.c
==============================================================================
--- head/lib/libutil/flopen.c	Thu Nov 24 14:48:46 2016	(r309108)
+++ head/lib/libutil/flopen.c	Thu Nov 24 14:50:21 2016	(r309109)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2007 Dag-Erling Coïdan Smørgrav
+ * Copyright (c) 2007-2009 Dag-Erling Coïdan Smørgrav
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,6 +37,14 @@ __FBSDID("$FreeBSD$");
 
 #include <libutil.h>
 
+/*
+ * Reliably open and lock a file.
+ *
+ * DO NOT, UNDER PAIN OF DEATH, modify this code without first reading the
+ * revision history and discussing your changes with <des@freebsd.org>.
+ * Don't be fooled by the code's apparent simplicity; there would be no
+ * need for this function if it was as easy to get right as you think.
+ */
 int
 flopen(const char *path, int flags, ...)
 {
@@ -100,6 +108,14 @@ flopen(const char *path, int flags, ...)
 			errno = serrno;
 			return (-1);
 		}
+#ifdef DONT_EVEN_THINK_ABOUT_IT
+		if (fcntl(fd, F_SETFD, FD_CLOEXEC) != 0) {
+			serrno = errno;
+			(void)close(fd);
+			errno = serrno;
+			return (-1);
+		}
+#endif
 		return (fd);
 	}
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201611241450.uAOEoLA5079215>