73 lines
3.3 KiB
C
73 lines
3.3 KiB
C
/*****************************************************************************\
|
|
* *
|
|
* Filename GetFileAttributesEx.c *
|
|
* *
|
|
* Description: UTF-8 version of WIN32's GetFileAttributesEx() *
|
|
* *
|
|
* Notes: *
|
|
* *
|
|
* History: *
|
|
* 2016-09-12 JFL Created this file. *
|
|
* *
|
|
* Copyright 2016 Hewlett Packard Enterprise Development LP *
|
|
* Licensed under the Apache 2.0 license - www.apache.org/licenses/LICENSE-2.0 *
|
|
\*****************************************************************************/
|
|
|
|
#ifdef _WIN32 /* Automatically defined when targeting a Win32 application */
|
|
|
|
#include <windows.h> /* Also includes MsvcLibX' WIN32 UTF-8 extensions */
|
|
#include "msvcLimits.h"
|
|
|
|
/*---------------------------------------------------------------------------*\
|
|
* *
|
|
| Function: GetFileAttributesExU |
|
|
| |
|
|
| Description: Get file information for a UTF-8 pathname. |
|
|
| |
|
|
| Parameters: See WIN32's GetFileAttributesEx() |
|
|
| |
|
|
| Return value: 1 = done, or 0 if error |
|
|
| |
|
|
| Notes: Sets the file length, dates, attributes, etc. |
|
|
| |
|
|
| History: |
|
|
| 2016-09-12 JFL Created this routine. |
|
|
* *
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
BOOL WINAPI GetFileAttributesExU(
|
|
LPCTSTR lpFileName,
|
|
GET_FILEEX_INFO_LEVELS fInfoLevelId,
|
|
LPVOID lpFileInformation
|
|
) {
|
|
WIN32_FILE_ATTRIBUTE_DATA *lpFileData = lpFileInformation;
|
|
WCHAR *pwszName;
|
|
BOOL bDone;
|
|
int n;
|
|
|
|
/* Allocate a buffer large enough for any Unicode pathname */
|
|
pwszName = (void *)LocalAlloc(LMEM_FIXED, UNICODE_PATH_MAX * sizeof(WCHAR));
|
|
if (!pwszName) return 0;
|
|
|
|
/* Convert the pathname to a unicode string, with the proper extension prefixes if it's longer than 260 bytes */
|
|
n = MultiByteToWidePath(CP_UTF8, /* CodePage, (CP_ACP, CP_OEMCP, CP_UTF8, ...) */
|
|
lpFileName, /* lpMultiByteStr, */
|
|
pwszName, /* lpWideCharStr, */
|
|
UNICODE_PATH_MAX /* cchWideChar, */
|
|
);
|
|
if (!n) {
|
|
LocalFree((HLOCAL)pwszName);
|
|
return 0;
|
|
}
|
|
|
|
/* Get the file information, using the Unicode version of the function */
|
|
bDone = GetFileAttributesExW(pwszName, fInfoLevelId, lpFileData);
|
|
|
|
/* Cleanup and return */
|
|
LocalFree((HLOCAL)pwszName);
|
|
return bDone;
|
|
}
|
|
|
|
#endif /* defined(_WIN32) */
|
|
|