File reproducible.patch of Package viruskiller
# PATCH-FIX-OPENSUSE
(boo#1041090)
When building packages for openSUSE, we do so in disposable VMs, which means every build has a new filesystem and thus ordering of files differs for the readdir call in src/pak.cpp
Index: viruskiller-1.03/src/pak.cpp
===================================================================
--- viruskiller-1.03.orig/src/pak.cpp
+++ viruskiller-1.03/src/pak.cpp
@@ -81,7 +81,9 @@ void countFiles(const char *dirName)
void recurseDirectory(const char *dirName)
{
- DIR *dirp, *dirp2;
+ DIR *dirp2;
+ int n;
+ struct dirent **namelist;
dirent *dfile;
gzFile fp;
FILE *infile;
@@ -90,9 +92,9 @@ void recurseDirectory(const char *dirNam
uLongf cSize = 0;
uLongf fSize = 0;
- dirp = opendir(dirName);
+ n = scandir(dirName, &namelist, NULL, alphasort);
- if (dirp == NULL)
+ if (n == -1)
{
printf("%s: Directory does not exist or is not accessable\n", dirName);
return;
@@ -101,10 +103,12 @@ void recurseDirectory(const char *dirNam
float percentage;
long filesize;
- while ((dfile = readdir(dirp)))
+ while (n--)
{
+ dfile = namelist[n];
if (dfile->d_name[0] == '.')
{
+ free(dfile);
continue;
}
@@ -123,7 +127,6 @@ void recurseDirectory(const char *dirNam
if (!infile)
{
printf("Couldn't open %s for reading!\n", filename);
- closedir(dirp);
gzclose(pak);
exit(1);
}
@@ -155,7 +158,6 @@ void recurseDirectory(const char *dirNam
if (!fp)
{
printf("Couldn't open %s for reading!\n", filename);
- closedir(dirp);
gzclose(pak);
exit(1);
}
@@ -181,9 +183,10 @@ void recurseDirectory(const char *dirNam
fflush(stdout);
}
}
+ free(dfile);
}
- closedir(dirp);
+ free(namelist);
dirs++;
}