static int tta_set_opt(const char *unused, const char *values) { int argc, i; char **argv; g_io_buffer_size = WVPACK_BUFFERED_READER_BUFFER_SIZE; dbg_printf(d, "%s: options are %s", __func__, values); build_args(values, &argc, &argv); for (i = 0; i < argc; ++i) { if (!strncasecmp (argv[i], "tta_buffer_size", sizeof("tta_buffer_size") - 1)) { const char *p = argv[i]; if ((p = strrchr(p, '=')) != NULL) { p++; g_io_buffer_size = atoi(p); if (g_io_buffer_size < 8192) { g_io_buffer_size = 8192; } } } } clean_args(argc, argv); return 0; }
static gchar * gnuindent (GrindBackendGNUIndent *self, GeanyDocument *doc, const gchar *input, GError **error) { GPid pid; int input_fd; int output_fd; int error_fd; gchar *output = NULL; gchar **argv; argv = build_args (self, doc); if (g_spawn_async_with_pipes (NULL, argv, NULL, G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, &pid, &input_fd, &output_fd, &error_fd, error)) { GSource *source; GMainContext *ctx = g_main_context_new (); BlockData data; data.error = NULL; data.loop = g_main_loop_new (ctx, FALSE); data.output_str = g_string_new (NULL); data.error_str = g_string_new (NULL); source = g_child_watch_source_new (pid); g_source_set_callback (source, (GSourceFunc)child_watch_handler, &data, NULL); g_source_attach (source, ctx); g_source_unref (source); /* output */ add_watch_fd (output_fd, G_IO_IN | G_IO_PRI | G_IO_ERR | G_IO_HUP | G_IO_NVAL, ctx, (GIOFunc)output_ready_handler, &data); /* error */ add_watch_fd (error_fd, G_IO_IN | G_IO_PRI | G_IO_ERR | G_IO_HUP | G_IO_NVAL, ctx, (GIOFunc)error_ready_handler, &data); if (write_input (input_fd, input, &data.error)) { g_main_loop_run (data.loop); } if (! data.error) { output = g_string_free (data.output_str, FALSE); } else { g_string_free (data.output_str, TRUE); g_propagate_error (error, data.error); } g_string_free (data.error_str, TRUE); g_main_loop_unref (data.loop); g_main_context_unref (ctx); } g_strfreev (argv); return output; }
int generic_set_opt(const char *unused, const char *values) { int argc; char **argv; build_args(values, &argc, &argv); clean_args(argc, argv); return 0; }
static int mp3_set_opt(const char *unused, const char *values) { int argc, i; char **argv; init_default_option(); dbg_printf(d, "%s: options are %s", __func__, values); build_args(values, &argc, &argv); for (i = 0; i < argc; ++i) { if (!strncasecmp (argv[i], "mp3_brute_mode", sizeof("mp3_brute_mode") - 1)) { if (opt_is_on(argv[i])) { use_brute_method = true; } else { use_brute_method = false; } } else if (!strncasecmp(argv[i], "mp3_use_me", sizeof("mp3_use_me") - 1)) { if (opt_is_on(argv[i])) { use_me = true; } else { use_me = false; } } else if (!strncasecmp (argv[i], "mp3_check_crc", sizeof("mp3_check_crc") - 1)) { if (opt_is_on(argv[i])) { check_crc = true; } else { check_crc = false; } } else if (!strncasecmp (argv[i], "mp3_buffer_size", sizeof("mp3_buffer_size") - 1)) { const char *p = argv[i]; if ((p = strrchr(p, '=')) != NULL) { p++; g_io_buffer_size = atoi(p); if (g_io_buffer_size < 8192) { g_io_buffer_size = 8192; } } } } clean_args(argc, argv); return 0; }
/** * Slot : Button Start Rare */ void KdeStartImpl::slotStartRace() { int iLaps = SpinLaps->value(); int iRandom = SpinRandom->value(); const char * sTrackName = ComboTrack->currentText(); const char * sMovie = ComboMovie->currentText(); const char * sOpenGL = ComboOpenGL->currentText(); const char * sFollowCar = ComboFollowCar->currentText(); int iRadioQualif = (RadioRaceRandom->isChecked()?0:1); int iQualifLaps = SpinQualifLaps->value(); int iQualifNumber = SpinQualifNumber->value(); int iNumSelectedDrivers = ListSelected->count(); int iSurface = ComboSurface->currentItem(); if( iNumSelectedDrivers==0 ) { QMessageBox::warning( 0, "Error", "No driver has been selected." ); return; } const char ** aDrivers = (const char**) new char**[ iNumSelectedDrivers ]; for( int i=0; i<iNumSelectedDrivers; i++ ) { aDrivers[i] = ListSelected->text( i ); } build_args( iNumSelectedDrivers, iLaps, iRandom, iSurface, sTrackName, sMovie, sOpenGL, iRadioQualif, iQualifLaps, iQualifNumber, sFollowCar, aDrivers ); g_kde_rars = new KdeRars; this->hide(); g_kde_rars->show(); }
static Atom* parse_line(const gchar* ln) { static GRegex* re = NULL; GMatchInfo* mi = NULL; Atom* rv = NULL; if ( !re ) { re = g_regex_new("(-*)([A-Z]+)(?:\\((.+)*\\))?", G_REGEX_OPTIMIZE, G_REGEX_MATCH_NOTEMPTY, NULL); } if ( g_regex_match(re, ln, 0, &mi) ) { gchar* dashes = g_match_info_fetch(mi, 1); rv = atom_new( identify(g_match_info_fetch(mi, 2)), dashes ? strlen(dashes) : 0, build_args(g_match_info_fetch(mi, 3))); g_match_info_free(mi); } return rv; }
static exe_cmd_init cmd (std::string && cmd) { auto args = build_args(cmd); return exe_cmd_init({}, std::move(args)); }
int wmain (int argc, WCHAR *argv[]) { SHELLEXECUTEINFOW sei; WCHAR *args = NULL; int i; int unix_mode = 0; int progid_open = 0; WCHAR *dos_filename = NULL; WCHAR *parent_directory = NULL; DWORD binary_type; static const WCHAR openW[] = { 'o', 'p', 'e', 'n', 0 }; static const WCHAR unixW[] = { 'u', 'n', 'i', 'x', 0 }; static const WCHAR progIDOpenW[] = { 'p', 'r', 'o', 'g', 'I', 'D', 'O', 'p', 'e', 'n', 0}; memset(&sei, 0, sizeof(sei)); sei.cbSize = sizeof(sei); sei.lpVerb = openW; sei.nShow = SW_SHOWNORMAL; /* Dunno what these mean, but it looks like winMe's start uses them */ sei.fMask = SEE_MASK_FLAG_DDEWAIT| SEE_MASK_FLAG_NO_UI| SEE_MASK_NO_CONSOLE; /* Canonical Microsoft commandline flag processing: * flags start with /, are case insensitive, * and may be run together in same word. */ for (i=1; i<argc; i++) { int ci; if (argv[i][0] != '/') break; /* Unix paths can start with / so we have to assume anything following /U is not a flag */ if (unix_mode || progid_open) break; /* Handle all options in this word */ for (ci=0; argv[i][ci]; ) { /* Skip slash */ ci++; switch(argv[i][ci]) { case 'b': case 'B': break; /* FIXME: should stop new window from being created */ case 'i': case 'I': break; /* FIXME: should ignore any changes to current environment */ case 'l': case 'L': license(); break; /* notreached */ case 'm': case 'M': if (argv[i][ci+1] == 'a' || argv[i][ci+1] == 'A') sei.nShow = SW_SHOWMAXIMIZED; else sei.nShow = SW_SHOWMINIMIZED; break; case 'r': case 'R': /* sei.nShow = SW_SHOWNORMAL; */ break; case 'u': case 'U': if (strncmpiW(&argv[i][ci], unixW, 4) == 0) unix_mode = 1; else { WINE_ERR("Option '%s' not recognized\n", wine_dbgstr_w( argv[i]+ci-1)); usage(); } break; case 'p': case 'P': if (strncmpiW(&argv[i][ci], progIDOpenW, 17) == 0) progid_open = 1; else { WINE_ERR("Option '%s' not recognized\n", wine_dbgstr_w( argv[i]+ci-1)); usage(); } break; case 'w': case 'W': sei.fMask |= SEE_MASK_NOCLOSEPROCESS; break; default: WINE_ERR("Option '%s' not recognized\n", wine_dbgstr_w( argv[i]+ci-1)); usage(); } /* Skip to next slash */ while (argv[i][ci] && (argv[i][ci] != '/')) ci++; } } if (i == argc) usage(); if (progid_open) { sei.lpClass = argv[i++]; sei.fMask |= SEE_MASK_CLASSNAME; } sei.lpFile = argv[i++]; args = build_args( argc - i, &argv[i] ); sei.lpParameters = args; if (unix_mode || progid_open) { LPWSTR (*CDECL wine_get_dos_file_name_ptr)(LPCSTR); char* multibyte_unixpath; int multibyte_unixpath_len; wine_get_dos_file_name_ptr = (void*)GetProcAddress(GetModuleHandleA("KERNEL32"), "wine_get_dos_file_name"); if (!wine_get_dos_file_name_ptr) fatal_string(STRING_UNIXFAIL); multibyte_unixpath_len = WideCharToMultiByte(CP_UNIXCP, 0, sei.lpFile, -1, NULL, 0, NULL, NULL); multibyte_unixpath = HeapAlloc(GetProcessHeap(), 0, multibyte_unixpath_len); WideCharToMultiByte(CP_UNIXCP, 0, sei.lpFile, -1, multibyte_unixpath, multibyte_unixpath_len, NULL, NULL); dos_filename = wine_get_dos_file_name_ptr(multibyte_unixpath); HeapFree(GetProcessHeap(), 0, multibyte_unixpath); if (!dos_filename) fatal_string(STRING_UNIXFAIL); sei.lpFile = dos_filename; sei.lpDirectory = parent_directory = get_parent_dir(dos_filename); sei.fMask &= ~SEE_MASK_FLAG_NO_UI; if (GetBinaryTypeW(sei.lpFile, &binary_type)) { WCHAR *commandline; STARTUPINFOW startup_info; PROCESS_INFORMATION process_information; static WCHAR commandlineformat[] = {'"','%','s','"','%','s',0}; /* explorer on windows always quotes the filename when running a binary on windows (see bug 5224) so we have to use CreateProcessW in this case */ commandline = HeapAlloc(GetProcessHeap(), 0, (strlenW(sei.lpFile)+3+strlenW(sei.lpParameters))*sizeof(WCHAR)); sprintfW(commandline, commandlineformat, sei.lpFile, sei.lpParameters); ZeroMemory(&startup_info, sizeof(startup_info)); startup_info.cb = sizeof(startup_info); if (!CreateProcessW( NULL, /* lpApplicationName */ commandline, /* lpCommandLine */ NULL, /* lpProcessAttributes */ NULL, /* lpThreadAttributes */ FALSE, /* bInheritHandles */ CREATE_NEW_CONSOLE, /* dwCreationFlags */ NULL, /* lpEnvironment */ sei.lpDirectory, /* lpCurrentDirectory */ &startup_info, /* lpStartupInfo */ &process_information /* lpProcessInformation */ )) { fatal_string_error(STRING_EXECFAIL, GetLastError(), sei.lpFile); } sei.hProcess = process_information.hProcess; goto done; } } if (!ShellExecuteExW(&sei)) fatal_string_error(STRING_EXECFAIL, GetLastError(), sei.lpFile); done: HeapFree( GetProcessHeap(), 0, args ); HeapFree( GetProcessHeap(), 0, dos_filename ); HeapFree( GetProcessHeap(), 0, parent_directory ); if (sei.fMask & SEE_MASK_NOCLOSEPROCESS) { DWORD exitcode; WaitForSingleObject(sei.hProcess, INFINITE); GetExitCodeProcess(sei.hProcess, &exitcode); ExitProcess(exitcode); } ExitProcess(0); }
void emu_exec(int n) { pid_t childpid; int status; gui_clean(); arg = (ARGS *) malloc( sizeof(ARGS)); int n_args = build_args(); char exec_rom[512]; sprintf( exec_rom, "%s/%s", config->roms_path, roms[n] ); if ((childpid = fork()) == -1) { printf("Error in the fork"); } else if (childpid == 0) { printf("childpid OK\n"); if(n_args == 0) { if (execl(emu->exec, emu->exec, exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 1) { if (execl(emu->exec, emu->exec, arg->value[0], exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 2) { if (execl(emu->exec, emu->exec, arg->value[0], arg->value[1], exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 3) { if (execl(emu->exec, emu->exec, arg->value[0], arg->value[1], arg->value[2], exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 4) { printf("args : %s %s %s %s\n", arg->value[0], arg->value[1], arg->value[2], arg->value[3] ); if (execl(emu->exec, emu->exec, arg->value[0], arg->value[1], arg->value[2], arg->value[3], exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 5) { if (execl(emu->exec, emu->exec, arg->value[0], arg->value[1], arg->value[2], arg->value[3], arg->value[4], exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 6) { if (execl(emu->exec, emu->exec, arg->value[0], arg->value[1], arg->value[2], arg->value[3], arg->value[4], arg->value[5], exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 7) { if (execl(emu->exec, emu->exec, arg->value[0], arg->value[1], arg->value[2], arg->value[3], arg->value[4], arg->value[5], arg->value[6], exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 8) { if (execl(emu->exec, emu->exec, arg->value[0], arg->value[1], arg->value[2], arg->value[3], arg->value[4], arg->value[5], arg->value[6], arg->value[7], exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 9) { if (execl(emu->exec, emu->exec, arg->value[0], arg->value[1], arg->value[2], arg->value[3], arg->value[4], arg->value[5], arg->value[6], arg->value[7], arg->value[8], exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 10) { if (execl(emu->exec, emu->exec, arg->value[0], arg->value[1], arg->value[2], arg->value[3], arg->value[4], arg->value[5], arg->value[6], arg->value[7], arg->value[8], arg->value[9], exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 11) { if (execl(emu->exec, emu->exec, arg->value[0], arg->value[1], arg->value[2], arg->value[3], arg->value[4], arg->value[5], arg->value[6], arg->value[7], arg->value[8], arg->value[9], arg->value[10], exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 12) { if (execl(emu->exec, emu->exec, arg->value[0], arg->value[1], arg->value[2], arg->value[3], arg->value[4], arg->value[5], arg->value[6], arg->value[7], arg->value[8], arg->value[9], arg->value[10], arg->value[11], exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 13) { if (execl(emu->exec, emu->exec, arg->value[0], arg->value[1], arg->value[2], arg->value[3], arg->value[4], arg->value[5], arg->value[6], arg->value[7], arg->value[8], arg->value[9], arg->value[10], arg->value[11], arg->value[12], exec_rom, NULL) < 0) printf("Exec failed"); } else if(n_args == 14) { if (execl(emu->exec, emu->exec, arg->value[0], arg->value[1], arg->value[2], arg->value[3], arg->value[4], arg->value[5], arg->value[6], arg->value[7], arg->value[8], arg->value[9], arg->value[10], arg->value[11], arg->value[12], arg->value[13], exec_rom, NULL) < 0) printf("Exec failed"); } } else if (childpid != wait(&status)) { printf("A signal occurred before the child exited"); } free(arg); gui_init_sdl(); gui_load(); }