diff options
author | Erich Eckner <git@eckner.net> | 2016-01-07 12:58:42 +0100 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2016-01-07 12:58:42 +0100 |
commit | 43403a82e041024c68f0980d86c4ecfde4f27696 (patch) | |
tree | 63f742c3ac1b276c931db0853464d3d0202a3da3 /epostunit.pas | |
parent | 786f45db04f37b6343b903edb4152b75ae893cca (diff) | |
download | epost-43403a82e041024c68f0980d86c4ecfde4f27696.tar.xz |
Fehlermeldungen aufgehübscht
Diffstat (limited to 'epostunit.pas')
-rw-r--r-- | epostunit.pas | 100 |
1 files changed, 72 insertions, 28 deletions
diff --git a/epostunit.pas b/epostunit.pas index 863954a..8abd761 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -1070,6 +1070,15 @@ begin sleep(10); end; + if not ipp.waitOnExit then begin + gibAus('ErmittleInterneInputParameter hat ohne Erfolg auf Ende von ipp gewartet!',3); + exit; + end; + if not ipap.waitOnExit then begin + gibAus('ErmittleInterneInputParameter hat ohne Erfolg auf Ende von ipap gewartet!',3); + exit; + end; + ipp.free; ipap.free; @@ -3687,14 +3696,29 @@ end; destructor tLogThread.destroy; begin raisedException.free; - if (not behalteLogs) and not odd(__ausgabenMaske) then cleanupLog(ThreadID); + if (not behalteLogs) and not odd(__ausgabenMaske) then cleanupLog(threadID); inherited destroy; end; function tLogThread.rFertig: boolean; -begin - if assigned(raisedException) then - raise exception.Create('Fehler innerhalb eines Threads!'); +var + ei: string; + i: longint; +begin + if assigned(raisedException) then begin + if self is tBefehlThread then begin + if assigned((self as tBefehlThread).p) then begin + ei:=' '''+(self as tBefehlThread).p.Executable+''''; + for i:=0 to (self as tBefehlThread).p.parameters.count-1 do + ei:=ei+' '''+(self as tBefehlThread).p.parameters[i]+''''; + ei:=ei; + end + else ei:=': p=NIL'; + end + else ei:=''; + raise raisedException; + raise exception.create('Fehler innerhalb eines Threads ('+className+')'+ei+'!'); + end; result:=_fertig; end; @@ -5060,16 +5084,17 @@ end; // tBefehlThread *************************************************************** constructor tBefehlThread.create(st: boolean; cmd: string; out erfolg: boolean); +var + nichtLeeresArgument: boolean; function shellParseNextArg(var s: string): string; var err: longint; sr: tSearchRec; begin - if length(s)=0 then begin - erfolg:=false; + if length(s)=0 then exit; - end; if startetMit('"',s) then begin if pos('"',s)=0 then begin + gibAus('Kein passendes zweites Anführungszeichen im Argument für den Befehl gefunden!',3); erfolg:=false; exit; end; @@ -5079,23 +5104,22 @@ begin result:=stringReplace(erstesArgument(s),'$$DATETIME',mydatetimetostr(now),[rfReplaceAll]); if pos('*',result)>0 then begin err:=findFirst(result,$3F,sr); - if err=0 then begin - result:=extractfilepath(result)+sr.Name; + while err=0 do begin + if (sr.Name<>'.') and (sr.Name<>'..') then s:=trim('"'+extractfilepath(result)+sr.Name+'" '+s); err:=findNext(sr); - while err=0 do begin - s:=trim('"'+extractfilepath(result)+sr.Name+'" '+s); - err:=findNext(sr); - end; end; findClose(sr); + result:=shellParseNextArg(s); end; end; if startetMit('./',result) then result:=extractfilepath(paramstr(0))+result; + if result<>'' then + nichtLeeresArgument:=true; end; begin inherited create; - erfolg:=true; + erfolg:=cmd<>''; bg:=endetMit('&',cmd); if not st then begin p:=tProcess.create(nil); @@ -5104,44 +5128,64 @@ begin end else shellParseNextArg(cmd); + nichtLeeresArgument:=cmd=''; if not erfolg then begin - if not st then + if not st then begin p.free; + p:=nil; + end; exit; end; while length(cmd)>0 do begin if st then shellParseNextArg(cmd) else p.Parameters.Add(shellParseNextArg(cmd)); if not erfolg then begin - if not st then + if not st then begin p.free; + p:=nil; + end; exit; end; end; + if not nichtLeeresArgument then begin + p.free; + p:=nil; + end; if st then exit; - cmd:=p.Parameters.Text; - while (length(cmd)>0) and (cmd[length(cmd)] in [#10,#13]) do - delete(cmd,length(cmd),1); - cmd:=''''+cmd+''''; - while pos(#10,cmd)>0 do - cmd:=leftStr(cmd,pos(#10,cmd)-1)+''' '''+copy(cmd,pos(#10,cmd)+1,length(cmd)); - while pos(#13,cmd)>0 do - cmd:=leftStr(cmd,pos(#13,cmd)-1)+''' '''+copy(cmd,pos(#13,cmd)+1,length(cmd)); - gibAus('Externer Befehl: '''+p.Executable+''' '+cmd+' erzeugt.',3); + if assigned(p) then begin + cmd:=p.Parameters.Text; + while (length(cmd)>0) and (cmd[length(cmd)] in [#10,#13]) do + delete(cmd,length(cmd),1); + cmd:=''''+cmd+''''; + while pos(#10,cmd)>0 do + cmd:=leftStr(cmd,pos(#10,cmd)-1)+''' '''+copy(cmd,pos(#10,cmd)+1,length(cmd)); + while pos(#13,cmd)>0 do + cmd:=leftStr(cmd,pos(#13,cmd)-1)+''' '''+copy(cmd,pos(#13,cmd)+1,length(cmd)); + gibAus('Externer Befehl: '''+p.Executable+''' '+cmd+' erzeugt.',3); + end + else + gibAus('Des Befehls zu expandierende Argumente hatten keine Treffer, er wird ignoriert.',3); end; destructor tBefehlThread.destroy; begin + gibAus('Befehl zerstört.',3); p.free; inherited destroy; end; procedure tBefehlThread.stExecute; begin - gibAus('externen Befehl ausführen ...',1); - p.Execute; - gibAus('... fertig!',1); + if assigned(p) then begin + gibAus('externen Befehl ausführen ... '+inttostr(belegterSpeicher),3); + gibAus(p.Executable,3); + gibAus(p.Parameters.text,3); + p.Execute; + gibAus('... fertig!',1); + end + else + gibAus('Externer Befehl hätte nichts zu tun und wird daher gar nicht erst gestartet.',1); fertig:=true; end; |