]>
Commit | Line | Data |
---|---|---|
f9bf01c6 A |
1 | /* |
2 | * Copyright (C) 2009 Patrick Gansterer (paroga@paroga.com) | |
3 | * | |
4 | * This library is free software; you can redistribute it and/or | |
5 | * modify it under the terms of the GNU Library General Public | |
6 | * License as published by the Free Software Foundation; either | |
7 | * version 2 of the License, or (at your option) any later version. | |
8 | * | |
9 | * This library is distributed in the hope that it will be useful, | |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 | * Library General Public License for more details. | |
13 | * | |
14 | * You should have received a copy of the GNU Library General Public License | |
15 | * along with this library; see the file COPYING.LIB. If not, write to | |
16 | * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | |
17 | * Boston, MA 02110-1301, USA. | |
18 | * | |
19 | */ | |
20 | ||
21 | #include "config.h" | |
22 | #include "Vector.h" | |
23 | #include <winbase.h> | |
24 | #include <winnls.h> | |
25 | #include <wtf/UnusedParam.h> | |
26 | ||
27 | int main(int argc, char** argv); | |
28 | ||
29 | static inline char* convertToUtf8(LPCWSTR widecharString, int length) | |
30 | { | |
31 | int requiredSize = WideCharToMultiByte(CP_UTF8, 0, widecharString, length, 0, 0, 0, 0); | |
32 | char* multibyteString = new char[requiredSize + 1]; | |
33 | ||
34 | WideCharToMultiByte(CP_UTF8, 0, widecharString, length, multibyteString, requiredSize, 0, 0); | |
35 | multibyteString[requiredSize] = '\0'; | |
36 | ||
37 | return multibyteString; | |
38 | } | |
39 | ||
40 | int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) | |
41 | { | |
42 | UNUSED_PARAM(hInstance); | |
43 | UNUSED_PARAM(hPrevInstance); | |
44 | UNUSED_PARAM(nCmdShow); | |
45 | ||
46 | Vector<char*> arguments; | |
47 | TCHAR buffer[MAX_PATH]; | |
48 | ||
49 | int length = GetModuleFileNameW(0, buffer, MAX_PATH); | |
50 | arguments.append(convertToUtf8(buffer, length)); | |
51 | ||
52 | WCHAR* commandLine = lpCmdLine; | |
53 | while (commandLine[0] != '\0') { | |
54 | int commandLineLength = 1; | |
55 | WCHAR endChar = ' '; | |
56 | ||
57 | while (commandLine[0] == ' ') | |
58 | ++commandLine; | |
59 | ||
60 | if (commandLine[0] == '\"') { | |
61 | ++commandLine; | |
62 | endChar = '\"'; | |
63 | } | |
64 | ||
65 | while (commandLine[commandLineLength] != endChar && commandLine[commandLineLength] != '\0') | |
66 | ++commandLineLength; | |
67 | ||
68 | arguments.append(convertToUtf8(commandLine, commandLineLength)); | |
69 | ||
70 | commandLine += commandLineLength; | |
71 | if (endChar != ' ' && commandLine[0] != '\0') | |
72 | ++commandLine; | |
73 | } | |
74 | ||
75 | int res = main(arguments.size(), arguments.data()); | |
76 | ||
77 | for (size_t i = 0; i < arguments.size(); i++) | |
78 | delete arguments[i]; | |
79 | ||
80 | return res; | |
81 | } |