Browse Source

* mantis #28917 'r' mode sets filemode.

git-svn-id: trunk@32490 -
marco 9 years ago
parent
commit
7d1889e0ef
1 changed files with 8 additions and 5 deletions
  1. 8 5
      packages/paszlib/src/gzio.pas

+ 8 - 5
packages/paszlib/src/gzio.pas

@@ -136,6 +136,7 @@ var
   doseek,
   doseek,
   exists,
   exists,
   writing : boolean;
   writing : boolean;
+  old_file_mode: byte;
 begin
 begin
 
 
   if (path='') or (mode='') then begin
   if (path='') or (mode='') then begin
@@ -227,20 +228,22 @@ begin
     GetFAttr(s^.gzfile, Attr);
     GetFAttr(s^.gzfile, Attr);
     exists:=(DosError= 0);
     exists:=(DosError= 0);
   {$endif}
   {$endif}
-  
+
   doseek:=false;
   doseek:=false;
   if ((s^.mode='a') and not exists) or (s^.mode='w') then
   if ((s^.mode='a') and not exists) or (s^.mode='w') then
     begin
     begin
-   
-    ReWrite (s^.gzfile,1)  
+    ReWrite (s^.gzfile,1)
     end
     end
   else
   else
     begin
     begin
-      Reset (s^.gzfile,1);  
+      old_file_mode := FileMode;
+      FileMode := 0;
+      Reset (s^.gzfile,1);
+      FileMode := old_file_mode;
       if s^.mode='a' then
       if s^.mode='a' then
         doseek:=true;      // seek AFTER I/O check.
         doseek:=true;      // seek AFTER I/O check.
     end;
     end;
-    
+
   {$POP}
   {$POP}
   if (IOResult <> 0) then begin
   if (IOResult <> 0) then begin
     destroy(s);
     destroy(s);