do not use MAX_PATH anymore in main.c
This commit is contained in:
parent
fdb317ebdf
commit
d287d55710
85
src/main.c
85
src/main.c
@ -1391,31 +1391,84 @@ int main(int argc,char * argv[])
|
||||
#endif
|
||||
{
|
||||
#if defined(WIN32) && !defined(USE_SDL) && !defined(USE_SDL2)
|
||||
WCHAR ModuleFileName[MAX_PATH];
|
||||
WCHAR TmpArg[MAX_PATH];
|
||||
WCHAR ShortFileName[MAX_PATH];
|
||||
int i, j, k;
|
||||
WCHAR * ModuleFileName = NULL;
|
||||
DWORD ModuleFileNameSize = 64;
|
||||
DWORD Ret;
|
||||
WCHAR * TmpArg = NULL;
|
||||
DWORD TmpArgSize = 0;
|
||||
WCHAR * ShortFileName;
|
||||
DWORD ShortFileNameSize;
|
||||
DWORD i, j, k;
|
||||
int inquote = 0;
|
||||
int argc = 0;
|
||||
char arg_buffer[4096];
|
||||
char * argv[64] = {NULL};
|
||||
|
||||
Init_Win32(hInstance, hPrevInstance);
|
||||
if (GetModuleFileNameW(NULL, ModuleFileName, MAX_PATH) == 0)
|
||||
|
||||
// GetModuleFileNameW() returns the size argument when the
|
||||
// path is truncated.
|
||||
do
|
||||
{
|
||||
MessageBoxA(NULL, "Error initializing program", NULL, MB_OK | MB_ICONERROR);
|
||||
ModuleFileNameSize *= 2;
|
||||
free(ModuleFileName);
|
||||
ModuleFileName = (WCHAR *)malloc(sizeof(WCHAR) * ModuleFileNameSize);
|
||||
if (ModuleFileName == NULL)
|
||||
{
|
||||
MessageBoxA(NULL, "Error initializing program (alloc)", NULL, MB_OK | MB_ICONERROR);
|
||||
return 1;
|
||||
}
|
||||
GetShortPathNameW(ModuleFileName, ShortFileName, MAX_PATH);
|
||||
Ret = GetModuleFileNameW(NULL, ModuleFileName, ModuleFileNameSize);
|
||||
if (Ret == 0)
|
||||
{
|
||||
MessageBoxA(NULL, "Error initializing program\nGetModuleFileName()", NULL, MB_OK | MB_ICONERROR);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
while (Ret >= ModuleFileNameSize);
|
||||
|
||||
ShortFileNameSize = GetShortPathNameW(ModuleFileName, NULL, 0);
|
||||
if (ShortFileNameSize == 0)
|
||||
{
|
||||
MessageBoxA(NULL, "Error initializing program\nGetShortPathName()", NULL, MB_OK | MB_ICONERROR);
|
||||
return 1;
|
||||
}
|
||||
ShortFileName = (WCHAR *)malloc(sizeof(WCHAR) * ShortFileNameSize);
|
||||
if (ShortFileName == NULL)
|
||||
{
|
||||
MessageBoxA(NULL, "Error initializing program (alloc)", NULL, MB_OK | MB_ICONERROR);
|
||||
return 1;
|
||||
}
|
||||
if (GetShortPathNameW(ModuleFileName, ShortFileName, ShortFileNameSize) == 0)
|
||||
{
|
||||
MessageBoxA(NULL, "Error initializing program\nGetShortPathName()", NULL, MB_OK | MB_ICONERROR);
|
||||
return 1;
|
||||
}
|
||||
free(ModuleFileName);
|
||||
|
||||
// set argv[0]
|
||||
argv[argc++] = arg_buffer;
|
||||
for (i = 0; i < (int)sizeof(arg_buffer); )
|
||||
{
|
||||
arg_buffer[i] = (char)ShortFileName[i];
|
||||
if (arg_buffer[i++] == 0) break;
|
||||
}
|
||||
free(ShortFileName);
|
||||
|
||||
// set remaining argv[]
|
||||
k = 0;
|
||||
for (j = 0; pCmdLine[j] != 0 && k < MAX_PATH - 1; j++)
|
||||
for (j = 0; pCmdLine[j] != 0; j++)
|
||||
{
|
||||
if (k >= TmpArgSize)
|
||||
{
|
||||
TmpArgSize = (TmpArgSize == 0) ? 16 : 2 * TmpArgSize;
|
||||
TmpArg = (WCHAR *)realloc(TmpArg, TmpArgSize);
|
||||
if (TmpArg == NULL)
|
||||
{
|
||||
MessageBoxA(NULL, "Error initializing program (realloc)", NULL, MB_OK | MB_ICONERROR);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (inquote)
|
||||
{
|
||||
if (pCmdLine[j] == '"')
|
||||
@ -1435,10 +1488,14 @@ int main(int argc,char * argv[])
|
||||
{ // next argument
|
||||
TmpArg[k++] = '\0';
|
||||
argv[argc++] = arg_buffer + i;
|
||||
if (GetShortPathNameW(TmpArg, ShortFileName, MAX_PATH) > 0)
|
||||
ShortFileNameSize = GetShortPathNameW(TmpArg, NULL, 0);
|
||||
if (ShortFileNameSize > 0)
|
||||
{
|
||||
ShortFileName = (WCHAR *)malloc(sizeof(WCHAR) * ShortFileNameSize);
|
||||
Ret = GetShortPathNameW(TmpArg, ShortFileName, ShortFileNameSize);
|
||||
for (k = 0; ShortFileName[k] != 0; k++)
|
||||
arg_buffer[i++] = ShortFileName[k];
|
||||
free(ShortFileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1452,14 +1509,19 @@ int main(int argc,char * argv[])
|
||||
}
|
||||
TmpArg[k++] = pCmdLine[j];
|
||||
}
|
||||
TmpArg[k] = '\0';
|
||||
// process the last argument
|
||||
if (k > 0)
|
||||
{
|
||||
TmpArg[k] = '\0';
|
||||
argv[argc++] = arg_buffer + i;
|
||||
if (GetShortPathNameW(TmpArg, ShortFileName, MAX_PATH) > 0)
|
||||
ShortFileNameSize = GetShortPathNameW(TmpArg, NULL, 0);
|
||||
if (ShortFileNameSize > 0)
|
||||
{
|
||||
ShortFileName = (WCHAR *)malloc(sizeof(WCHAR) * ShortFileNameSize);
|
||||
Ret = GetShortPathNameW(TmpArg, ShortFileName, ShortFileNameSize);
|
||||
for (k = 0; ShortFileName[k] != 0; k++)
|
||||
arg_buffer[i++] = ShortFileName[k];
|
||||
free(ShortFileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1469,6 +1531,7 @@ int main(int argc,char * argv[])
|
||||
arg_buffer[i++] = 0;
|
||||
}
|
||||
|
||||
free(TmpArg);
|
||||
// TODO : nCmdShow indicates if the window must be maximized, etc.
|
||||
#endif
|
||||
if(!Init_program(argc,argv))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user