"Alexander Nicolaysen Sørnes" alex@thehandofagony.com wrote:
NOTE: This will only work when run from Wine's cmd, but that's ok as start is a builtin
shell command on NT */
What's the purpose of the comment above?
if(argc > 1 && (vi.dwMajorVersion >= 5 || (vi.dwMajorVersion == 4 && vi.dwPlatformId == 2)))
Unless there is an app which would break because of the title set there is no need to check the version.
{
int cmdcount;
WCHAR* cmdline = GetCommandLineW();
WCHAR** cmdargs = CommandLineToArgvW(cmdline, &cmdcount);
WCHAR* pos = cmdline;
wmain() already has arc/argv pair of parameters, why do you need to parse command line again?
pos += lstrlenW(cmdargs[0]);
while(*pos == ' ')
pos++;
if(*pos == '"')
{
/* FIXME: Set the process title */
i++;
}
LocalFree(cmdargs);
}
I assume that you've added LocalFree as MSDN suggests, but CommandLineToArgvW in Wine uses GlobalAlloc, perhaps you could fix that?
On Monday 28 January 2008 04:58:12 you wrote:
"Alexander Nicolaysen Sørnes" alex@thehandofagony.com wrote:
NOTE: This will only work when run from Wine's cmd, but
that's ok as start is a builtin + shell command on NT */
What's the purpose of the comment above?
Just to be informative to someone working with start.exe. I can remove it.
if(argc > 1 && (vi.dwMajorVersion >= 5 || (vi.dwMajorVersion ==
4 && vi.dwPlatformId == 2)))
Unless there is an app which would break because of the title set there is no need to check the version.
I don't have an app handy that relies on the DOS/Win 9x behaviour of start, but commands like
start "notepad" a.txt start "C:\Program Files\app.exe"
would work with the old behaviour but not with the new one; thus I assumed some apps would break if not checking the Windows version.
{
int cmdcount;
WCHAR* cmdline = GetCommandLineW();
WCHAR** cmdargs = CommandLineToArgvW(cmdline, &cmdcount);
WCHAR* pos = cmdline;
wmain() already has arc/argv pair of parameters, why do you need to parse command line again?
We need to check for the first parameter beginning with a double quote ("). This is stripped from the argv array.
pos += lstrlenW(cmdargs[0]);
while(*pos == ' ')
pos++;
if(*pos == '"')
{
/* FIXME: Set the process title */
i++;
}
LocalFree(cmdargs);
}
I assume that you've added LocalFree as MSDN suggests, but CommandLineToArgvW in Wine uses GlobalAlloc, perhaps you could fix that?
Sure. :)