Redefine readdir() on IsoFileSource, to skip "." and ".." dirs.

This commit is contained in:
Vreixo Formoso 2007-12-11 22:41:18 +01:00
parent 008871cfd8
commit 0306bb5daf
2 changed files with 14 additions and 6 deletions

View File

@ -281,12 +281,18 @@ int lfs_readdir(IsoFileSource *src, IsoFileSource **child)
size_t a, b;
int ret;
entry = readdir(data->info.dir);
if (entry == NULL) {
if (errno == EBADF)
return ISO_FILE_ERROR;
else
return 0; /* EOF */
/* while to skip "." and ".." dirs */
while (1) {
entry = readdir(data->info.dir);
if (entry == NULL) {
if (errno == EBADF)
return ISO_FILE_ERROR;
else
return 0; /* EOF */
}
if (strcmp(entry->d_name,".") && strcmp(entry->d_name,"..")) {
break;
}
}
/* constructs the new path */

View File

@ -153,6 +153,8 @@ struct Iso_File_Source
* The dir must be open() before calling this, and close() when no more
* needed. Only valid for dirs.
*
* Note that "." and ".." children MUST NOT BE returned.
*
* @param child
* pointer to be filled with the given child. Undefined on error or OEF
* @return