int ArcCommand::ProcessCommand(char *Command,int CommandType,int IgnoreErrors, char *ListFileName) { MaxAllowedExitCode=0; DeleteBraces(Command); for (char *CurPtr=Command;*CurPtr;) { int Length=lstrlen(Command); switch(ReplaceVar(CurPtr,Length)) { case 1: CurPtr+=Length; break; case -1: return FALSE; default: CurPtr++; break; } } if (*Command) { int Hide=Opt.HideOutput; if ((Hide==1 && CommandType==0) || CommandType==2) Hide=0; ExecCode=Execute(this,Command,Hide,Silent,!*Password,ListFileName); if(ExecCode==RETEXEC_ARCNOTFOUND) { return FALSE; } if (ExecCode<=MaxAllowedExitCode) ExecCode=0; if (!IgnoreErrors && ExecCode!=0) { if(!Silent) { char ErrMsg[200]; char NameMsg[NM]; FSF.sprintf(ErrMsg,(char *)GetMsg(MArcNonZero),ExecCode); const char *MsgItems[]={GetMsg(MError),NameMsg,ErrMsg,GetMsg(MOk)}; FSF.TruncPathStr(lstrcpyn(NameMsg,ArcName,sizeof(NameMsg)),MAX_WIDTH_MESSAGE); Info.Message(Info.ModuleNumber,FMSG_WARNING,NULL,MsgItems,ARRAYSIZE(MsgItems),1); } return FALSE; } } else { if(!Silent) { const char *MsgItems[]={GetMsg(MError),GetMsg(MArcCommandNotFound),GetMsg(MOk)}; Info.Message(Info.ModuleNumber,FMSG_WARNING,NULL,MsgItems,ARRAYSIZE(MsgItems),1); } return FALSE; } return TRUE; }
bool ArcCommand::ProcessCommand(std::string FormatString, int CommandType, int IgnoreErrors, char *pcListFileName) { MaxAllowedExitCode=0; DeleteBraces(FormatString); // for (char *CurPtr=Command; *CurPtr;) std::string tmp, NonVar, Command; while (!FormatString.empty()) { tmp = FormatString; int r = ReplaceVar(tmp); // fprintf(stderr, "ReplaceVar: %d '%s' -> '%s'\n", r, FormatString.c_str(), tmp.c_str()); if (r < 0) return false; if (r == 0) { r = 1; NonVar+= FormatString[0]; } else { Command+= ExpandEnv(NonVar); Command+= tmp; NonVar.clear(); } FormatString.erase(0, r); } Command+= ExpandEnv(NonVar); // fprintf(stderr, "Command='%s'\n", Command.c_str()); if (Command.empty()) { if(!Silent) { const char *MsgItems[]={GetMsg(MError),GetMsg(MArcCommandNotFound),GetMsg(MOk)}; Info.Message(Info.ModuleNumber,FMSG_WARNING,NULL,MsgItems,ARRAYSIZE(MsgItems),1); } return false; } int Hide = Opt.HideOutput; if ((Hide == 1 && CommandType == 0) || CommandType == 2) Hide = 0; ExecCode = Execute(this, Command, Hide, Silent, NeedSudo, Password.empty(), ListFileName); if (ExecCode==RETEXEC_ARCNOTFOUND) return false; if (ExecCode <= MaxAllowedExitCode) ExecCode = 0; if (!IgnoreErrors && ExecCode!=0) { if(!Silent) { char ErrMsg[200]; char NameMsg[NM]; FSF.sprintf(ErrMsg,(char *)GetMsg(MArcNonZero),ExecCode); const char *MsgItems[]={GetMsg(MError),NameMsg,ErrMsg,GetMsg(MOk)}; FSF.TruncPathStr(strncpy(NameMsg,ArcName.c_str(),sizeof(NameMsg)),MAX_WIDTH_MESSAGE); Info.Message(Info.ModuleNumber,FMSG_WARNING,NULL,MsgItems,ARRAYSIZE(MsgItems),1); } return false; } return true; }