mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -05:00
memfs: memfs-main.c
This commit is contained in:
parent
32007577a0
commit
5b0522df46
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user