ReactOS 0.4.16-dev-306-g647d351
fullpath.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS CRT library
4 * FILE: lib/sdk/crt/stdlib/fullpath.c
5 * PURPOSE: Gets the fullpathname
6 * PROGRAMER: Pierre Schweitzer (pierre.schweitzer@reactos.org)
7 */
8
9#include <precomp.h>
10#include <tchar.h>
11
12/*
13 * @implemented
14 */
15_TCHAR* _tfullpath(_TCHAR* absPath, const _TCHAR* relPath, size_t maxLength)
16{
19 DWORD retval;
20
21 /* First check if entry relative path was given */
22 if (!relPath || relPath[0] == 0)
23 {
24 /* If not, just try to return current dir */
25 return _tgetcwd(absPath, maxLength);
26 }
27
28 /* If no output buffer was given */
29 if (!absPath)
30 {
31 /* Allocate one with fixed length */
34 if (!lpBuffer)
35 {
36 errno = ENOMEM;
37 return NULL;
38 }
39 }
40 else
41 {
42 lpBuffer = absPath;
43 }
44
45 /* Really get full path */
46 retval = GetFullPathName(relPath, (DWORD)maxLength, lpBuffer, &lpFilePart);
47 /* Check for failures */
48 if (retval > maxLength)
49 {
50 /* Path too long, free (if needed) and return */
51 if (!absPath)
52 {
54 }
55
56 errno = ERANGE;
57 return NULL;
58 }
59 else if (!retval)
60 {
61 /* Other error, free (if needed), translate error, and return */
62 if (!absPath)
63 {
65 }
66
68 return NULL;
69 }
70
71 /* Return buffer. Up to the caller to free if needed */
72 return lpBuffer;
73}
#define ENOMEM
Definition: acclib.h:84
#define ERANGE
Definition: acclib.h:92
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizei maxLength
Definition: glext.h:6877
#define _tfullpath
Definition: tchar.h:679
#define _tgetcwd
Definition: tchar.h:673
char _TCHAR
Definition: tchar.h:1392
void _dosmaperr(unsigned long oserrcode)
Definition: errno.c:79
#define errno
Definition: errno.h:18
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
_In_ LPCSTR _In_opt_ LPCSTR _In_ DWORD _Out_opt_ LPSTR * lpFilePart
Definition: winbase.h:3100
#define GetFullPathName
Definition: winbase.h:3846