Преглед на файлове

* android: Fixed stdio redirection for threads.

git-svn-id: trunk@41400 -
yury преди 6 години
родител
ревизия
ad6642edc0
променени са 2 файла, в които са добавени 23 реда и са изтрити 8 реда
  1. 20 8
      rtl/android/sysandroid.inc
  2. 3 0
      rtl/linux/system.pp

+ 20 - 8
rtl/android/sysandroid.inc

@@ -215,9 +215,10 @@ end;
 
 const
   IOBufferLength = 512;
-var
+threadvar
   IOBuf : array[0..IOBufferLength] of char;
   IOLen : SizeInt;
+var
   IORedirected: boolean;
 
 procedure OutputIOBuffer(Var F: TextRec);
@@ -235,12 +236,16 @@ end;
 procedure IOWrite(Var F: TextRec);
 var
   i, len : SizeInt;
+  pIOBuf: PAnsiChar;
+  pIOLen: ^SizeInt;
 Begin
+  pIOBuf:=@IOBuf;
+  pIOLen:=@IOLen;
   while F.BufPos>0 do
     begin
       begin
-        if F.BufPos + IOLen > IOBufferLength then
-          len:=IOBufferLength - IOLen
+        if F.BufPos + pIOLen^ > IOBufferLength then
+          len:=IOBufferLength - pIOLen^
         else
           len:=F.BufPos;
         i:=0;
@@ -248,7 +253,7 @@ Begin
           begin
             if F.bufptr^[i] in [#10, #13] then
               begin
-                IOBuf[IOLen]:=#0;
+                pIOBuf[pIOLen^]:=#0;
                 OutputIOBuffer(F);
                 Inc(i);
                 if (i < len) and (F.bufptr^[i - 1] = #13) and (F.bufptr^[i] = #10) then
@@ -256,14 +261,14 @@ Begin
               end
             else
               begin
-                IOBuf[IOLen]:=F.bufptr^[i];
-                Inc(IOLen);
+                pIOBuf[pIOLen^]:=F.bufptr^[i];
+                Inc(pIOLen^);
                 Inc(i);
               end;
           end;
-        IOBuf[IOLen]:=#0;
+        pIOBuf[pIOLen^]:=#0;
       end;
-      if IOLen = IOBufferLength then
+      if pIOLen^ = IOBufferLength then
         OutputIOBuffer(F);
       Dec(F.BufPos, len);
     end;
@@ -311,6 +316,13 @@ begin
   DefaultLogTag[len + 1]:=#0;
 end;
 
+procedure InitStdIOAndroid;
+begin
+  if not IORedirected then exit;
+  IORedirected:=False;
+  RedirectOutputToSysLog;
+end;
+
 // ************* System init
 
 procedure InitAndroid;

+ 3 - 0
rtl/linux/system.pp

@@ -584,6 +584,9 @@ begin
   OpenStdIO(ErrOutput,fmOutput,StdErrorHandle);
   OpenStdIO(StdOut,fmOutput,StdOutputHandle);
   OpenStdIO(StdErr,fmOutput,StdErrorHandle);
+{$ifdef android}
+  InitStdIOAndroid;
+{$endif android}
 end;
 
 Procedure RestoreOldSignalHandlers;