ReactOS 0.4.15-dev-7934-g1dc8d80
getdcwd.c
Go to the documentation of this file.
1#include <precomp.h>
2#include <direct.h>
3#include <tchar.h>
4
5/*
6 * @implemented
7 *
8 * _getdcwd (MSVCRT.@)
9 *
10 * Get the current working directory on a given disk.
11 *
12 * PARAMS
13 * drive [I] Drive letter to get the current working directory from.
14 * buf [O] Destination for the current working directory.
15 * size [I] Length of drive in characters.
16 *
17 * RETURNS
18 * Success: If drive is NULL, returns an allocated string containing the path.
19 * Otherwise populates drive with the path and returns it.
20 * Failure: NULL. errno indicates the error.
21 */
23{
24 static _TCHAR* dummy;
25
26 TRACE(":drive %d(%c), size %d\n",drive, drive + 'A' - 1, size);
27
28 if (!drive || drive == _getdrive())
29 return _tgetcwd(buf,size); /* current */
30 else
31 {
33 _TCHAR drivespec[] = _T("A:");
34 int dir_len;
35
36 drivespec[0] += drive - 1;
37 if (GetDriveType(drivespec) < DRIVE_REMOVABLE)
38 {
40 return NULL;
41 }
42
43 /* GetFullPathName for X: means "get working directory on drive X",
44 * just like passing X: to SetCurrentDirectory means "switch to working
45 * directory on drive X". -Gunnar */
46 dir_len = GetFullPathName(drivespec,MAX_PATH,dir,&dummy);
47 if (dir_len >= size || dir_len < 1)
48 {
50 return NULL; /* buf too small */
51 }
52
53 TRACE(":returning '%s'\n", dir);
54 if (!buf)
55 return _tcsdup(dir); /* allocate */
56
58 }
59 return buf;
60}
61
62
#define ERANGE
Definition: acclib.h:92
#define EACCES
Definition: acclib.h:85
unsigned int dir
Definition: maze.c:112
_Check_return_ _CRTIMP int __cdecl _getdrive(void)
Definition: getdrive.c:20
#define NULL
Definition: types.h:112
#define MAX_PATH
Definition: compat.h:34
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define _tcscpy
Definition: tchar.h:623
#define _tgetcwd
Definition: tchar.h:673
#define _tcsdup
Definition: tchar.h:625
char _TCHAR
Definition: tchar.h:1392
#define _tgetdcwd
Definition: tchar.h:674
errno_t __cdecl _set_errno(_In_ int _Value)
#define TRACE(s)
Definition: solgame.cpp:4
#define _T(x)
Definition: vfdio.h:22
#define GetDriveType
Definition: winbase.h:3812
#define DRIVE_REMOVABLE
Definition: winbase.h:251
#define GetFullPathName
Definition: winbase.h:3821