int gmShellPlink::execute(const gmdString& cmd, gmdArrayString& out, gmdArrayString& err){ // Execute Shell command int i, res; gmdString errmsg; execute_begin(cmd, out, err); if(!auth_defined) return execute_error( set_err(CONNECTION_ERROR, "PLINK: Authentification method is not defined, " "check 'login', 'host' and 'plink_args' parameters!" ) ); // Screed double quotes gmdString cmd_scr(cmd); cmd_scr.Replace("\"", "\\\""); // Avoid empty command that switches plink into the interactive mode if( cmd_scr.IsEmpty() ) cmd_scr = "#"; for(i=0; i<plink_att_num; i++){ if(i) { // Retrying on a network error LOGJOBMSG( fmt("PLINK connection failed: %s\nRetrying %d more times", (const gmdChar*)errmsg, plink_att_num - i) ); gmdMilliSleep(plink_retry_delay); // delay before a retry } if(dump_commands) LOGJOBMSG4( (pCSTR)("------ execute (plink)------\n" + plink_pre + cmd_scr + '\"') ); res = gmdExecute(plink_pre + cmd_scr + '\"', out, err); if(res == -1) { execute_end(res, out, err); return execute_error( set_err(EXECUTE_ERROR, "Error executing PLINK") ); } else if(res == 0) break; errmsg = ArrayToString(err); if( !errmsg.StartsWith("Unable to open connection") ) break; } if(i >= plink_att_num){ execute_end(-1, out, err); // pausing timer return set_err(CONNECTION_ERROR, errmsg); } return execute_end(res, out, err); }
parse_errors_e fnc_unconditional_branching::execute() { switch (_op) { case ub_label: return execute_label(); case ub_goto: return execute_goto(); case ub_end: return execute_end(); case ub_gotoline: return execute_gotoline(); } return parse_error_function_expected; }