[BOOTDATA]
[reactos.git] / reactos / 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 {
87 szRootPath[0] = param[0];
88 }
89 else
90 {
91 error_invalid_drive ();
92 nErrorLevel = 1;
93 return 1;
94 }
95 }
96
97 if (!IsValidPathName (szRootPath))
98 {
99 error_invalid_drive ();
100 nErrorLevel = 1;
101 return 1;
102 }
103
104 /* print the header */
105 if (!PrintVolumeHeader (szRootPath))
106 {
107 nErrorLevel = 1;
108 return 1;
109 }
110
111 return 0;
112 }
113
114 #endif