- STARTUPINFO si;
- PROCESS_INFORMATION pi;
-
- ZeroMemory( &si, sizeof(si) );
- ZeroMemory( &pi, sizeof(pi) );
- si.cb = sizeof(si);
- si.dwFlags = STARTF_USESHOWWINDOW;
- si.wShowWindow = SW_HIDE;
-
-
- cmd = g_strjoinv( " ", args);
- args2 = g_strsplit(cmd, "\\", 0);
- cmd = g_strjoinv( "\\\\", args2);
- g_free(args2);
- args2 = g_strsplit(cmd, "/", 0);
- g_free(cmd);
- cmd = g_strjoinv( "\\\\", args2);
-
- if( !CreateProcess(
- NULL, // No module name (use command line).
- (LPTSTR)cmd, // Command line.
- NULL, // Process handle not inheritable.
- NULL, // Thread handle not inheritable.
- FALSE, // Set handle inheritance to FALSE.
- 0, // No creation flags.
- NULL, // Use parent's environment block.
- NULL, // Use parent's starting directory.
- &si, // Pointer to STARTUPINFO structure.
- &pi ) // Pointer to PROCESS_INFORMATION structure.
- ){
- g_warning( "CreateProcess failed" );
- ret = FALSE;
- }
- else {
-
- WaitForSingleObject(pi.hProcess, INFINITE);
- WaitForSingleObject(pi.hThread, INFINITE);
-
- CloseHandle(pi.hThread);
- CloseHandle(pi.hProcess);
-
- if ( cb )
- cb(BABEL_DONE, NULL, user_data);
-
- ret = TRUE;
- }
-
- g_strfreev(args2);
- g_free( cmd );
-
- return ret;
-}
-/* Windows */
-#else
-/* Posix */
-static gboolean babel_general_convert_to( VikTrwLayer *vt, BabelStatusFunc cb, gchar **args, const gchar *name_src, gpointer user_data )
-{
- gboolean ret = FALSE;
- GPid pid;
- GError *error = NULL;
- gint babel_stdout;
-
- if (!a_file_export(vt, name_src, FILE_TYPE_GPX, NULL)) {
- g_warning("%s(): error exporting to %s", __FUNCTION__, name_src);
- return(FALSE);
- }
-
- if (!g_spawn_async_with_pipes (NULL, args, NULL, 0, NULL, NULL, &pid, NULL, &babel_stdout, NULL, &error)) {
- g_warning("Error : %s", error->message);
- g_error_free(error);
- ret = FALSE;
- } else {
- gchar line[512];
- FILE *diag;
- diag = fdopen(babel_stdout, "r");
- setvbuf(diag, NULL, _IONBF, 0);
-
- while (fgets(line, sizeof(line), diag)) {
- if ( cb )
- cb(BABEL_DIAG_OUTPUT, line, user_data);
- }
- if ( cb )
- cb(BABEL_DONE, NULL, user_data);
- fclose(diag);
- diag = NULL;
- waitpid(pid, NULL, 0);
- g_spawn_close_pid(pid);
-
- ret = TRUE;
- }
-
- return ret;