xref: /reactos/base/shell/cmd/path.c (revision f04935d8)
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         if (!pszBuffer)
54         {
55             WARN("Cannot allocate memory for pszBuffer!\n");
56             return 1;
57         }
58 
59         dwBuffer = GetEnvironmentVariable (_T("PATH"), pszBuffer, ENV_BUFFER_SIZE);
60         if (dwBuffer == 0)
61         {
62             cmd_free(pszBuffer);
63             ConOutResPrintf(STRING_VOL_HELP2, _T("PATH"));
64             return 0;
65         }
66         else if (dwBuffer > ENV_BUFFER_SIZE)
67         {
68             LPTSTR pszOldBuffer = pszBuffer;
69             pszBuffer = (LPTSTR)cmd_realloc (pszBuffer, dwBuffer * sizeof (TCHAR));
70             if (!pszBuffer)
71             {
72                 WARN("Cannot reallocate memory for pszBuffer!\n");
73                 cmd_free(pszOldBuffer);
74                 return 1;
75             }
76             GetEnvironmentVariable (_T("PATH"), pszBuffer, dwBuffer);
77         }
78 
79         ConOutPrintf(_T("PATH=%s\n"), pszBuffer);
80         cmd_free (pszBuffer);
81 
82         return 0;
83     }
84 
85     /* skip leading '=' */
86     if (*param == _T('='))
87         param++;
88 
89     /* set PATH environment variable */
90     if (!SetEnvironmentVariable (_T("PATH"), param))
91     {
92         nErrorLevel = 1;
93         return 1;
94     }
95 
96     return 0;
97 }
98 
99 #endif
100 
101 /* EOF */
102