820 |
|
|
821 |
switch (info_class) |
switch (info_class) |
822 |
{ |
{ |
823 |
case 3: //FIXME: Why 3? |
case FileBothDirectoryInformation: |
824 |
|
|
825 |
// If a search pattern is received, remember this pattern, and restart search |
// If a search pattern is received, remember this pattern, and restart search |
826 |
if (pattern[0] != 0) |
if (pattern[0] != 0) |
840 |
// Get information for directory entry |
// Get information for directory entry |
841 |
sprintf(fullpath, "%s/%s", dirname, pdirent->d_name); |
sprintf(fullpath, "%s/%s", dirname, pdirent->d_name); |
842 |
|
|
|
/* JIF |
|
|
printf("Stat: %s\n", fullpath); */ |
|
843 |
if (stat(fullpath, &fstat)) |
if (stat(fullpath, &fstat)) |
844 |
{ |
{ |
845 |
perror("stat"); |
switch (errno) |
846 |
out_uint8(out, 0); |
{ |
847 |
return STATUS_ACCESS_DENIED; |
case ENOENT: |
848 |
|
case ELOOP: |
849 |
|
case EACCES: |
850 |
|
/* These are non-fatal errors. */ |
851 |
|
memset(&fstat, 0, sizeof(fstat)); |
852 |
|
break; |
853 |
|
default: |
854 |
|
/* Fatal error. By returning STATUS_NO_SUCH_FILE, |
855 |
|
the directory list operation will be aborted */ |
856 |
|
perror(fullpath); |
857 |
|
out_uint8(out, 0); |
858 |
|
return STATUS_NO_SUCH_FILE; |
859 |
|
} |
860 |
} |
} |
861 |
|
|
862 |
if (S_ISDIR(fstat.st_mode)) |
if (S_ISDIR(fstat.st_mode)) |
900 |
break; |
break; |
901 |
|
|
902 |
default: |
default: |
903 |
|
/* FIXME: Support FileDirectoryInformation, |
904 |
|
FileFullDirectoryInformation, and |
905 |
|
FileNamesInformation */ |
906 |
|
|
907 |
unimpl("IRP Query Directory sub: 0x%x\n", info_class); |
unimpl("IRP Query Directory sub: 0x%x\n", info_class); |
908 |
return STATUS_INVALID_PARAMETER; |
return STATUS_INVALID_PARAMETER; |