File pciutils-ocloexec.patch of Package pciutils

diff -aur pciutils-3.1.9.orig/lib/dump.c pciutils-3.1.9/lib/dump.c
--- pciutils-3.1.9.orig/lib/dump.c	2011-11-14 06:08:39.000000000 -0500
+++ pciutils-3.1.9/lib/dump.c	2012-01-28 20:53:40.446518788 -0500
@@ -64,7 +64,7 @@
 
   if (!name)
     a->error("dump: File name not given.");
-  if (!(f = fopen(name, "r")))
+  if (!(f = fopen(name, "re")))
     a->error("dump: Cannot open %s: %s", name, strerror(errno));
   while (fgets(buf, sizeof(buf)-1, f))
     {
diff -aur pciutils-3.1.9.orig/lib/names-cache.c pciutils-3.1.9/lib/names-cache.c
--- pciutils-3.1.9.orig/lib/names-cache.c	2011-01-07 16:04:28.000000000 -0500
+++ pciutils-3.1.9/lib/names-cache.c	2012-01-28 20:56:42.181246792 -0500
@@ -62,7 +62,7 @@
       return 0;
     }
 
-  f = fopen(name, "rb");
+  f = fopen(name, "rbe");
   if (!f)
     {
       a->debug("Cache file does not exist\n");
@@ -135,7 +135,7 @@
   tmpname = pci_malloc(a, strlen(name) + strlen(hostname) + 64);
   sprintf(tmpname, "%s.tmp-%s-%d", name, hostname, this_pid);
 
-  f = fopen(tmpname, "wb");
+  f = fopen(tmpname, "wbe");
   if (!f)
     {
       a->warning("Cannot write to %s: %s", name, strerror(errno));
diff -aur pciutils-3.1.9.orig/lib/names-parse.c pciutils-3.1.9/lib/names-parse.c
--- pciutils-3.1.9.orig/lib/names-parse.c	2011-01-07 16:04:28.000000000 -0500
+++ pciutils-3.1.9/lib/names-parse.c	2012-01-28 20:56:11.462630829 -0500
@@ -52,7 +52,7 @@
 typedef FILE * pci_file;
 #define pci_gets(f, l, s)	fgets(l, s, f)
 #define pci_eof(f)		feof(f)
-#define pci_open(a)		fopen(a->id_file_name, "r")
+#define pci_open(a)		fopen(a->id_file_name, "re")
 #define pci_close(f)		fclose(f)
 #define PCI_ERROR(f, err)	if (!err && ferror(f))	err = "I/O error";
 #endif
diff -aur pciutils-3.1.9.orig/lib/proc.c pciutils-3.1.9/lib/proc.c
--- pciutils-3.1.9.orig/lib/proc.c	2011-01-07 16:04:28.000000000 -0500
+++ pciutils-3.1.9/lib/proc.c	2012-01-28 20:55:32.827113838 -0500
@@ -62,7 +62,7 @@
 
   if (snprintf(buf, sizeof(buf), "%s/devices", pci_get_param(a, "proc.path")) == sizeof(buf))
     a->error("File name too long");
-  f = fopen(buf, "r");
+  f = fopen(buf, "re");
   if (!f)
     a->error("Cannot open %s", buf);
   while (fgets(buf, sizeof(buf)-1, f))
@@ -129,7 +129,7 @@
       if (e < 0 || e >= (int) sizeof(buf))
 	a->error("File name too long");
       a->fd_rw = a->writeable || rw;
-      a->fd = open(buf, a->fd_rw ? O_RDWR : O_RDONLY);
+      a->fd = open(buf, (a->fd_rw ? O_RDWR : O_RDONLY) | O_CLOEXEC);
       if (a->fd < 0)
 	{
 	  e = snprintf(buf, sizeof(buf), "%s/%04x:%02x/%02x.%d",
@@ -137,7 +137,7 @@
 		       d->domain, d->bus, d->dev, d->func);
 	  if (e < 0 || e >= (int) sizeof(buf))
 	    a->error("File name too long");
-	  a->fd = open(buf, a->fd_rw ? O_RDWR : O_RDONLY);
+	  a->fd = open(buf, (a->fd_rw ? O_RDWR : O_RDONLY) | O_CLOEXEC);
 	}
       if (a->fd < 0)
 	a->warning("Cannot open %s", buf);
diff -aur pciutils-3.2.0.orig//lib/sysfs.c pciutils-3.2.0/lib/sysfs.c
--- pciutils-3.2.0.orig//lib/sysfs.c	2013-04-01 15:23:18.000000000 +0200
+++ pciutils-3.2.0/lib/sysfs.c	2013-07-30 23:30:16.013365441 +0200
@@ -95,7 +95,7 @@
   char namebuf[OBJNAMELEN];
 
   sysfs_obj_name(d, object, namebuf);
-  fd = open(namebuf, O_RDONLY);
+  fd = open(namebuf, O_RDONLY|O_CLOEXEC);
   if (fd < 0)
     {
       if (mandatory)
@@ -130,7 +130,7 @@
   int i;
 
   sysfs_obj_name(d, "resource", namebuf);
-  file = fopen(namebuf, "r");
+  file = fopen(namebuf, "re");
   if (!file)
     a->error("Cannot open %s: %s", namebuf, strerror(errno));
   for (i = 0; i < 7; i++)
@@ -235,7 +235,7 @@
       n = snprintf(namebuf, OBJNAMELEN, "%s/%s/%s", dirname, entry->d_name, "address");
       if (n < 0 || n >= OBJNAMELEN)
 	a->error("File name too long");
-      file = fopen(namebuf, "r");
+      file = fopen(namebuf, "re");
       /*
        * Old versions of Linux had a fakephp which didn't have an 'address'
        * file.  There's no useful information to be gleaned from these
@@ -303,7 +303,7 @@
       if (a->fd_vpd < 0)
 	{
 	  sysfs_obj_name(d, "vpd", namebuf);
-	  a->fd_vpd = open(namebuf, O_RDONLY);
+	  a->fd_vpd = open(namebuf, O_RDONLY|O_CLOEXEC);
 	  /* No warning on error; vpd may be absent or accessible only to root */
 	}
       return a->fd_vpd;
@@ -313,7 +313,7 @@
     {
       sysfs_obj_name(d, "config", namebuf);
       a->fd_rw = a->writeable || intent == SETUP_WRITE_CONFIG;
-      a->fd = open(namebuf, a->fd_rw ? O_RDWR : O_RDONLY);
+      a->fd = open(namebuf, (a->fd_rw ? O_RDWR : O_RDONLY) | O_CLOEXEC);
       if (a->fd < 0)
 	a->warning("Cannot open %s", namebuf);
       a->fd_pos = 0;