memfs: memfs-main.c

This commit is contained in:
Bill Zissimopoulos 2016-04-08 17:25:57 -07:00
parent 32007577a0
commit 5b0522df46

View File

@ -9,21 +9,43 @@
#define PROGNAME "memfs" #define PROGNAME "memfs"
static void warn(const char *message) static void vwarn(const char *format, va_list ap)
{ {
char buf[1024];
/* wvsprintf is only safe with a 1024 byte buffer */
DWORD BytesTransferred; DWORD BytesTransferred;
wvsprintfA(buf, format, ap);
buf[sizeof buf - 1] = '\0';
WriteFile(GetStdHandle(STD_ERROR_HANDLE), WriteFile(GetStdHandle(STD_ERROR_HANDLE),
message, (DWORD)strlen(message), "memfs: ", 7,
&BytesTransferred, 0);
WriteFile(GetStdHandle(STD_ERROR_HANDLE),
buf, (DWORD)strlen(buf),
&BytesTransferred, 0); &BytesTransferred, 0);
WriteFile(GetStdHandle(STD_ERROR_HANDLE), WriteFile(GetStdHandle(STD_ERROR_HANDLE),
"\n", 1, "\n", 1,
&BytesTransferred, 0); &BytesTransferred, 0);
} }
static void fail(const char *message) static void warn(const char *format, ...)
{ {
warn(message); va_list ap;
va_start(ap, format);
vwarn(format, ap);
va_end(ap);
}
static void fail(const char *format, ...)
{
va_list ap;
va_start(ap, format);
vwarn(format, ap);
va_end(ap);
exit(1); exit(1);
} }
@ -37,10 +59,21 @@ static void usage(void)
" -n MaxFileNodes\n" " -n MaxFileNodes\n"
" -s MaxFileSize\n"; " -s MaxFileSize\n";
warn(usage); warn("%s", usage);
exit(2); exit(2);
} }
static inline
ULONG argul(wchar_t **argp, ULONG deflt)
{
if (0 == argp[0])
usage();
wchar_t *endp;
ULONG ul = wcstoul(argp[0], &endp, 10);
return 0 != ul ? ul : deflt;
}
static HANDLE MainEvent; static HANDLE MainEvent;
static BOOL WINAPI ConsoleCtrlHandler(DWORD CtrlType) static BOOL WINAPI ConsoleCtrlHandler(DWORD CtrlType)
@ -51,12 +84,54 @@ static BOOL WINAPI ConsoleCtrlHandler(DWORD CtrlType)
int wmain(int argc, wchar_t **argv) int wmain(int argc, wchar_t **argv)
{ {
wchar_t **argp;
NTSTATUS Result; NTSTATUS Result;
MEMFS *Memfs; MEMFS *Memfs;
ULONG Flags = MemfsDisk; ULONG Flags = MemfsDisk;
ULONG FileInfoTimeout = INFINITE; ULONG FileInfoTimeout = INFINITE;
ULONG MaxFileNodes = 1024; ULONG MaxFileNodes = 1024;
ULONG MaxFileSize = 1024 * 1024; ULONG MaxFileSize = 1024 * 1024;
PWSTR MountPoint = 0;
for (argp = argv + 1; 0 != argp[0]; argp++)
{
if (L'-' != argp[0][0])
break;
switch (argp[0][1])
{
case L'n':
MaxFileNodes = argul(++argp, MaxFileNodes);
break;
case L's':
MaxFileSize = argul(++argp, MaxFileSize);
break;
case L't':
FileInfoTimeout = argul(++argp, FileInfoTimeout);
break;
default:
usage();
break;
}
}
MountPoint = *argp++;
if (0 == MountPoint || 0 != argp[0])
usage();
for (int i = 1; argc > i; i++)
{
if (L'-' != argv[i][0])
break;
switch (argv[i][1])
{
case L'n':
break;
case L's':
break;
case L't':
break;
}
}
MainEvent = CreateEvent(0, TRUE, FALSE, 0); MainEvent = CreateEvent(0, TRUE, FALSE, 0);
if (0 == MainEvent) if (0 == MainEvent)
@ -80,5 +155,9 @@ int wmain(int argc, wchar_t **argv)
MemfsStop(Memfs); MemfsStop(Memfs);
MemfsDelete(Memfs); MemfsDelete(Memfs);
/* the OS will handle this! */
// CloseHandle(MainEvent);
// MainEvent = 0;
return 0; return 0;
} }