Bugfix: When a broken symlink was found in a directory, the
directory list operation was aborted. This lead to empty directories, or directories with too few entries. git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/trunk/rdesktop@697 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
parent
efef8750a8
commit
fbd632d425
18
disk.c
18
disk.c
@ -840,13 +840,23 @@ disk_query_directory(HANDLE handle, uint32 info_class, char *pattern, STREAM out
|
|||||||
// Get information for directory entry
|
// Get information for directory entry
|
||||||
sprintf(fullpath, "%s/%s", dirname, pdirent->d_name);
|
sprintf(fullpath, "%s/%s", dirname, pdirent->d_name);
|
||||||
|
|
||||||
/* JIF
|
|
||||||
printf("Stat: %s\n", fullpath); */
|
|
||||||
if (stat(fullpath, &fstat))
|
if (stat(fullpath, &fstat))
|
||||||
{
|
{
|
||||||
perror("stat");
|
switch (errno)
|
||||||
|
{
|
||||||
|
case ENOENT:
|
||||||
|
case ELOOP:
|
||||||
|
case EACCES:
|
||||||
|
/* These are non-fatal errors. */
|
||||||
|
memset(&fstat, 0, sizeof(fstat));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* Fatal error. By returning STATUS_NO_SUCH_FILE,
|
||||||
|
the directory list operation will be aborted */
|
||||||
|
perror(fullpath);
|
||||||
out_uint8(out, 0);
|
out_uint8(out, 0);
|
||||||
return STATUS_ACCESS_DENIED;
|
return STATUS_NO_SUCH_FILE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (S_ISDIR(fstat.st_mode))
|
if (S_ISDIR(fstat.st_mode))
|
||||||
|
Loading…
Reference in New Issue
Block a user