2 * Default entry point for a Unicode exe
4 * Copyright 2005 Alexandre Julliard
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
25 /* this is actually part of a static lib linked into a .exe.so module, not a real Unix library */
33 extern int wmain( int argc
, WCHAR
*argv
[] );
34 extern void __wine_init_so_dll(void) DECLSPEC_HIDDEN
;
36 static WCHAR
**build_argv( const WCHAR
*src
, int *ret_argc
)
38 WCHAR
**argv
, *arg
, *dst
;
39 int argc
, in_quotes
= 0, bcount
= 0, len
= lstrlenW(src
) + 1;
42 argv
= HeapAlloc( GetProcessHeap(), 0, argc
* sizeof(*argv
) + len
* sizeof(WCHAR
) );
43 arg
= dst
= (WCHAR
*)(argv
+ argc
);
47 if ((*src
== ' ' || *src
== '\t') && !in_quotes
)
49 /* skip the remaining spaces */
50 while (*src
== ' ' || *src
== '\t') src
++;
52 /* close the argument and copy it */
55 /* start with a new argument */
59 else if (*src
== '\\')
66 if ((bcount
& 1) == 0)
68 /* Preceded by an even number of '\', this is half that
69 * number of '\', plus a '"' which we discard.
73 if (in_quotes
&& *src
== '"') *dst
++ = *src
++;
74 else in_quotes
= !in_quotes
;
78 /* Preceded by an odd number of '\', this is half that
79 * number of '\' followed by a '"'
81 dst
-= bcount
/ 2 + 1;
86 else /* a regular character */
99 DWORD WINAPI DECLSPEC_HIDDEN
__wine_spec_exe_wentry( PEB
*peb
)
102 WCHAR
**argv
= build_argv( GetCommandLineW(), &argc
);
104 __wine_init_so_dll();
105 ExitProcess( wmain( argc
, argv
));