void TTSFestival::generateSettings() { // server path QString exepath = RbSettings::subValue("festival-server",RbSettings::TtsPath).toString(); if(exepath == "" ) exepath = findExecutable("festival"); insertSetting(eSERVERPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to Festival server:",exepath,EncTtsSetting::eBROWSEBTN)); // client path QString clientpath = RbSettings::subValue("festival-client",RbSettings::TtsPath).toString(); if(clientpath == "" ) clientpath = findExecutable("festival_client"); insertSetting(eCLIENTPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING, tr("Path to Festival client:"),clientpath,EncTtsSetting::eBROWSEBTN)); // voice EncTtsSetting* setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST, tr("Voice:"),RbSettings::subValue("festival",RbSettings::TtsVoice),getVoiceList(exepath),EncTtsSetting::eREFRESHBTN); connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList())); connect(setting,SIGNAL(dataChanged()),this,SLOT(clearVoiceDescription())); insertSetting(eVOICE,setting); //voice description setting = new EncTtsSetting(this,EncTtsSetting::eREADONLYSTRING, tr("Voice description:"),"",EncTtsSetting::eREFRESHBTN); connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceDescription())); insertSetting(eVOICEDESC,setting); }
static void initPaths() { char plp[MAXPATHLEN]; char *symbols = NULL; /* The executable */ if ( !(symbols = findExecutable(GD->cmdline.argv[0], plp)) || !(symbols = DeRefLink(symbols, plp)) ) symbols = GD->cmdline.argv[0]; #ifdef OS2 symbols = GD->cmdline.argv[0]; #endif DEBUG(2, Sdprintf("rc-module: %s\n", symbols)); systemDefaults.home = findHome(symbols); #ifdef __WIN32__ /* we want no module but the .EXE */ symbols = findExecutable(NULL, plp); DEBUG(2, Sdprintf("Executable: %s\n", symbols)); #endif GD->paths.executable = store_string(symbols); systemDefaults.startup = store_string(PrologPath(DEFSTARTUP, plp)); GD->options.systemInitFile = defaultSystemInitFile(GD->cmdline.argv[0]); #ifdef O_XOS if ( systemDefaults.home ) { char buf[MAXPATHLEN]; _xos_limited_os_filename(systemDefaults.home, buf); systemDefaults.home = store_string(buf); } #endif }
/* static */ bool FATFilesystem::runtimeCheck() { DEBUGSETUP; #ifdef ANY_BSD newfs_fat = findExecutable(QStringLiteral( "newfs_msdos" )); #elif defined(ANY_LINUX) newfs_fat = findExecutable(QStringLiteral( "mkdosfs" )); #else return false; #endif return !newfs_fat.isEmpty(); }
int Process::exec(const QString &program, const QStringList &arguments, bool throwOnError) { Q_ASSERT(thisObject().engine() == engine()); if (!start(findExecutable(program), arguments)) { if (throwOnError) { context()->throwError(Tr::tr("Error running '%1': %2") .arg(program, m_qProcess->errorString())); } return -1; } m_qProcess->closeWriteChannel(); m_qProcess->waitForFinished(-1); if (throwOnError) { if (m_qProcess->error() != QProcess::UnknownError) { context()->throwError(Tr::tr("Error running '%1': %2") .arg(program, m_qProcess->errorString())); } else if (m_qProcess->exitCode() != 0) { QString errorMessage = Tr::tr("Process '%1' finished with exit code %2.") .arg(program).arg(m_qProcess->exitCode()); const QString stdErr = readStdErr(); if (!stdErr.isEmpty()) errorMessage.append(Tr::tr(" The standard error output was:\n")).append(stdErr); context()->throwError(errorMessage); } } if (m_qProcess->error() != QProcess::UnknownError) return -1; return m_qProcess->exitCode(); }
/* static */ bool MinixFilesystem::runtimeCheck() { DEBUGSETUP; newfs = findExecutable(QStringLiteral( "mkfs.minix" )); return !newfs.isEmpty(); }
void TTSExes::generateSettings() { QString exepath =RbSettings::subValue(m_name,RbSettings::TtsPath).toString(); if(exepath == "") exepath = findExecutable(m_name); insertSetting(eEXEPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING, tr("Path to TTS engine:"),exepath,EncTtsSetting::eBROWSEBTN)); insertSetting(eOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING, tr("TTS engine options:"),RbSettings::subValue(m_name,RbSettings::TtsOptions))); }
bool Process::start(const QString &program, const QStringList &arguments) { Q_ASSERT(thisObject().engine() == engine()); if (!m_workingDirectory.isEmpty()) m_qProcess->setWorkingDirectory(m_workingDirectory); m_qProcess->setProcessEnvironment(m_environment); m_qProcess->start(findExecutable(program), arguments); return m_qProcess->waitForStarted(); }
static void initPaths(int argc, const char **argv) { char plp[MAXPATHLEN]; if ( argc > 0 ) { char plp1[MAXPATHLEN]; const char *symbols = NULL; /* The executable */ if ( !(symbols = findExecutable(argv[0], plp1)) || !(symbols = DeRefLink(symbols, plp)) ) symbols = argv[0]; DEBUG(2, Sdprintf("rc-module: %s\n", symbols)); systemDefaults.home = findHome(symbols, argc, argv); #ifdef __WINDOWS__ /* we want no module but the .EXE */ GD->paths.module = store_string(symbols); symbols = findExecutable(NULL, plp); DEBUG(2, Sdprintf("Executable: %s\n", symbols)); #endif GD->paths.executable = store_string(symbols); GD->options.systemInitFile = defaultSystemInitFile(argv[0]); } else { systemDefaults.home = findHome(NULL, argc, argv); GD->options.systemInitFile = store_string("none"); #ifdef __WINDOWS__ /* we want no module but the .EXE */ GD->paths.module = store_string("libswipl.dll"); #endif } systemDefaults.startup = store_string(PrologPath(DEFSTARTUP, plp, sizeof(plp))); #ifdef O_XOS if ( systemDefaults.home ) { char buf[MAXPATHLEN]; _xos_limited_os_filename(systemDefaults.home, buf); systemDefaults.home = store_string(buf); } #endif }
/* ================= Sys_ShellExecute ================= */ void Sys_ShellExecute( const char *path, const char *parms, qboolean shouldExit ) { #ifdef _WIN32 ShellExecute( NULL, "open", path, parms, NULL, SW_SHOW ); #elif (defined(__linux__) && !defined __ANDROID__) || defined (__FreeBSD__) || defined (__NetBSD__) || defined(__OpenBSD__) char xdgOpen[128]; if( findExecutable( "xdg-open", xdgOpen, sizeof( xdgOpen ) ) ) { const char *argv[] = {xdgOpen, path, NULL}; pid_t id = fork( ); if( id == 0 ) { execve( xdgOpen, (char **)argv, environ ); fprintf( stderr, "error opening %s %s", xdgOpen, path ); _exit( 1 ); } } else MsgDev( D_WARN, "Could not find xdg-open utility\n" ); #endif //TODO: Use 'open' on OS X? if( shouldExit ) Sys_Quit(); }
/* static */ bool DDZeroOut::runtimeCheck() { m_ddName = findExecutable(QStringLiteral( "dd" )); return (!m_ddName.isEmpty()); }
/* static */ bool FDFormat::runtimeCheck() { fdformatName = findExecutable(QStringLiteral( "fdformat" )); return (!fdformatName.isEmpty()); }
/* Build the command arguments. NOTE: argv is untrusted input. */ static void buildArgs(HttpConn *conn, MprCmd *cmd, int *argcp, cchar ***argvp) { HttpRx *rx; HttpTx *tx; char **argv; char *indexQuery, *cp, *tok; cchar *actionProgram, *fileName; size_t len; int argc, argind, i; rx = conn->rx; tx = conn->tx; fileName = tx->filename; assert(fileName); actionProgram = 0; argind = 0; argc = *argcp; if (tx->ext) { actionProgram = mprGetMimeProgram(rx->route->mimeTypes, tx->ext); if (actionProgram != 0) { argc++; } /* This is an Apache compatible hack for PHP 5.3 */ mprAddKey(rx->headers, "REDIRECT_STATUS", itos(HTTP_CODE_MOVED_TEMPORARILY)); } /* Count the args for ISINDEX queries. Only valid if there is not a "=" in the query. If this is so, then we must not have these args in the query env also? */ indexQuery = rx->parsedUri->query; if (indexQuery && !strchr(indexQuery, '=')) { argc++; for (cp = indexQuery; *cp; cp++) { if (*cp == '+') { argc++; } } } else { indexQuery = 0; } #if ME_WIN_LIKE || VXWORKS { char *bangScript, *cmdBuf, *program, *cmdScript; /* On windows we attempt to find an executable matching the fileName. We look for *.exe, *.bat and also do unix style processing "#!/program" */ findExecutable(conn, &program, &cmdScript, &bangScript, fileName); assert(program); if (cmdScript) { /* Cmd/Batch script (.bat | .cmd) Convert the command to the form where there are 4 elements in argv that cmd.exe can interpret. argv[0] = cmd.exe argv[1] = /Q argv[2] = /C argv[3] = ""script" args ..." */ argc = 4; len = (argc + 1) * sizeof(char*); argv = (char**) mprAlloc(len); memset(argv, 0, len); argv[argind++] = program; /* Duped in findExecutable */ argv[argind++] = "/Q"; argv[argind++] = "/C"; len = strlen(cmdScript) + 2 + 1; cmdBuf = mprAlloc(len); fmt(cmdBuf, len, "\"%s\"", cmdScript); argv[argind++] = cmdBuf; mprSetCmdDir(cmd, cmdScript); /* program will get freed when argv[] gets freed */ } else if (bangScript) { /* Script used "#!/program". NOTE: this may be overridden by a mime Action directive. */ argc++; /* Adding bangScript arg */ len = (argc + 1) * sizeof(char*); argv = (char**) mprAlloc(len); memset(argv, 0, len); argv[argind++] = program; /* Will get freed when argv[] is freed */ argv[argind++] = bangScript; /* Will get freed when argv[] is freed */ mprSetCmdDir(cmd, bangScript); } else { /* Either unknown extension or .exe (.out) program. */ len = (argc + 1) * sizeof(char*); argv = (char**) mprAlloc(len); memset(argv, 0, len); if (actionProgram) { argv[argind++] = sclone(actionProgram); } argv[argind++] = program; } } #else len = (argc + 1) * sizeof(char*); argv = mprAlloc(len); memset(argv, 0, len); if (actionProgram) { argv[argind++] = sclone(actionProgram); } // OPT - why clone all these string? argv[argind++] = sclone(fileName); #endif /* ISINDEX queries. Only valid if there is not a "=" in the query. If this is so, then we must not have these args in the query env also? FUTURE - should query vars be set in the env? */ if (indexQuery) { indexQuery = sclone(indexQuery); cp = stok(indexQuery, "+", &tok); while (cp) { argv[argind++] = mprEscapeCmd(mprUriDecode(cp), 0); cp = stok(NULL, "+", &tok); } } assert(argind <= argc); argv[argind] = 0; *argcp = argc; *argvp = (cchar**) argv; mprDebug("http cgi", 5, "CGI: command:"); for (i = 0; i < argind; i++) { mprDebug("http cgi", 5, " argv[%d] = %s", i, argv[i]); } }
/* Build the command arguments. NOTE: argv is untrusted input. */ static void buildArgs(MaConn *conn, MprCmd *cmd, int *argcp, char ***argvp) { MaRequest *req; MaResponse *resp; char *fileName, **argv, status[8], *indexQuery, *cp, *tok; cchar *actionProgram; int argc, argind, len; req = conn->request; resp = conn->response; fileName = resp->filename; mprAssert(fileName); actionProgram = 0; argind = 0; argc = *argcp; if (resp->extension) { actionProgram = maGetMimeActionProgram(req->host, resp->extension); if (actionProgram != 0) { argc++; } } /* This is an Apache compatible hack for PHP 5.3 */ mprItoa(status, sizeof(status), MPR_HTTP_CODE_MOVED_TEMPORARILY, 10); mprAddHash(req->headers, "REDIRECT_STATUS", mprStrdup(req, status)); /* Count the args for ISINDEX queries. Only valid if there is not a "=" in the query. If this is so, then we must not have these args in the query env also? */ indexQuery = req->parsedUri->query; if (indexQuery && !strchr(indexQuery, '=')) { argc++; for (cp = indexQuery; *cp; cp++) { if (*cp == '+') { argc++; } } } else { indexQuery = 0; } #if BLD_WIN_LIKE || VXWORKS { char *bangScript, *cmdBuf, *program, *cmdScript; /* On windows we attempt to find an executable matching the fileName. We look for *.exe, *.bat and also do unix style processing "#!/program" */ findExecutable(conn, &program, &cmdScript, &bangScript, fileName); mprAssert(program); if (cmdScript) { /* Cmd/Batch script (.bat | .cmd) Convert the command to the form where there are 4 elements in argv that cmd.exe can interpret. argv[0] = cmd.exe argv[1] = /Q argv[2] = /C argv[3] = ""script" args ..." */ argc = 4; len = (argc + 1) * sizeof(char*); argv = (char**) mprAlloc(cmd, len); memset(argv, 0, len); argv[argind++] = program; /* Duped in findExecutable */ argv[argind++] = mprStrdup(cmd, "/Q"); argv[argind++] = mprStrdup(cmd, "/C"); len = (int) strlen(cmdScript) + 2 + 1; cmdBuf = (char*) mprAlloc(cmd, len); mprSprintf(cmdBuf, len, "\"%s\"", cmdScript); argv[argind++] = cmdBuf; mprSetCmdDir(cmd, cmdScript); mprFree(cmdScript); /* program will get freed when argv[] gets freed */ } else if (bangScript) { /* Script used "#!/program". NOTE: this may be overridden by a mime Action directive. */ argc++; /* Adding bangScript arg */ len = (argc + 1) * sizeof(char*); argv = (char**) mprAlloc(cmd, len); memset(argv, 0, len); argv[argind++] = program; /* Will get freed when argv[] is freed */ argv[argind++] = bangScript; /* Will get freed when argv[] is freed */ mprSetCmdDir(cmd, bangScript); } else { /* Either unknown extension or .exe (.out) program. */ len = (argc + 1) * sizeof(char*); argv = (char**) mprAlloc(cmd, len); memset(argv, 0, len); if (actionProgram) { argv[argind++] = mprStrdup(cmd, actionProgram); } argv[argind++] = program; } } #else len = (argc + 1) * (int) sizeof(char*); argv = (char**) mprAlloc(cmd, len); memset(argv, 0, len); if (actionProgram) { argv[argind++] = mprStrdup(cmd, actionProgram); } argv[argind++] = mprStrdup(cmd, fileName); #endif /* ISINDEX queries. Only valid if there is not a "=" in the query. If this is so, then we must not have these args in the query env also? */ if (indexQuery) { indexQuery = mprStrdup(cmd, indexQuery); cp = mprStrTok(indexQuery, "+", &tok); while (cp) { argv[argind++] = mprEscapeCmd(resp, mprUrlDecode(resp, cp), 0); cp = mprStrTok(NULL, "+", &tok); } } mprAssert(argind <= argc); argv[argind] = 0; *argcp = argc; *argvp = argv; }