Просмотр исходного кода

* result buffers must be allocated

Tomas Hajny 22 лет назад
Родитель
Сommit
1bcce4c618
1 измененных файлов с 16 добавлено и 8 удалено
  1. 16 8
      rtl/os2/dos.pas

+ 16 - 8
rtl/os2/dos.pas

@@ -191,24 +191,26 @@ const   FindResvdMask = $00003737; {Allowed bits in attribute
 
 function fsearch(path:pathstr;dirlist:string):pathstr;
 Var
-  R: PChar;
+  A: array [0..255] of char;
   D, P: AnsiString;
 begin
   P:=Path;
   D:=DirList;
-  DosError:=DosSearchPath(0, PChar(D), PChar(P), R, 255);
-  fsearch:=R;
+  DosError:=DosSearchPath(0, PChar(D), PChar(P), @A, 255);
+  fsearch := StrPas (@A);
 end;
 
 procedure getftime(var f;var time:longint);
 var
   FStat: PFileStatus3;
 begin
+  New (FStat);
   DosError:=DosQueryFileInfo(FileRec(F).Handle, 1, FStat, SizeOf(FStat^));
   If DosError=0 then
     Time:=FStat^.timelastwrite+FStat^.DateLastWrite*256
   else
     Time:=0;
+  Dispose (FStat);
 end;
 
 procedure SetFTime (var F; Time: longint);
@@ -216,8 +218,8 @@ var FStat: PFileStatus3;
     RC: longint;
 begin
   New (FStat);
-  RC := DosQueryFileInfo (FileRec (F).Handle, ilStandard, FStat,
-                                                    SizeOf (FStat^));
+  RC := DosQueryFileInfo (FileRec (F).Handle, ilStandard, @FStat,
+                                                    SizeOf (FStat));
   if RC = 0 then
   begin
     FStat^.DateLastAccess := Hi (Time);
@@ -567,7 +569,7 @@ begin
   pop eax
   mov P, edi      { place pointer to variable contents in P }
 @End:
- end ['eax','ebx','ecx','edx','esi','edi'];
+ end ['eax','ecx','edx','esi','edi'];
  GetEnvPChar := P;
 end;
 {$ASMMODE ATT}
@@ -577,7 +579,6 @@ function GetEnv (const EnvVar: string): string;
 begin
  GetEnv := StrPas (GetEnvPChar (EnvVar));
 end;
-{$ASMMODE ATT}
 
 procedure fsplit(path:pathstr;var dir:dirstr;var name:namestr;
                  var ext:extstr);
@@ -681,29 +682,36 @@ procedure getfattr(var f;var attr : word);
 var
   PathInfo: PFileStatus3;
 begin
+  New (PathInfo);
   Attr:=0;
   DosError:=DosQueryPathInfo(FileRec(F).Name, ilStandard, PathInfo, SizeOf(PathInfo^));
   if DosError=0 then
     Attr := PathInfo^.attrFile;
+  Dispose (PathInfo);
 end;
 
 procedure setfattr(var f;attr : word);
 var
   PathInfo: PFileStatus3;
 begin
+  New (PathInfo);
   DosError:=DosQueryPathInfo(FileRec(F).Name, ilStandard, PathInfo, SizeOf(PathInfo^));
   if DosError=0 then
   begin
     PathInfo^.attrFile:=Attr;
     DosError:=DosSetPathInfo(FileRec(F).Name, ilStandard, PathInfo, SizeOf(PathInfo^), doWriteThru);
   end;
+  Dispose (PathInfo);
 end;
 
 begin
 end.
 {
   $Log$
-  Revision 1.27  2003-10-03 21:46:41  peter
+  Revision 1.28  2003-10-05 22:06:43  hajny
+    * result buffers must be allocated
+
+  Revision 1.27  2003/10/03 21:46:41  peter
     * stdcall fixes
 
   Revision 1.26  2003/09/24 08:59:16  yuri