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 <d...@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);
        }
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to