|  | /* | 
|  | *  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; | 
|  | } |