[NET]
[reactos.git] / reactos / base / shell / cmd / path.c
1 /*
2 * PATH.C - path internal command.
3 *
4 *
5 * History:
6 *
7 * 17 Jul 1998 (John P Price)
8 * Separated commands into individual files.
9 *
10 * 27-Jul-1998 (John P Price <linux-guru@gcfl.net>)
11 * added config.h include
12 *
13 * 09-Dec-1998 (Eric Kohl)
14 * Added help text ("/?").
15 *
16 * 18-Jan-1999 (Eric Kohl)
17 * Unicode ready!
18 *
19 * 18-Jan-1999 (Eric Kohl)
20 * Redirection safe!
21 *
22 * 24-Jan-1999 (Eric Kohl)
23 * Fixed Win32 environment handling.
24 *
25 * 30-Apr-2005 (Magnus Olsen <magnus@greatlord.com>)
26 * Remove all hardcoded strings in En.rc
27 */
28 #include "precomp.h"
29
30 #ifdef INCLUDE_CMD_PATH
31
32 /* size of environment variable buffer */
33 #define ENV_BUFFER_SIZE 1024
34
35
36 INT cmd_path (LPTSTR param)
37 {
38 if (!_tcsncmp (param, _T("/?"), 2))
39 {
40 ConOutResPaging(TRUE,STRING_PATH_HELP1);
41 return 0;
42 }
43
44 nErrorLevel = 0;
45
46 /* if param is empty, display the PATH environment variable */
47 if (!param || !*param)
48 {
49 DWORD dwBuffer;
50 LPTSTR pszBuffer;
51
52 pszBuffer = (LPTSTR)cmd_alloc (ENV_BUFFER_SIZE * sizeof(TCHAR));
53 dwBuffer = GetEnvironmentVariable (_T("PATH"), pszBuffer, ENV_BUFFER_SIZE);
54 if (dwBuffer == 0)
55 {
56 cmd_free(pszBuffer);
57 ConOutResPrintf(STRING_VOL_HELP2, _T("PATH"));
58 return 0;
59 }
60 else if (dwBuffer > ENV_BUFFER_SIZE)
61 {
62 pszBuffer = (LPTSTR)cmd_realloc (pszBuffer, dwBuffer * sizeof (TCHAR));
63 GetEnvironmentVariable (_T("PATH"), pszBuffer, dwBuffer);
64 }
65
66 ConOutPrintf(_T("PATH=%s\n"), pszBuffer);
67 cmd_free (pszBuffer);
68
69 return 0;
70 }
71
72 /* skip leading '=' */
73 if (*param == _T('='))
74 param++;
75
76 /* set PATH environment variable */
77 if (!SetEnvironmentVariable (_T("PATH"), param))
78 {
79 nErrorLevel = 1;
80 return 1;
81 }
82
83 return 0;
84 }
85
86 #endif
87
88 /* EOF */