summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epostunit.pas100
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;