Corrected some bugs in the system libraries
[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 /* GLOBALS *******************************************************************/
17
18
19 static unsigned short CurrentDirectoryW[MAX_PATH] = {0,};
20
21 static unsigned short SystemDirectoryW[MAX_PATH];
22
23 static unsigned short WindowsDirectoryW[MAX_PATH];
24
25 /* FUNCTIONS *****************************************************************/
26
27 DWORD STDCALL GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer)
28 {
29 UINT uSize,i;
30 if ( lpBuffer == NULL )
31 return 0;
32 uSize = lstrlenW(CurrentDirectoryW);
33 if ( nBufferLength > uSize ) {
34 i = 0;
35 while ((CurrentDirectoryW[i])!=0 && i < MAX_PATH)
36 {
37 lpBuffer[i] = (unsigned char)CurrentDirectoryW[i];
38 i++;
39 }
40 lpBuffer[i] = 0;
41 }
42 return uSize;
43 }
44
45 DWORD STDCALL GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer)
46 {
47 UINT uSize;
48
49 dprintf("CurrentDirectoryW %w\n",CurrentDirectoryW);
50
51 if ( lpBuffer == NULL )
52 return 0;
53 uSize = lstrlenW(CurrentDirectoryW);
54 if ( nBufferLength > uSize )
55 lstrcpynW(lpBuffer,CurrentDirectoryW,uSize);
56
57 dprintf("GetCurrentDirectoryW() = %w\n",lpBuffer);
58
59 return uSize;
60 }
61
62 BOOL STDCALL SetCurrentDirectoryA(LPCSTR lpPathName)
63 {
64 UINT i;
65
66 dprintf("SetCurrentDirectoryA(lpPathName %s)\n",lpPathName);
67
68 if ( lpPathName == NULL )
69 return FALSE;
70 if ( lstrlenA(lpPathName) > MAX_PATH )
71 return FALSE;
72 i = 0;
73 while ((lpPathName[i])!=0 && i < MAX_PATH)
74 {
75 CurrentDirectoryW[i] = (unsigned short)lpPathName[i];
76 i++;
77 }
78 CurrentDirectoryW[i] = 0;
79
80 dprintf("CurrentDirectoryW = '%w'\n",CurrentDirectoryW);
81
82 return(TRUE);
83 }
84
85
86 WINBOOL
87 STDCALL
88 SetCurrentDirectoryW(
89 LPCWSTR lpPathName
90 )
91 {
92 if ( lpPathName == NULL )
93 return FALSE;
94 if ( lstrlenW(lpPathName) > MAX_PATH )
95 return FALSE;
96 lstrcpyW(CurrentDirectoryW,lpPathName);
97 return(TRUE);
98 }
99
100 DWORD
101 STDCALL
102 GetTempPathA(
103 DWORD nBufferLength,
104 LPSTR lpBuffer
105 )
106 {
107 WCHAR BufferW[MAX_PATH];
108 DWORD retCode;
109 UINT i;
110 retCode = GetTempPathW(nBufferLength,BufferW);
111 i = 0;
112 while ((BufferW[i])!=0 && i < MAX_PATH)
113 {
114 lpBuffer[i] = (unsigned char)BufferW[i];
115 i++;
116 }
117 lpBuffer[i] = 0;
118 return retCode;
119
120 }
121
122 DWORD
123 STDCALL
124 GetTempPathW(
125 DWORD nBufferLength,
126 LPWSTR lpBuffer
127 )
128 {
129
130 WCHAR EnvironmentBufferW[MAX_PATH];
131 UINT i;
132
133 EnvironmentBufferW[0] = 0;
134 i = GetEnvironmentVariableW(L"TMP",EnvironmentBufferW,MAX_PATH);
135 if ( i==0 )
136 i = GetEnvironmentVariableW(L"TEMP",EnvironmentBufferW,MAX_PATH);
137 if ( i==0 )
138 i = GetCurrentDirectoryW(MAX_PATH,EnvironmentBufferW);
139
140 return i;
141 }
142
143 UINT
144 STDCALL
145 GetSystemDirectoryA(
146 LPSTR lpBuffer,
147 UINT uSize
148 )
149 {
150 UINT uPathSize,i;
151 if ( lpBuffer == NULL )
152 return 0;
153 uPathSize = lstrlenW(SystemDirectoryW);
154 if ( uSize > uPathSize ) {
155 i = 0;
156 while ((SystemDirectoryW[i])!=0 && i < uSize)
157 {
158 lpBuffer[i] = (unsigned char)SystemDirectoryW[i];
159 i++;
160 }
161 lpBuffer[i] = 0;
162 }
163
164 return uPathSize;
165 }
166
167 UINT
168 STDCALL
169 GetWindowsDirectoryA(
170 LPSTR lpBuffer,
171 UINT uSize
172 )
173 {
174 UINT uPathSize,i;
175 if ( lpBuffer == NULL )
176 return 0;
177 uPathSize = lstrlenW(WindowsDirectoryW);
178 if ( uSize > uPathSize ) {
179 i = 0;
180 while ((WindowsDirectoryW[i])!=0 && i < uSize)
181 {
182 lpBuffer[i] = (unsigned char)WindowsDirectoryW[i];
183 i++;
184 }
185 lpBuffer[i] = 0;
186 }
187 return uPathSize;
188 }
189
190 UINT
191 STDCALL
192 GetSystemDirectoryW(
193 LPWSTR lpBuffer,
194 UINT uSize
195 )
196 {
197 UINT uPathSize;
198 if ( lpBuffer == NULL )
199 return 0;
200 uPathSize = lstrlenW(SystemDirectoryW);
201 if ( uSize > uPathSize )
202 lstrcpynW(lpBuffer,SystemDirectoryW,uPathSize);
203
204
205 return uPathSize;
206 }
207
208 UINT
209 STDCALL
210 GetWindowsDirectoryW(
211 LPWSTR lpBuffer,
212 UINT uSize
213 )
214 {
215 UINT uPathSize;
216 if ( lpBuffer == NULL )
217 return 0;
218 uPathSize = lstrlenW(WindowsDirectoryW);
219 if ( uSize > uPathSize );
220 lstrcpynW(lpBuffer,WindowsDirectoryW,uPathSize);
221
222 return uPathSize;
223 }