winebrowser: Support browser and mailer commands with arguments.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
01cc315b91
commit
e27e733f69
|
@ -1,6 +1,6 @@
|
||||||
MODULE = winebrowser.exe
|
MODULE = winebrowser.exe
|
||||||
APPMODE = -mwindows -municode
|
APPMODE = -mwindows -municode
|
||||||
IMPORTS = urlmon oleaut32 user32 advapi32
|
IMPORTS = urlmon oleaut32 shell32 user32 advapi32
|
||||||
|
|
||||||
C_SRCS = \
|
C_SRCS = \
|
||||||
main.c
|
main.c
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <shlwapi.h>
|
#include <shlwapi.h>
|
||||||
|
#include <shellapi.h>
|
||||||
#include <urlmon.h>
|
#include <urlmon.h>
|
||||||
#include <ddeml.h>
|
#include <ddeml.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -71,27 +72,31 @@ static char *strdup_unixcp( const WCHAR *str )
|
||||||
/* try to launch a unix app from a comma separated string of app names */
|
/* try to launch a unix app from a comma separated string of app names */
|
||||||
static int launch_app( const WCHAR *candidates, const WCHAR *argv1 )
|
static int launch_app( const WCHAR *candidates, const WCHAR *argv1 )
|
||||||
{
|
{
|
||||||
char *app, *cmdline;
|
char *cmdline;
|
||||||
const char *argv_new[3];
|
int i, count;
|
||||||
|
char **argv_new;
|
||||||
|
|
||||||
if (!(cmdline = strdup_unixcp( argv1 ))) return 1;
|
if (!(cmdline = strdup_unixcp( argv1 ))) return 1;
|
||||||
|
|
||||||
while (*candidates)
|
while (*candidates)
|
||||||
{
|
{
|
||||||
if (!(app = strdup_unixcp( candidates ))) break;
|
WCHAR **args = CommandLineToArgvW( candidates, &count );
|
||||||
|
|
||||||
WINE_TRACE( "Considering: %s\n", wine_dbgstr_a(app) );
|
if (!(argv_new = HeapAlloc( GetProcessHeap(), 0, (count + 1) * sizeof(*argv_new) ))) break;
|
||||||
WINE_TRACE( "argv[1]: %s\n", wine_dbgstr_a(cmdline) );
|
for (i = 0; i < count; i++) argv_new[i] = strdup_unixcp( args[i] );
|
||||||
|
argv_new[count] = cmdline;
|
||||||
|
argv_new[count + 1] = NULL;
|
||||||
|
|
||||||
argv_new[0] = app;
|
TRACE( "Trying" );
|
||||||
argv_new[1] = cmdline;
|
for (i = 0; i <= count; i++) TRACE( " %s", wine_dbgstr_a( argv_new[i] ));
|
||||||
argv_new[2] = NULL;
|
TRACE( "\n" );
|
||||||
|
|
||||||
_spawnvp( _P_OVERLAY, app, argv_new ); /* only returns on error */
|
_spawnvp( _P_OVERLAY, argv_new[0], (const char **)argv_new ); /* only returns on error */
|
||||||
HeapFree( GetProcessHeap(), 0, app );
|
for (i = 0; i < count; i++) HeapFree( GetProcessHeap(), 0, argv_new[i] );
|
||||||
|
HeapFree( GetProcessHeap(), 0, argv_new );
|
||||||
candidates += strlenW( candidates ) + 1; /* grab the next app */
|
candidates += strlenW( candidates ) + 1; /* grab the next app */
|
||||||
}
|
}
|
||||||
WINE_ERR( "could not find a suitable app to run\n" );
|
WINE_ERR( "could not find a suitable app to open %s\n", debugstr_w( argv1 ));
|
||||||
|
|
||||||
HeapFree( GetProcessHeap(), 0, cmdline );
|
HeapFree( GetProcessHeap(), 0, cmdline );
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in New Issue