Ver Fonte

+ *stat wrappers for linux

git-svn-id: trunk@1213 -
florian há 20 anos atrás
pai
commit
7626a64e35
4 ficheiros alterados com 46 adições e 4 exclusões
  1. 29 0
      rtl/linux/osmacro.inc
  2. 8 0
      rtl/linux/ostypes.inc
  3. 0 1
      rtl/unix/baseunix.pp
  4. 9 3
      rtl/unix/oscdeclh.inc

+ 29 - 0
rtl/linux/osmacro.inc

@@ -88,3 +88,32 @@ begin
  wtermsig:=cint(status and 127);
 end;
 
+
+{$ifdef FPC_USE_LIBC}
+function __fxstat(__ver,filedes : cint; var StatBuffer: __stat_buf): cint; cdecl; external clib name '__fxstat';
+function __xstat(__ver : cint;FileName: PChar; var StatBuffer: TStatBuf): cint; cdecl; external clib name '__xstat';
+function __lxstat(__ver : cint; FileName: PChar; var StatBuffer: TStatBuf): cint; cdecl; external clib name '__lxstat';
+function __fxstat64(__ver : cint; FileDes: Integer; var StatBuffer: TStatBuf64): cint; cdecl; external clib name '__fxstat64';
+function __xstat64(__ver : cint; FileName: PChar; var StatBuffer: TStatBuf64): cint; cdecl; external clib name '__xstat64';
+function __lxstat64(__ver : cint; FileName: PChar; var StatBuffer: TStatBuf64): cint; cdecl; external clib name '__lxstat64';
+function __xmknod(__ver : cint; Pathname: PChar; Mode: __mode_t; var Device: __dev_t): cint; cdecl; external clib name '__xmknod';
+
+{$define FPC_HAS_BASEUNIX_STAT}
+function  FpFstat   (fd : cint; var sb : stat): cint;
+  begin
+    __fxstat(_STAT_VER,fd,sb);
+  end;
+
+
+function  fpLstat       (path:pchar;Info:pstat):cint;
+  begin
+    __lxstat(_STAT_VER,path,Info^);
+  end;
+
+
+function  FpStat      (path: pchar; var buf : stat): cint;
+  begin
+    __xstat(_STAT_VER,path,buf);
+  end;
+
+{$endif FPC_USE_LIBC}

+ 8 - 0
rtl/linux/ostypes.inc

@@ -72,6 +72,14 @@ TYPE
 { see kernel/include/asm-<cpu>/stat.h, include/linux/types.h and }
 { include /include/asm-<cpu>/posix-types.h                       }
 
+const
+  _STAT_VER_LINUX_OLD = 1;
+  _STAT_VER_KERNEL = 1;
+  _STAT_VER_SVR4 = 2;
+  _STAT_VER_LINUX = 3;
+  _STAT_VER = _STAT_VER_LINUX;
+
+type
 {$i stat.inc}
 
   TStat      = Stat;

+ 0 - 1
rtl/unix/baseunix.pp

@@ -51,7 +51,6 @@ implementation
 Uses Sysctl;
 {$endif}
 
-
 {$i genfuncs.inc}       // generic calls. (like getenv)
 {$I gensigset.inc}     // general sigset funcs implementation.
 {$I genfdset.inc}      // general fdset funcs.

+ 9 - 3
rtl/unix/oscdeclh.inc

@@ -33,7 +33,6 @@ Type TGrpArr = Array [0..0] of TGid;            { C style array workarounds}
     function  FpDup2    (oldd:cint;newd:cint):cint; cdecl; external clib name 'dup2';
     function  FpExecve  (path : pchar; argv : ppchar; envp: ppchar): cint; cdecl; external clib name 'execve';
     function  FpFork  : TPid; cdecl; external clib name 'fork';
-    function  FpFstat   (fd : cint; var sb : stat): cint; cdecl; external clib name 'fstat';
     function  FpFtruncate(fd : cint; flength : TOff): cint; cdecl; external clib name 'ftruncate';
     function  FpLseek   (fd : cint; offset : TOff; whence : cint): TOff; cdecl; external clib name 'lseek';
     function  FpMkdir   (path : pchar; mode: TMode):cint; cdecl; external clib name 'mkdir';
@@ -51,7 +50,6 @@ Type TGrpArr = Array [0..0] of TGid;            { C style array workarounds}
     Function  FpGetcwd  (path:pChar; siz:TSize):pChar; cdecl;  external clib name 'getcwd';
     function  FPSigProcMask(how:cint;nset : psigset;oset : psigset):cint;cdecl; external clib name 'sigprocmask';
     function  FPSigProcMask(how:cint;const nset : sigset;var oset : sigset):cint;cdecl; external clib name 'sigprocmask';
-    function  FpStat      (path: pchar; var buf : stat): cint; cdecl; external clib name 'stat';
     function  FpTime       (tloc:ptime_t): time_t; cdecl; external clib name 'time';
     Function  FpTime       (var tloc : TTime): TTime; cdecl; external clib name 'time';
     function  FpUname   (var name: utsname): cint; cdecl; external clib name 'uname';
@@ -81,7 +79,6 @@ Type TGrpArr = Array [0..0] of TGid;            { C style array workarounds}
     Function  FpFcntl      (fildes : cInt; cmd : cInt; arg :cInt): cInt; cdecl; external clib name 'fcntl';
     Function  FpFcntl      (fildes : cInt; cmd : cInt; var arg : flock): cInt; cdecl external clib name 'fcntl';
     Function  FPnanosleep  (const rqtp: ptimespec; rmtp: ptimespec): cint; cdecl; external clib name 'nanosleep';
-    Function  fpLstat       (path:pchar;Info:pstat):cint;     cdecl; external clib name 'lstat';
     function  fpNice       (N:cint):cint; cdecl; external clib name 'nice';
     Function  fpGetPriority (Which,Who:cint):cint;      cdecl; external clib name 'getpriority';
     Function  fpSetPriority (Which,Who,What:cint):cint; cdecl; external clib name 'setpriority';
@@ -90,3 +87,12 @@ Type TGrpArr = Array [0..0] of TGid;            { C style array workarounds}
     Function  FpUmask       (cmask : TMode): TMode; cdecl; external clib name 'umask';
     function  fpsettimeofday(tp:ptimeval;tzp:ptimezone):cint; cdecl; external clib name 'settimeofday';
 
+{$ifdef linux}
+    function  FpFstat   (fd : cint; var sb : stat): cint;
+    Function  fpLstat       (path:pchar;Info:pstat):cint;
+    function  FpStat      (path: pchar; var buf : stat): cint;
+{$else linux}
+    function  FpFstat   (fd : cint; var sb : stat): cint; cdecl; external clib name 'fstat';
+    Function  fpLstat       (path:pchar;Info:pstat):cint;     cdecl; external clib name 'lstat';
+    function  FpStat      (path: pchar; var buf : stat): cint; cdecl; external clib name 'stat';
+{$endif linux}