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
|
#endif
|
||||||
{
|
{
|
||||||
#if defined(WIN32) && !defined(USE_SDL) && !defined(USE_SDL2)
|
#if defined(WIN32) && !defined(USE_SDL) && !defined(USE_SDL2)
|
||||||
WCHAR ModuleFileName[MAX_PATH];
|
WCHAR * ModuleFileName = NULL;
|
||||||
WCHAR TmpArg[MAX_PATH];
|
DWORD ModuleFileNameSize = 64;
|
||||||
WCHAR ShortFileName[MAX_PATH];
|
DWORD Ret;
|
||||||
int i, j, k;
|
WCHAR * TmpArg = NULL;
|
||||||
|
DWORD TmpArgSize = 0;
|
||||||
|
WCHAR * ShortFileName;
|
||||||
|
DWORD ShortFileNameSize;
|
||||||
|
DWORD i, j, k;
|
||||||
int inquote = 0;
|
int inquote = 0;
|
||||||
int argc = 0;
|
int argc = 0;
|
||||||
char arg_buffer[4096];
|
char arg_buffer[4096];
|
||||||
char * argv[64] = {NULL};
|
char * argv[64] = {NULL};
|
||||||
|
|
||||||
Init_Win32(hInstance, hPrevInstance);
|
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;
|
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;
|
argv[argc++] = arg_buffer;
|
||||||
for (i = 0; i < (int)sizeof(arg_buffer); )
|
for (i = 0; i < (int)sizeof(arg_buffer); )
|
||||||
{
|
{
|
||||||
arg_buffer[i] = (char)ShortFileName[i];
|
arg_buffer[i] = (char)ShortFileName[i];
|
||||||
if (arg_buffer[i++] == 0) break;
|
if (arg_buffer[i++] == 0) break;
|
||||||
}
|
}
|
||||||
|
free(ShortFileName);
|
||||||
|
|
||||||
|
// set remaining argv[]
|
||||||
k = 0;
|
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 (inquote)
|
||||||
{
|
{
|
||||||
if (pCmdLine[j] == '"')
|
if (pCmdLine[j] == '"')
|
||||||
@ -1435,10 +1488,14 @@ int main(int argc,char * argv[])
|
|||||||
{ // next argument
|
{ // next argument
|
||||||
TmpArg[k++] = '\0';
|
TmpArg[k++] = '\0';
|
||||||
argv[argc++] = arg_buffer + i;
|
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++)
|
for (k = 0; ShortFileName[k] != 0; k++)
|
||||||
arg_buffer[i++] = ShortFileName[k];
|
arg_buffer[i++] = ShortFileName[k];
|
||||||
|
free(ShortFileName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1452,14 +1509,19 @@ int main(int argc,char * argv[])
|
|||||||
}
|
}
|
||||||
TmpArg[k++] = pCmdLine[j];
|
TmpArg[k++] = pCmdLine[j];
|
||||||
}
|
}
|
||||||
TmpArg[k] = '\0';
|
// process the last argument
|
||||||
if (k > 0)
|
if (k > 0)
|
||||||
{
|
{
|
||||||
|
TmpArg[k] = '\0';
|
||||||
argv[argc++] = arg_buffer + i;
|
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++)
|
for (k = 0; ShortFileName[k] != 0; k++)
|
||||||
arg_buffer[i++] = ShortFileName[k];
|
arg_buffer[i++] = ShortFileName[k];
|
||||||
|
free(ShortFileName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1469,6 +1531,7 @@ int main(int argc,char * argv[])
|
|||||||
arg_buffer[i++] = 0;
|
arg_buffer[i++] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(TmpArg);
|
||||||
// TODO : nCmdShow indicates if the window must be maximized, etc.
|
// TODO : nCmdShow indicates if the window must be maximized, etc.
|
||||||
#endif
|
#endif
|
||||||
if(!Init_program(argc,argv))
|
if(!Init_program(argc,argv))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user