xref: /reactos/base/shell/cmd/vol.c (revision c2c66aff)
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
115