implemented GetFinalPathNameByHandleA() and added stub for
GetFinalPathNameByHandleW()
Modified: trunk/reactos/lib/kernel32/file/file.c
Modified: trunk/reactos/lib/kernel32/kernel32.def
Modified: trunk/reactos/w32api/include/winbase.h
_____
Modified: trunk/reactos/lib/kernel32/file/file.c
--- trunk/reactos/lib/kernel32/file/file.c 2006-01-14 12:42:04 UTC
(rev 20849)
+++ trunk/reactos/lib/kernel32/file/file.c 2006-01-14 13:37:08 UTC
(rev 20850)
@@ -1600,4 +1600,87 @@
return TRUE;
}
+
+/*
+ * @implemented
+ */
+DWORD
+WINAPI
+GetFinalPathNameByHandleA(IN HANDLE hFile,
+ OUT LPSTR lpszFilePath,
+ IN DWORD cchFilePath,
+ IN DWORD dwFlags)
+{
+ WCHAR FilePathW[MAX_PATH];
+ UNICODE_STRING FilePathU;
+ DWORD PrevLastError;
+ DWORD Ret = 0;
+
+ if (cchFilePath != 0 &&
+ cchFilePath > sizeof(FilePathW) / sizeof(FilePathW[0]))
+ {
+ FilePathU.Length = 0;
+ FilePathU.MaximumLength = cchFilePath * sizeof(WCHAR);
+ FilePathU.Buffer = RtlAllocateHeap(RtlGetProcessHeap(),
+ 0,
+ FilePathU.MaximumLength);
+ if (FilePathU.Buffer == NULL)
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return 0;
+ }
+ }
+ else
+ {
+ FilePathU.Length = 0;
+ FilePathU.MaximumLength = sizeof(FilePathW);
+ FilePathU.Buffer = FilePathW;
+ }
+
+ /* save the last error code */
+ PrevLastError = GetLastError();
+ SetLastError(ERROR_SUCCESS);
+
+ /* call the unicode version that does all the work */
+ Ret = GetFinalPathNameByHandleW(hFile,
+ FilePathU.Buffer,
+ cchFilePath,
+ dwFlags);
+
+ if (GetLastError() == ERROR_SUCCESS)
+ {
+ /* no error, restore the last error code and convert the string
*/
+ SetLastError(PrevLastError);
+
+ Ret = FilenameU2A_FitOrFail(lpszFilePath,
+ cchFilePath,
+ &FilePathU);
+ }
+
+ /* free allocated memory if necessary */
+ if (FilePathU.Buffer != FilePathW)
+ {
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ FilePathU.Buffer);
+ }
+
+ return Ret;
+}
+
+
+/*
+ * @unimplemented
+ */
+DWORD
+WINAPI
+GetFinalPathNameByHandleW(IN HANDLE hFile,
+ OUT LPWSTR lpszFilePath,
+ IN DWORD cchFilePath,
+ IN DWORD dwFlags)
+{
+ UNIMPLEMENTED;
+ return 0;
+}
+
/* EOF */
_____
Modified: trunk/reactos/lib/kernel32/kernel32.def
--- trunk/reactos/lib/kernel32/kernel32.def 2006-01-14 12:42:04 UTC
(rev 20849)
+++ trunk/reactos/lib/kernel32/kernel32.def 2006-01-14 13:37:08 UTC
(rev 20850)
@@ -387,6 +387,8 @@
GetFileSizeEx@8
GetFileTime@16
GetFileType@4
+GetFinalPathNameByHandleA@16
+GetFinalPathNameByHandleW@16
GetFirmwareEnvironmentVariableA@16
GetFirmwareEnvironmentVariableW@16
GetFullPathNameA@16
_____
Modified: trunk/reactos/w32api/include/winbase.h
--- trunk/reactos/w32api/include/winbase.h 2006-01-14 12:42:04 UTC
(rev 20849)
+++ trunk/reactos/w32api/include/winbase.h 2006-01-14 13:37:08 UTC
(rev 20850)
@@ -1368,6 +1368,8 @@
DWORD WINAPI GetFileAttributesA(LPCSTR);
#if (_WIN32_WINNT >= 0x0600)
BOOL WINAPI GetFileAttributesByHandle(HANDLE,LPDWORD,DWORD);
+DWORD WINAPI GetFinalPathNameByHandleA(HANDLE,LPSTR,DWORD,DWORD);
+DWORD WINAPI GetFinalPathNameByHandleW(HANDLE,LPWSTR,DWORD,DWORD);
#endif
DWORD WINAPI GetFileAttributesW(LPCWSTR);
BOOL WINAPI GetFileAttributesExA(LPCSTR,GET_FILEEX_INFO_LEVELS,PVOID);
@@ -2042,8 +2044,11 @@
#define GetEnvironmentStrings GetEnvironmentStringsW
#define GetEnvironmentVariable GetEnvironmentVariableW
#define GetFileAttributes GetFileAttributesW
+#define GetFileAttributesEx GetFileAttributesExW
#define GetFileSecurity GetFileSecurityW
-#define GetFileAttributesEx GetFileAttributesExW
+#if (_WIN32_WINNT >= 0x0600)
+#define GetFinalPathNameByHandle GetFinalPathNameByHandleW
+#endif
#define GetFullPathName GetFullPathNameW
#define GetLogicalDriveStrings GetLogicalDriveStringsW
#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
@@ -2241,8 +2246,11 @@
#define GetDriveType GetDriveTypeA
#define GetEnvironmentVariable GetEnvironmentVariableA
#define GetFileAttributes GetFileAttributesA
+#define GetFileAttributesEx GetFileAttributesExA
#define GetFileSecurity GetFileSecurityA
-#define GetFileAttributesEx GetFileAttributesExA
+#if (_WIN32_WINNT >= 0x0600)
+#define GetFinalPathNameByHandle GetFinalPathNameByHandleA
+#endif
#define GetFullPathName GetFullPathNameA
#define GetLogicalDriveStrings GetLogicalDriveStringsA
#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)