[Coverity] Rejig converted argv/argc into vector<string> to free memory

This commit is contained in:
baldurk
2016-05-01 14:37:50 +02:00
parent bdee617d80
commit 40fef75750
+18 -12
View File
@@ -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);
}