nixpkgs/pkgs/tools/system/collectd/readdir-fix.patch

56 lines
1.3 KiB
Diff

diff -Naur collectd-5.6.0/src/vserver.c collectd-5.6.0/src/vserver.c
--- collectd-5.6.0/src/vserver.c 2016-09-11 01:10:25.279038699 -0700
+++ collectd-5.6.0/src/vserver.c 2016-09-25 07:44:40.771177458 -0700
@@ -132,15 +132,8 @@
static int vserver_read (void)
{
-#if NAME_MAX < 1024
-# define DIRENT_BUFFER_SIZE (sizeof (struct dirent) + 1024 + 1)
-#else
-# define DIRENT_BUFFER_SIZE (sizeof (struct dirent) + NAME_MAX + 1)
-#endif
-
DIR *proc;
struct dirent *dent; /* 42 */
- char dirent_buffer[DIRENT_BUFFER_SIZE];
errno = 0;
proc = opendir (PROCDIR);
@@ -165,19 +158,23 @@
int status;
- status = readdir_r (proc, (struct dirent *) dirent_buffer, &dent);
- if (status != 0)
- {
- char errbuf[4096];
- ERROR ("vserver plugin: readdir_r failed: %s",
- sstrerror (errno, errbuf, sizeof (errbuf)));
- closedir (proc);
- return (-1);
- }
- else if (dent == NULL)
+ errno = 0;
+ dent = readdir (proc);
+ if (dent == NULL)
{
- /* end of directory */
- break;
+ if (errno != 0)
+ {
+ char errbuf[4096];
+ ERROR ("vserver plugin: readdir failed: %s",
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ closedir (proc);
+ return (-1);
+ }
+ else
+ {
+ /* end of directory */
+ break;
+ }
}
if (dent->d_name[0] == '.')