You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.1 KiB
87 lines
2.1 KiB
10 years ago
|
--- cdrkit-1.1.11.old/genisoimage/tree.c 2008-10-21 19:57:47.000000000 -0400
|
||
|
+++ cdrkit-1.1.11/genisoimage/tree.c 2013-12-06 00:23:18.489622668 -0500
|
||
|
@@ -1139,8 +1139,9 @@
|
||
|
scan_directory_tree(struct directory *this_dir, char *path,
|
||
|
struct directory_entry *de)
|
||
|
{
|
||
|
- DIR *current_dir;
|
||
|
+ int current_file;
|
||
|
char whole_path[PATH_MAX];
|
||
|
+ struct dirent **d_list;
|
||
|
struct dirent *d_entry;
|
||
|
struct directory *parent;
|
||
|
int dflag;
|
||
|
@@ -1164,7 +1165,8 @@
|
||
|
this_dir->dir_flags |= DIR_WAS_SCANNED;
|
||
|
|
||
|
errno = 0; /* Paranoia */
|
||
|
- current_dir = opendir(path);
|
||
|
+ //current_dir = opendir(path);
|
||
|
+ current_file = scandir(path, &d_list, NULL, alphasort);
|
||
|
d_entry = NULL;
|
||
|
|
||
|
/*
|
||
|
@@ -1173,12 +1175,12 @@
|
||
|
*/
|
||
|
old_path = path;
|
||
|
|
||
|
- if (current_dir) {
|
||
|
+ if (current_file >= 0) {
|
||
|
errno = 0;
|
||
|
- d_entry = readdir(current_dir);
|
||
|
+ d_entry = d_list[0];
|
||
|
}
|
||
|
|
||
|
- if (!current_dir || !d_entry) {
|
||
|
+ if (current_file < 0 || !d_entry) {
|
||
|
int ret = 1;
|
||
|
|
||
|
#ifdef USE_LIBSCHILY
|
||
|
@@ -1191,8 +1193,8 @@
|
||
|
de->isorec.flags[0] &= ~ISO_DIRECTORY;
|
||
|
ret = 0;
|
||
|
}
|
||
|
- if (current_dir)
|
||
|
- closedir(current_dir);
|
||
|
+ if(d_list)
|
||
|
+ free(d_list);
|
||
|
return (ret);
|
||
|
}
|
||
|
#ifdef ABORT_DEEP_ISO_ONLY
|
||
|
@@ -1208,7 +1210,7 @@
|
||
|
errmsgno(EX_BAD, "use Rock Ridge extensions via -R or -r,\n");
|
||
|
errmsgno(EX_BAD, "or allow deep ISO9660 directory nesting via -D.\n");
|
||
|
}
|
||
|
- closedir(current_dir);
|
||
|
+ free(d_list);
|
||
|
return (1);
|
||
|
}
|
||
|
#endif
|
||
|
@@ -1250,13 +1252,13 @@
|
||
|
* The first time through, skip this, since we already asked
|
||
|
* for the first entry when we opened the directory.
|
||
|
*/
|
||
|
- if (dflag)
|
||
|
- d_entry = readdir(current_dir);
|
||
|
+ if (dflag && current_file >= 0)
|
||
|
+ d_entry = d_list[current_file];
|
||
|
dflag++;
|
||
|
|
||
|
- if (!d_entry)
|
||
|
+ if (current_file < 0)
|
||
|
break;
|
||
|
-
|
||
|
+ current_file--;
|
||
|
/* OK, got a valid entry */
|
||
|
|
||
|
/* If we do not want all files, then pitch the backups. */
|
||
|
@@ -1348,7 +1350,7 @@
|
||
|
insert_file_entry(this_dir, whole_path, d_entry->d_name);
|
||
|
#endif /* APPLE_HYB */
|
||
|
}
|
||
|
- closedir(current_dir);
|
||
|
+ free(d_list);
|
||
|
|
||
|
#ifdef APPLE_HYB
|
||
|
/*
|