}
}
+static char **convert_unix_paths( char **argv )
+{
+ int ac, argc = 0;
+ char **ret;
+
+ while (argv[++argc]);
+ ret = RtlAllocateHeap( GetProcessHeap(), 0, (argc + 1) * sizeof(*argv) );
+
+ for (ac = 0; ac < argc; ++ac)
+ {
+ WCHAR *dos_path;
+ int fd, len;
+
+ fd = open( argv[ac], O_RDONLY );
+ if (fd < 0)
+ {
+ len = strlen(argv[ac]) + 1;
+ ret[ac] = RtlAllocateHeap( GetProcessHeap(), 0, len );
+ strcpy( ret[ac], argv[ac] );
+ }
+ else
+ {
+ close( fd );
+ dos_path = wine_get_dos_file_name( argv[ac] );
+ len = WideCharToMultiByte( CP_UNIXCP, 0, dos_path, -1, ret[ac], 0,
+ NULL, NULL );
+ ret[ac] = RtlAllocateHeap( GetProcessHeap(), 0, len );
+ WideCharToMultiByte( CP_UNIXCP, 0, dos_path, -1, ret[ac], len, NULL,
+ NULL );
+ RtlFreeHeap( GetProcessHeap(), 0, dos_path );
+ }
+ }
+ ret[ac] = NULL;
+
+ return ret;
+}
+
+static void free_converted_paths( char **argv )
+{
+ int ac;
+
+ for (ac = 0; argv[ac]; ++ac)
+ RtlFreeHeap( GetProcessHeap(), 0, argv[ac] );
+ RtlFreeHeap( GetProcessHeap(), 0, argv );
+}
/***********************************************************************
* __wine_kernel_init
HANDLE boot_events[2];
BOOL got_environment = TRUE;
BOOL got_current_dir = FALSE;
+ char **argv;
/* Initialize everything */
init_current_directory( ¶ms->CurrentDirectory, &got_current_dir );
set_process_name( __wine_main_argc, __wine_main_argv );
- set_library_wargv( __wine_main_argv );
+ argv = convert_unix_paths( __wine_main_argv );
+ set_library_wargv( argv );
+ free_converted_paths( argv );
boot_events[0] = boot_events[1] = 0;
if (peb->ProcessParameters->ImagePathName.Buffer)