ReactOS 0.4.16-dev-199-g898cc56
common.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS FS utility tool
4 * FILE: base/applications/cmdutils/common.c
5 * PURPOSE: FSutil common functions
6 * PROGRAMMERS: Pierre Schweitzer <pierre@reactos.org>
7 */
8
9#include "fsutil.h"
10
12 const TCHAR *argv[],
14 int HandlerListCount,
15 void (*UsageHelper)(const TCHAR *))
16{
17 int i;
18 int ret;
19 const TCHAR * Command;
20
21 ret = 1;
22 Command = NULL;
23 i = HandlerListCount;
24
25 /* If we have a command, does it match a known one? */
26 if (argc > 1)
27 {
28 /* Browse all the known commands finding the right one */
29 Command = argv[1];
30 for (i = 0; i < HandlerListCount; ++i)
31 {
33 {
34 ret = HandlersList[i].Handler(argc - 1, &argv[1]);
35 break;
36 }
37 }
38 }
39
40 /* We failed finding someone to handle the caller's needs, print out */
41 if (i == HandlerListCount)
42 {
43 UsageHelper(Command);
44 }
45
46 return ret;
47}
48
50 BOOLEAN AllowRemote,
51 BOOLEAN NtfsOnly)
52{
53 UINT Type;
54 HANDLE hVolume;
55 TCHAR VolumeID[PATH_MAX];
56
57 /* Get volume type */
58 if (!AllowRemote && Volume[1] == L':')
59 {
61 if (Type == DRIVE_REMOTE)
62 {
63 _ftprintf(stderr, _T("FSUTIL needs a local device\n"));
65 }
66 }
67
68 /* Get filesystem type */
69 if (NtfsOnly)
70 {
72
73 _stprintf(VolumeID, _T("\\\\.\\%s\\"), Volume);
74 if (!GetVolumeInformation(VolumeID, NULL, 0, NULL, NULL, NULL, FileSystem, MAX_PATH + 1))
75 {
78 }
79
80 if (_tcscmp(FileSystem, _T("NTFS")) != 0)
81 {
82 _ftprintf(stderr, _T("FSUTIL needs a NTFS device\n"));
84 }
85 }
86
87 /* Create full name */
88 _stprintf(VolumeID, _T("\\\\.\\%s"), Volume);
89
90 /* Open the volume */
93 if (hVolume == INVALID_HANDLE_VALUE)
94 {
97 }
98
99 return hVolume;
100}
101
103 const TCHAR * SubCommand,
105 int HandlerListCount)
106{
107 int i;
108
109 /* If we were given a command, print it's not supported */
110 if (SubCommand != NULL)
111 {
112 _ftprintf(stderr, _T("Unhandled%scommand: %s\n"), Command, SubCommand);
113 }
114
115 /* And dump any available command */
116 _ftprintf(stderr, _T("---- Handled%scommands ----\n\n"), Command);
117 for (i = 0; i < HandlerListCount; ++i)
118 {
119 _ftprintf(stderr, _T("%s\t%s\n"), HandlersList[i].Command, HandlersList[i].Desc);
120 }
121}
122
124{
125 TCHAR * String;
126
127 /* Try to get textual error */
129 NULL, Error, 0, (TCHAR *)&String, 0, NULL) != 0)
130 {
131 /* And print it */
132 _ftprintf(stderr, _T("Error: %s\n"), String);
134 }
135 else
136 {
137 /* Otherwise, just print the error number */
138 _ftprintf(stderr, _T("Error: %d\n"), Error);
139 }
140
141 return Error;
142}
unsigned char BOOLEAN
static int argc
Definition: ServiceArgs.c:12
Type
Definition: Type.h:7
int PrintErrorMessage(DWORD Error)
Definition: common.c:123
HANDLE OpenVolume(const TCHAR *Volume, BOOLEAN AllowRemote, BOOLEAN NtfsOnly)
Definition: common.c:49
void PrintDefaultUsage(const TCHAR *Command, const TCHAR *SubCommand, HandlerItem *HandlersList, int HandlerListCount)
Definition: common.c:102
int FindHandler(int argc, const TCHAR *argv[], HandlerItem *HandlersList, int HandlerListCount, void(*UsageHelper)(const TCHAR *))
Definition: common.c:11
#define PATH_MAX
Definition: types.h:280
BOOL Error
Definition: chkdsk.c:66
PWCHAR FileSystem
Definition: format.c:72
static HandlerItem HandlersList[]
Definition: dirty.c:15
#define NULL
Definition: types.h:112
#define OPEN_EXISTING
Definition: compat.h:775
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define GENERIC_READ
Definition: compat.h:135
#define MAX_PATH
Definition: compat.h:34
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define FILE_SHARE_READ
Definition: compat.h:136
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define stderr
Definition: stdio.h:100
#define _tcscmp
Definition: tchar.h:1424
#define _ftprintf
Definition: tchar.h:518
UNICODE_STRING Volume
Definition: fltkernel.h:1172
#define _stprintf
Definition: utility.h:124
#define argv
Definition: mplay32.c:18
unsigned int UINT
Definition: ndis.h:50
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
#define L(x)
Definition: ntvdm.h:50
Definition: shell.h:41
pHandlerProc Handler
Definition: fsutil.h:13
#define _T(x)
Definition: vfdio.h:22
int ret
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433
#define GetVolumeInformation
Definition: winbase.h:3877
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define GetDriveType
Definition: winbase.h:3836
#define DRIVE_REMOTE
Definition: winbase.h:278
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:448
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:444
#define CreateFile
Definition: winbase.h:3773
char TCHAR
Definition: xmlstorage.h:189
#define _tcsicmp
Definition: xmlstorage.h:205