/* | |
* Copyright (C) 2009 Patrick Gansterer (paroga@paroga.com) | |
* | |
* This library is free software; you can redistribute it and/or | |
* modify it under the terms of the GNU Library General Public | |
* License as published by the Free Software Foundation; either | |
* version 2 of the License, or (at your option) any later version. | |
* | |
* This library is distributed in the hope that it will be useful, | |
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
* Library General Public License for more details. | |
* | |
* You should have received a copy of the GNU Library General Public License | |
* along with this library; see the file COPYING.LIB. If not, write to | |
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | |
* Boston, MA 02110-1301, USA. | |
* | |
*/ | |
#include "config.h" | |
#include "Vector.h" | |
#include <winbase.h> | |
#include <winnls.h> | |
#include <wtf/UnusedParam.h> | |
int main(int argc, char** argv); | |
static inline char* convertToUtf8(LPCWSTR widecharString, int length) | |
{ | |
int requiredSize = WideCharToMultiByte(CP_UTF8, 0, widecharString, length, 0, 0, 0, 0); | |
char* multibyteString = new char[requiredSize + 1]; | |
WideCharToMultiByte(CP_UTF8, 0, widecharString, length, multibyteString, requiredSize, 0, 0); | |
multibyteString[requiredSize] = '\0'; | |
return multibyteString; | |
} | |
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) | |
{ | |
UNUSED_PARAM(hInstance); | |
UNUSED_PARAM(hPrevInstance); | |
UNUSED_PARAM(nCmdShow); | |
Vector<char*> arguments; | |
TCHAR buffer[MAX_PATH]; | |
int length = GetModuleFileNameW(0, buffer, MAX_PATH); | |
arguments.append(convertToUtf8(buffer, length)); | |
WCHAR* commandLine = lpCmdLine; | |
while (commandLine[0] != '\0') { | |
int commandLineLength = 1; | |
WCHAR endChar = ' '; | |
while (commandLine[0] == ' ') | |
++commandLine; | |
if (commandLine[0] == '\"') { | |
++commandLine; | |
endChar = '\"'; | |
} | |
while (commandLine[commandLineLength] != endChar && commandLine[commandLineLength] != '\0') | |
++commandLineLength; | |
arguments.append(convertToUtf8(commandLine, commandLineLength)); | |
commandLine += commandLineLength; | |
if (endChar != ' ' && commandLine[0] != '\0') | |
++commandLine; | |
} | |
int res = main(arguments.size(), arguments.data()); | |
for (size_t i = 0; i < arguments.size(); i++) | |
delete arguments[i]; | |
return res; | |
} |