ReactOS 0.4.15-dev-7842-g558ab78
common.c File Reference
#include "fsutil.h"
Include dependency graph for common.c:

Go to the source code of this file.

Functions

int FindHandler (int argc, const TCHAR *argv[], HandlerItem *HandlersList, int HandlerListCount, void(*UsageHelper)(const TCHAR *))
 
HANDLE OpenVolume (const TCHAR *Volume, BOOLEAN AllowRemote, BOOLEAN NtfsOnly)
 
void PrintDefaultUsage (const TCHAR *Command, const TCHAR *SubCommand, HandlerItem *HandlersList, int HandlerListCount)
 
int PrintErrorMessage (DWORD Error)
 

Function Documentation

◆ FindHandler()

int FindHandler ( int  argc,
const TCHAR argv[],
HandlerItem HandlersList,
int  HandlerListCount,
void(*)(const TCHAR *)  UsageHelper 
)

Definition at line 11 of file common.c.

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}
static int argc
Definition: ServiceArgs.c:12
static HandlerItem HandlersList[]
Definition: dirty.c:15
#define NULL
Definition: types.h:112
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
#define argv
Definition: mplay32.c:18
Definition: shell.h:41
pHandlerProc Handler
Definition: fsutil.h:13
int ret
char TCHAR
Definition: xmlstorage.h:189
#define _tcsicmp
Definition: xmlstorage.h:205

Referenced by _tmain(), DirtyMain(), FsInfoMain(), HardLinkMain(), and VolumeMain().

◆ OpenVolume()

HANDLE OpenVolume ( const TCHAR Volume,
BOOLEAN  AllowRemote,
BOOLEAN  NtfsOnly 
)

Definition at line 49 of file common.c.

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}
Type
Definition: Type.h:7
int PrintErrorMessage(DWORD Error)
Definition: common.c:123
#define PATH_MAX
Definition: types.h:280
PWCHAR FileSystem
Definition: format.c:72
#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
#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
unsigned int UINT
Definition: ndis.h:50
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
#define L(x)
Definition: ntvdm.h:50
#define _T(x)
Definition: vfdio.h:22
#define GetVolumeInformation
Definition: winbase.h:3788
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define GetDriveType
Definition: winbase.h:3747
#define DRIVE_REMOTE
Definition: winbase.h:253
#define CreateFile
Definition: winbase.h:3684

Referenced by DismountMain(), main(), NtfsInfoMain(), QueryMain(), SetMain(), and StatisticsMain().

◆ PrintDefaultUsage()

void PrintDefaultUsage ( const TCHAR Command,
const TCHAR SubCommand,
HandlerItem HandlersList,
int  HandlerListCount 
)

Definition at line 102 of file common.c.

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}

Referenced by PrintUsage().

◆ PrintErrorMessage()

int PrintErrorMessage ( DWORD  Error)

Definition at line 123 of file common.c.

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}
BOOL Error
Definition: chkdsk.c:66
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:423
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:419

Referenced by OpenVolume().