- Merge from trunk up to r45543
[reactos.git] / base / shell / cmd / vol.c
1 /*
2 * VOL.C - vol internal command.
3 *
4 *
5 * History:
6 *
7 * 03-Dec-1998 (Eric Kohl)
8 * Replaced DOS calls by Win32 calls.
9 *
10 * 08-Dec-1998 (Eric Kohl)
11 * Added help text ("/?").
12 *
13 * 07-Jan-1999 (Eric Kohl)
14 * Cleanup.
15 *
16 * 18-Jan-1999 (Eric Kohl)
17 * Unicode ready!
18 *
19 * 20-Jan-1999 (Eric Kohl)
20 * Redirection ready!
21 */
22
23 #include <precomp.h>
24
25 #ifdef INCLUDE_CMD_VOL
26
27
28 static INT
29 PrintVolumeHeader (LPTSTR pszRootPath)
30 {
31 TCHAR szVolName[80];
32 DWORD dwSerialNr;
33
34 /* get the volume information of the drive */
35 if(!GetVolumeInformation (pszRootPath,
36 szVolName,
37 80,
38 &dwSerialNr,
39 NULL,
40 NULL,
41 NULL,
42 0))
43 {
44 ErrorMessage (GetLastError (), _T(""));
45 return 1;
46 }
47
48 /* print drive info */
49 if (szVolName[0] != '\0')
50 {
51 ConOutResPrintf(STRING_VOL_HELP1, pszRootPath[0],szVolName);
52 }
53 else
54 {
55 ConOutResPrintf(STRING_VOL_HELP2, pszRootPath[0]);
56 }
57
58 /* print the volume serial number */
59 ConOutResPrintf(STRING_VOL_HELP3, HIWORD(dwSerialNr), LOWORD(dwSerialNr));
60 return 0;
61 }
62
63
64 INT cmd_vol (LPTSTR param)
65 {
66 TCHAR szRootPath[] = _T("A:\\");
67 TCHAR szPath[MAX_PATH];
68
69 if (!_tcsncmp (param, _T("/?"), 2))
70 {
71 ConOutResPaging(TRUE,STRING_VOL_HELP4);
72 return 0;
73 }
74
75 nErrorLevel = 0;
76
77 if (param[0] == _T('\0'))
78 {
79 GetCurrentDirectory (MAX_PATH, szPath);
80 szRootPath[0] = szPath[0];
81 }
82 else
83 {
84 _tcsupr (param);
85 if (param[1] == _T(':'))
86 szRootPath[0] = param[0];
87 else
88 {
89 error_invalid_drive ();
90 nErrorLevel = 1;
91 return 1;
92 }
93 }
94
95 if (!IsValidPathName (szRootPath))
96 {
97 error_invalid_drive ();
98 nErrorLevel = 1;
99 return 1;
100 }
101
102 /* print the header */
103 if (!PrintVolumeHeader (szRootPath))
104 {
105 nErrorLevel = 1;
106 return 1;
107 }
108
109 return 0;
110 }
111
112 #endif