mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-14 13:59:28 +02:00
* Updated PDir to BSD libc layout. (which is totally different from Linux)
This commit is contained in:
parent
4b6a9896bf
commit
59e9da20d8
@ -1,161 +1,177 @@
|
||||
{
|
||||
$Id$
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1999-2000 by Michael Van Canneyt,
|
||||
member of the Free Pascal development team.
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
type
|
||||
|
||||
{
|
||||
Linux system calls take arguments as follows :
|
||||
|
||||
i386/m68k:
|
||||
|
||||
%eax/%d0 : System call number
|
||||
%ebx/%d1 : first argument
|
||||
%ecx/%d2 : second argument
|
||||
%edx/%d3 : third argumens
|
||||
%esi/%d3 : fourth argument
|
||||
%edi/%d4 : fifth argument
|
||||
|
||||
That is why we define a special type, with only these arguments
|
||||
To make it processor independent, we don't give any system dependent
|
||||
names, but the rather abstract reg1,reg2 etc;
|
||||
}
|
||||
SysCallRegs=record
|
||||
reg1,reg2,reg3,reg4,reg5,reg6 : longint;
|
||||
end;
|
||||
PSysCallRegs=^SysCallRegs;
|
||||
TSysCallRegs=SysCallRegs;
|
||||
|
||||
{ The following are records for system calls BSD updated }
|
||||
dirent = packed record
|
||||
ino : cardinal; { This is not inode number, but "a number
|
||||
unique for each file on a filesystem"}
|
||||
reclen : word;
|
||||
d_type,
|
||||
namlen : byte;
|
||||
name : array [0..255] of char;
|
||||
end;
|
||||
|
||||
pdirent =^dirent;
|
||||
TDirEnt = dirent;
|
||||
|
||||
TDir = packed record
|
||||
fd : longint;
|
||||
loc : longint;
|
||||
size : integer;
|
||||
buf : pdirent;
|
||||
{The following are used in libc, but NOT in the linux kernel sources ??}
|
||||
nextoff: longint;
|
||||
dd_max : integer; {size of buf. Irrelevant, as buf is of type dirent}
|
||||
lock : pointer;
|
||||
dummy : array[0..1023] of char;
|
||||
end;
|
||||
PDir =^TDir;
|
||||
|
||||
{$packrecords C}
|
||||
Stat =record {BSD version}
|
||||
dev, { inode's device }
|
||||
ino : cardinal; { inode's number }
|
||||
mode, { inode protection mode }
|
||||
nlink : word; { number of hard links }
|
||||
uid, { user ID of the file's owner }
|
||||
gid, { group ID of the file's group }
|
||||
dev_t : cardinal; { device type }
|
||||
atime, { time of last access }
|
||||
atime_nsec, { nsec of last access }
|
||||
mtime, { time of last data modification }
|
||||
mtime_nsec, { nsec of last data modification }
|
||||
ctime, { time of last file status change }
|
||||
ctime_nsec : longint; { nsec of last file status change }
|
||||
size, { file size, in bytes }
|
||||
blocks : Int64; { blocks allocated for file }
|
||||
blksze, { optimal blocksize for I/O }
|
||||
flags, { user defined flags for file }
|
||||
filegen : cardinal; { file generation number }
|
||||
lspare : longint;
|
||||
qspare : array[0..1] of int64;
|
||||
end;
|
||||
|
||||
PStat=^Stat;
|
||||
TStat=Stat;
|
||||
|
||||
Statfs = packed record
|
||||
spare2, { place holder}
|
||||
bsize, { fundamental block size}
|
||||
iosize, { optimal block size }
|
||||
blocks, { total blocks}
|
||||
bfree, { blocks free}
|
||||
bavail, { block available for mortal users}
|
||||
files, { Total file nodes}
|
||||
ffree : longint; { file nodes free}
|
||||
fsid : array[0..1] of longint;
|
||||
fowner : longint; {mounter uid}
|
||||
ftype : longint;
|
||||
fflags : longint; {copy of mount flags}
|
||||
spare : array [0..1] of longint; { For later use }
|
||||
fstypename : array[0..15] of char;
|
||||
mountpoint : array[0..89] of char;
|
||||
mnfromname : array[0..89] of char;
|
||||
end;
|
||||
PStatFS=^StatFS;
|
||||
TStatFS=StatFS;
|
||||
|
||||
fdSet=array[0..7] of longint;{=256 bits}
|
||||
pfdset=^fdset;
|
||||
TFDSet=fdset;
|
||||
|
||||
timeval = packed record
|
||||
sec,usec:int64;
|
||||
end;
|
||||
ptimeval=^timeval;
|
||||
TTimeVal=timeval;
|
||||
|
||||
timezone = packed record
|
||||
minuteswest,dsttime:longint;
|
||||
end;
|
||||
ptimezone =^timezone;
|
||||
TTimeZone = timezone;
|
||||
|
||||
utsname = packed record
|
||||
sysname,
|
||||
nodename,
|
||||
release,
|
||||
version,
|
||||
machine,
|
||||
domainname : Array[0..64] of char;
|
||||
end;
|
||||
PUTSName=^UTSName;
|
||||
TUTSName=UTSName;
|
||||
|
||||
{
|
||||
{
|
||||
$Id$
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1999-2000 by Michael Van Canneyt,
|
||||
member of the Free Pascal development team.
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
type
|
||||
|
||||
{
|
||||
Linux system calls take arguments as follows :
|
||||
|
||||
i386/m68k:
|
||||
|
||||
%eax/%d0 : System call number
|
||||
%ebx/%d1 : first argument
|
||||
%ecx/%d2 : second argument
|
||||
%edx/%d3 : third argumens
|
||||
%esi/%d3 : fourth argument
|
||||
%edi/%d4 : fifth argument
|
||||
|
||||
That is why we define a special type, with only these arguments
|
||||
To make it processor independent, we don't give any system dependent
|
||||
names, but the rather abstract reg1,reg2 etc;
|
||||
}
|
||||
SysCallRegs=record
|
||||
reg1,reg2,reg3,reg4,reg5,reg6 : longint;
|
||||
end;
|
||||
PSysCallRegs=^SysCallRegs;
|
||||
TSysCallRegs=SysCallRegs;
|
||||
|
||||
{ The following are records for system calls BSD updated }
|
||||
dirent = packed record
|
||||
ino : cardinal; { This is not inode number, but "a number
|
||||
unique for each file on a filesystem"}
|
||||
reclen : word;
|
||||
d_type,
|
||||
namlen : byte;
|
||||
name : array [0..255] of char;
|
||||
end;
|
||||
|
||||
pdirent =^dirent;
|
||||
TDirEnt = dirent;
|
||||
|
||||
TDir= packed record {BSD libc record.}
|
||||
fd : longint; { file descriptor associated with directory }
|
||||
loc, { offset in current buffer }
|
||||
size : cardinal; { amount of data returned by getdirentries}
|
||||
buf : pdirent; { data buffer, actually a pchar}
|
||||
len : longint; { size of data buffer }
|
||||
seek, { magic cookie returned by getdirentries}
|
||||
rewind: cardinal; { magic cookie for rewinding}
|
||||
flags : longint; { flags for readdir }
|
||||
end;
|
||||
|
||||
{ Linux kernel record
|
||||
TDir = packed record
|
||||
fd : longint;
|
||||
loc : longint;
|
||||
size : integer;
|
||||
buf : pdirent;
|
||||
{The following are used in libc, but NOT in the linux kernel sources ??}
|
||||
nextoff: longint;
|
||||
dd_max : integer; {size of buf. Irrelevant, as buf is of type dirent}
|
||||
lock : pointer;
|
||||
dummy : array[0..1023] of char;
|
||||
end;}
|
||||
|
||||
PDir =^TDir;
|
||||
|
||||
{$packrecords C}
|
||||
Stat =record {BSD version}
|
||||
dev, { inode's device }
|
||||
ino : cardinal; { inode's number }
|
||||
mode, { inode protection mode }
|
||||
nlink : word; { number of hard links }
|
||||
uid, { user ID of the file's owner }
|
||||
gid, { group ID of the file's group }
|
||||
dev_t : cardinal; { device type }
|
||||
atime, { time of last access }
|
||||
atime_nsec, { nsec of last access }
|
||||
mtime, { time of last data modification }
|
||||
mtime_nsec, { nsec of last data modification }
|
||||
ctime, { time of last file status change }
|
||||
ctime_nsec : longint; { nsec of last file status change }
|
||||
size, { file size, in bytes }
|
||||
blocks : Int64; { blocks allocated for file }
|
||||
blksze, { optimal blocksize for I/O }
|
||||
flags, { user defined flags for file }
|
||||
filegen : cardinal; { file generation number }
|
||||
lspare : longint;
|
||||
qspare : array[0..1] of int64;
|
||||
end;
|
||||
|
||||
PStat=^Stat;
|
||||
TStat=Stat;
|
||||
|
||||
Statfs = packed record
|
||||
spare2, { place holder}
|
||||
bsize, { fundamental block size}
|
||||
iosize, { optimal block size }
|
||||
blocks, { total blocks}
|
||||
bfree, { blocks free}
|
||||
bavail, { block available for mortal users}
|
||||
files, { Total file nodes}
|
||||
ffree : longint; { file nodes free}
|
||||
fsid : array[0..1] of longint;
|
||||
fowner : longint; {mounter uid}
|
||||
ftype : longint;
|
||||
fflags : longint; {copy of mount flags}
|
||||
spare : array [0..1] of longint; { For later use }
|
||||
fstypename : array[0..15] of char;
|
||||
mountpoint : array[0..89] of char;
|
||||
mnfromname : array[0..89] of char;
|
||||
end;
|
||||
PStatFS=^StatFS;
|
||||
TStatFS=StatFS;
|
||||
|
||||
fdSet=array[0..7] of longint;{=256 bits}
|
||||
pfdset=^fdset;
|
||||
TFDSet=fdset;
|
||||
|
||||
timeval = packed record
|
||||
sec,usec:int64;
|
||||
end;
|
||||
ptimeval=^timeval;
|
||||
TTimeVal=timeval;
|
||||
|
||||
timezone = packed record
|
||||
minuteswest,dsttime:longint;
|
||||
end;
|
||||
ptimezone =^timezone;
|
||||
TTimeZone = timezone;
|
||||
|
||||
utsname = packed record
|
||||
sysname,
|
||||
nodename,
|
||||
release,
|
||||
version,
|
||||
machine,
|
||||
domainname : Array[0..64] of char;
|
||||
end;
|
||||
PUTSName=^UTSName;
|
||||
TUTSName=UTSName;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.7 2000-04-10 15:46:52 marco
|
||||
Revision 1.8 2000-04-16 16:08:30 marco
|
||||
* Updated PDir to BSD libc layout. (which is totally different from Linux)
|
||||
|
||||
Revision 1.7 2000/04/10 15:46:52 marco
|
||||
* worked all day. probably a lot changed
|
||||
|
||||
Revision 1.5 2000/03/17 12:58:57 marco
|
||||
* some changes to ftruncate based procs. Added a "0" as extra parameter
|
||||
|
||||
Revision 1.4 2000/02/04 16:55:47 marco
|
||||
* Fixed tdir, some params need to be 32-bit
|
||||
|
||||
Revision 1.3 2000/02/03 17:05:55 marco
|
||||
|
||||
* Some types fixed/ported.
|
||||
|
||||
Revision 1.2 2000/02/02 16:45:38 marco
|
||||
* Typo in STAT record
|
||||
|
||||
Revision 1.1 2000/02/02 16:36:09 marco
|
||||
* Initial version. Copy of linux version, with BSD stat.
|
||||
|
||||
}
|
||||
|
||||
Revision 1.5 2000/03/17 12:58:57 marco
|
||||
* some changes to ftruncate based procs. Added a "0" as extra parameter
|
||||
|
||||
Revision 1.4 2000/02/04 16:55:47 marco
|
||||
* Fixed tdir, some params need to be 32-bit
|
||||
|
||||
Revision 1.3 2000/02/03 17:05:55 marco
|
||||
|
||||
* Some types fixed/ported.
|
||||
|
||||
Revision 1.2 2000/02/02 16:45:38 marco
|
||||
* Typo in STAT record
|
||||
|
||||
Revision 1.1 2000/02/02 16:36:09 marco
|
||||
* Initial version. Copy of linux version, with BSD stat.
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user