Skip to content

Commit

Permalink
app_isdir() cleanup
Browse files Browse the repository at this point in the history
I think it's better to use `GetFileAttributes` to obtain the attributes
of a file than `FindFirstFile`. If the input name contains `*`, this
function should return failure rather than check whether the first match
happens to be a file or a directory.

Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
(Merged from #3991)

(cherry picked from commit 5bd051a)
  • Loading branch information
xiaoyinl authored and Andy Polyakov committed Jul 31, 2017
1 parent a08f266 commit e29ae5b
Showing 1 changed file with 9 additions and 11 deletions.
20 changes: 9 additions & 11 deletions apps/apps.c
Original file line number Diff line number Diff line change
Expand Up @@ -2255,29 +2255,27 @@ int app_access(const char* name, int flag)
#ifdef _WIN32
int app_isdir(const char *name)
{
HANDLE hList;
WIN32_FIND_DATA FileData;
DWORD attr;
# if defined(UNICODE) || defined(_UNICODE)
size_t i, len_0 = strlen(name) + 1;
WCHAR tempname[MAX_PATH];

if (len_0 > OSSL_NELEM(FileData.cFileName))
if (len_0 > MAX_PATH)
return -1;

# if !defined(_WIN32_WCE) || _WIN32_WCE>=101
if (!MultiByteToWideChar
(CP_ACP, 0, name, len_0, FileData.cFileName, len_0))
if (!MultiByteToWideChar(CP_ACP, 0, name, len_0, tempname, MAX_PATH))
# endif
for (i = 0; i < len_0; i++)
FileData.cFileName[i] = (WCHAR)name[i];
tempname[i] = (WCHAR)name[i];

hList = FindFirstFile(FileData.cFileName, &FileData);
attr = GetFileAttributes(tempname);
# else
hList = FindFirstFile(name, &FileData);
attr = GetFileAttributes(name);
# endif
if (hList == INVALID_HANDLE_VALUE)
if (attr == INVALID_FILE_ATTRIBUTES)
return -1;
FindClose(hList);
return ((FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0);
return ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0);
}
#else
# include <sys/stat.h>
Expand Down

0 comments on commit e29ae5b

Please sign in to comment.