diff options
author | Xiaoyin Liu <xiaoyinl@users.noreply.github.com> | 2017-07-22 01:57:27 -0400 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2017-07-31 12:48:28 +0200 |
commit | 5bd051a0dcd4f04bc9ea197f74b34612b3fcca84 (patch) | |
tree | 1e16bfb34d4114cf81035795c27453fe1a354734 /apps | |
parent | 57c835aca765355298706dee407753aeb88b22f0 (diff) |
app_isdir() cleanup
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 https://github.com/openssl/openssl/pull/3991)
Diffstat (limited to 'apps')
-rw-r--r-- | apps/apps.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/apps/apps.c b/apps/apps.c index ad386a116a..e1228b3792 100644 --- a/apps/apps.c +++ b/apps/apps.c @@ -2294,29 +2294,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> |