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++;
 }
openSUSE Build Service is sponsored by