mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-29 21:30:53 +00:00
[Coverity] Rejig converted argv/argc into vector<string> to free memory
This commit is contained in:
@@ -264,18 +264,30 @@ int WINAPI wWinMain(_In_ HINSTANCE hInst,
|
||||
|
||||
wargv = CommandLineToArgvW(GetCommandLine(), &argc);
|
||||
|
||||
char **argv = new char*[argc];
|
||||
std::vector<std::string> argv_storage;
|
||||
std::vector<char *> argv_pointers;
|
||||
|
||||
argv_storage.resize(argc);
|
||||
argv_pointers.resize(argc);
|
||||
for(int i=0; i < argc; i++)
|
||||
{
|
||||
size_t len = wcslen(wargv[i]);
|
||||
len *= 4; // worst case, every UTF-8 character takes 4 bytes
|
||||
argv[i] = new char[len + 1];
|
||||
argv[i][len] = 0;
|
||||
argv_storage[i].resize(len + 1);
|
||||
argv_storage[i][len] = 0;
|
||||
argv_pointers[i] = &argv_storage[i][0];
|
||||
|
||||
WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1, &argv[i][0], (int)len+1, NULL, NULL);
|
||||
WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1, argv_pointers[i], (int)len+1, NULL, NULL);
|
||||
}
|
||||
|
||||
char *argv_backup[] = { "", NULL };
|
||||
char **argv = NULL;
|
||||
|
||||
if(argc > 0)
|
||||
argv = &argv_pointers[0];
|
||||
else
|
||||
argv = argv_backup;
|
||||
|
||||
LocalFree(wargv);
|
||||
|
||||
hInstance = hInst;
|
||||
@@ -699,15 +711,9 @@ int WINAPI wWinMain(_In_ HINSTANCE hInst,
|
||||
}
|
||||
|
||||
CloseHandle(pipe);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int retval = renderdoccmd(argc, argv);
|
||||
|
||||
for(int i=0; i < argc; i++)
|
||||
delete[] argv[i];
|
||||
delete[] argv;
|
||||
|
||||
return retval;
|
||||
return renderdoccmd(argc, argv);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user