Fixed some bugs
[reactos.git] / reactos / lib / kernel32 / file / curdir.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: lib/kernel32/file/curdir.c
5 * PURPOSE: Current directory functions
6 * PROGRAMMER: David Welch (welch@mcmail.com)
7 * UPDATE HISTORY:
8 * Created 30/09/98
9 */
10
11
12 /* INCLUDES ******************************************************************/
13
14 #include <windows.h>
15
16 #define NDEBUG
17 #include <kernel32/kernel32.h>
18
19 /* GLOBALS *******************************************************************/
20
21
22 static WCHAR CurrentDirectoryW[MAX_PATH] = {0,};
23 static WCHAR SystemDirectoryW[MAX_PATH];
24 static WCHAR WindowsDirectoryW[MAX_PATH];
25
26 /* FUNCTIONS *****************************************************************/
27
28 DWORD STDCALL GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer)
29 {
30 UINT uSize,i;
31 if ( lpBuffer == NULL )
32 return 0;
33 uSize = lstrlenW(CurrentDirectoryW);
34 if ( nBufferLength > uSize ) {
35 i = 0;
36 while ((CurrentDirectoryW[i])!=0 && i < MAX_PATH)
37 {
38 lpBuffer[i] = (unsigned char)CurrentDirectoryW[i];
39 i++;
40 }
41 lpBuffer[i] = 0;
42 }
43 return uSize;
44 }
45
46 DWORD STDCALL GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer)
47 {
48 UINT uSize;
49
50 DPRINT("CurrentDirectoryW %w\n",CurrentDirectoryW);
51
52 if ( lpBuffer == NULL )
53 return 0;
54 uSize = lstrlenW(CurrentDirectoryW);
55 if ( nBufferLength > uSize )
56 lstrcpynW(lpBuffer,CurrentDirectoryW,uSize);
57
58 DPRINT("GetCurrentDirectoryW() = %w\n",lpBuffer);
59
60 return uSize;
61 }
62
63 BOOL STDCALL SetCurrentDirectoryA(LPCSTR lpPathName)
64 {
65 UINT i;
66
67 DPRINT("SetCurrentDirectoryA(lpPathName %s)\n",lpPathName);
68
69 if ( lpPathName == NULL )
70 return FALSE;
71 if ( lstrlenA(lpPathName) > MAX_PATH )
72 return FALSE;
73 i = 0;
74 while ((lpPathName[i])!=0 && i < MAX_PATH)
75 {
76 CurrentDirectoryW[i] = (unsigned short)lpPathName[i];
77 i++;
78 }
79 CurrentDirectoryW[i] = 0;
80
81 DPRINT("CurrentDirectoryW = '%w'\n",CurrentDirectoryW);
82
83 return(TRUE);
84 }
85
86
87 WINBOOL STDCALL SetCurrentDirectoryW(LPCWSTR lpPathName)
88 {
89 if ( lpPathName == NULL )
90 return FALSE;
91 if ( lstrlenW(lpPathName) > MAX_PATH )
92 return FALSE;
93 lstrcpyW(CurrentDirectoryW,lpPathName);
94 return(TRUE);
95 }
96
97 DWORD STDCALL GetTempPathA(DWORD nBufferLength, LPSTR lpBuffer)
98 {
99 WCHAR BufferW[MAX_PATH];
100 DWORD retCode;
101 UINT i;
102 retCode = GetTempPathW(nBufferLength,BufferW);
103 i = 0;
104 while ((BufferW[i])!=0 && i < MAX_PATH)
105 {
106 lpBuffer[i] = (unsigned char)BufferW[i];
107 i++;
108 }
109 lpBuffer[i] = 0;
110 return retCode;
111
112 }
113
114 DWORD STDCALL GetTempPathW(DWORD nBufferLength, LPWSTR lpBuffer)
115 {
116 WCHAR EnvironmentBufferW[MAX_PATH];
117 UINT i;
118
119 EnvironmentBufferW[0] = 0;
120 i = GetEnvironmentVariableW(L"TMP",EnvironmentBufferW,MAX_PATH);
121 if ( i==0 )
122 i = GetEnvironmentVariableW(L"TEMP",EnvironmentBufferW,MAX_PATH);
123 if ( i==0 )
124 i = GetCurrentDirectoryW(MAX_PATH,EnvironmentBufferW);
125
126 return i;
127 }
128
129 UINT STDCALL GetSystemDirectoryA(LPSTR lpBuffer, UINT uSize)
130 {
131 UINT uPathSize,i;
132 if ( lpBuffer == NULL )
133 return 0;
134 uPathSize = lstrlenW(SystemDirectoryW);
135 if ( uSize > uPathSize ) {
136 i = 0;
137 while ((SystemDirectoryW[i])!=0 && i < uSize)
138 {
139 lpBuffer[i] = (unsigned char)SystemDirectoryW[i];
140 i++;
141 }
142 lpBuffer[i] = 0;
143 }
144
145 return uPathSize;
146 }
147
148 UINT STDCALL GetWindowsDirectoryA(LPSTR lpBuffer, UINT uSize)
149 {
150 UINT uPathSize,i;
151 if ( lpBuffer == NULL )
152 return 0;
153 uPathSize = lstrlenW(WindowsDirectoryW);
154 if ( uSize > uPathSize ) {
155 i = 0;
156 while ((WindowsDirectoryW[i])!=0 && i < uSize)
157 {
158 lpBuffer[i] = (unsigned char)WindowsDirectoryW[i];
159 i++;
160 }
161 lpBuffer[i] = 0;
162 }
163 return uPathSize;
164 }
165
166 UINT STDCALL GetSystemDirectoryW(LPWSTR lpBuffer, UINT uSize)
167 {
168 UINT uPathSize;
169 if ( lpBuffer == NULL )
170 return 0;
171 uPathSize = lstrlenW(SystemDirectoryW);
172 if ( uSize > uPathSize )
173 lstrcpynW(lpBuffer,SystemDirectoryW,uPathSize);
174
175
176 return uPathSize;
177 }
178
179 UINT STDCALL GetWindowsDirectoryW(LPWSTR lpBuffer, UINT uSize)
180 {
181 UINT uPathSize;
182 if ( lpBuffer == NULL )
183 return 0;
184 uPathSize = lstrlenW(WindowsDirectoryW);
185 if ( uSize > uPathSize );
186 lstrcpynW(lpBuffer,WindowsDirectoryW,uPathSize);
187
188 return uPathSize;
189 }