86 lines
2.1 KiB
86 lines
2.1 KiB
--- 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 |
|
/*
|
|
|