svn commit: r309109 - head/lib/libutil
Dag-Erling Smørgrav
des at FreeBSD.org
Thu Nov 24 14:50:22 UTC 2016
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 at 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);
}
}
More information about the svn-src-all
mailing list