diff options
| author | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2008-06-14 18:34:02 +0200 |
|---|---|---|
| committer | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2008-06-14 18:34:02 +0200 |
| commit | c9a02bf590248c0bd8e1343198d3f9c13ce118c1 (patch) | |
| tree | cbd1b07cea6f3ccea7fc98c58d65f568e69e8527 /ULibc.pas | |
| parent | b1dfa430702770c83c815bec24f1dc72175e1e5e (diff) | |
| download | tuxcmd-0.6.43.tar.xz | |
Port to new ULibc unit, drop dependency to compiler Libc libraryv0.6.43
(preparation for PPC port)
Diffstat (limited to 'ULibc.pas')
| -rw-r--r-- | ULibc.pas | 945 |
1 files changed, 945 insertions, 0 deletions
diff --git a/ULibc.pas b/ULibc.pas new file mode 100644 index 0000000..c11566d --- /dev/null +++ b/ULibc.pas @@ -0,0 +1,945 @@ +(* + Tux Commander - ULibc - translated glibc functions for all platforms + Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net> + Check for updates on tuxcmd.sourceforge.net + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*) +unit ULibc; + +interface + + +const GLIBC_LIB = 'libc.so.6'; + DL_LIB = 'libdl.so.2'; + +type +{$IFDEF KYLIX} + DWORD = Cardinal; + QWORD = Int64; +{$ENDIF} + + sig_atomic_t = Longint; + size_t = Cardinal; + ssize_t = Longint; + error_t = Integer; + __mode_t = DWORD; + __dev_t = QWORD; + __pid_t = Longint; + __id_t = DWORD; + __uid_t = DWORD; + __gid_t = DWORD; + __off64_t = Int64; + __off_t = Longint; + __ino_t = DWORD; + __ino64_t = QWORD; + __nlink_t = DWORD; + __blksize_t = Longint; + __blkcnt_t = Longint; + __blkcnt64_t = Int64; + + + Pidtype_t = ^idtype_t; + idtype_t = (P_ALL,P_PID,P_PGID); + + Psiginfo_t = Pointer; + Prusage = Pointer; + PDIR = Pointer; + PFILE = Pointer; + Pfpos_t = Pointer; + Pfpos64_t = Pointer; + + Ttimespec = packed record +{$IFNDEF CPU64} // 32-bit platform + tv_sec: longint; + tv_nsec: longint; +{$ELSE} // 64-bit platform + tv_sec: Int64; + tv_nsec: Int64; +{$ENDIF} + end; + + Ptm = ^tm; + tm = record + tm_sec : longint; + tm_min : longint; + tm_hour : longint; + tm_mday : longint; + tm_mon : longint; + tm_year : longint; + tm_wday : longint; + tm_yday : longint; + tm_isdst : longint; + case boolean of + false : (tm_gmtoff : longint;tm_zone : Pchar); + true : (__tm_gmtoff : longint;__tm_zone : Pchar); + end; + + Pdirent64 = ^Tdirent64; + Tdirent64 = record + d_ino : QWORD; + d_off : Int64; + d_reclen : word; + d_type : byte; + d_name : array[0..255] of char; + end; + + Pstat64 = ^Tstat64; + Tstat64 = packed record +{$IFNDEF CPU64} // 32-bit platform + st_dev : __dev_t; + __pad1 : dword; + __st_ino : __ino_t; + st_mode : __mode_t; + st_nlink : __nlink_t; + st_uid : __uid_t; + st_gid : __gid_t; + st_rdev : __dev_t; + __pad2 : dword; + st_size : __off64_t; + st_blksize : __blksize_t; + st_blocks : __blkcnt64_t; + + st_atim : Ttimespec; + st_mtim : Ttimespec; + st_ctim : Ttimespec; + +{ st_atime : __time_t; + __unused1 : dword; + st_mtime : __time_t; + __unused2 : dword; + st_ctime : __time_t; + __unused3 : dword; } + + st_ino : __ino64_t; +{$ELSE} // 64-bit platform + st_dev : QWORD; + st_ino : Int64; + st_nlink : QWORD; + st_mode : DWORD; + st_uid : DWORD; + st_gid : DWORD; + pad0 : DWORD; + st_rdev : QWORD; + st_size : Int64; + st_blksize : Int64; + st_blocks : Int64; + st_atim : Ttimespec; + st_mtim : Ttimespec; + st_ctim : Ttimespec; + __unused : array[1..3] of QWORD; +{$ENDIF} + end; + + + fsid_t = packed record + __val : array[0..1] of longint; + end; + + Pstatfs64 = ^Tstatfs64; + Tstatfs64 = packed record +{$IFNDEF CPU64} // 32-bit platform + f_type : longint; + f_bsize : longint; + f_blocks : QWORD; + f_bfree : QWORD; + f_bavail : QWORD; + f_files : QWORD; + f_ffree : QWORD; + f_fsid : fsid_t; + f_namelen : longint; + f_spare : array[0..5] of longint; +{$ELSE} // 64-bit platform + f_type : Int64; + f_bsize : Int64; + f_blocks : QWORD; + f_bfree : QWORD; + f_bavail : QWORD; + f_files : QWORD; + f_ffree : QWORD; + f_fsid : fsid_t; + f_namelen : Int64; + f_spare : array[0..5] of Int64; +{$ENDIF} + end; + +{$IFNDEF CPU64} + time_t = longint; +{$ELSE} + time_t = Int64; +{$ENDIF} + Ptime_t = ^time_t; + + Putimbuf = ^Tutimbuf; + Tutimbuf = packed record + actime : time_t; + modtime : time_t; + end; + + Pmntent = ^Tmntent; + Tmntent = packed record +{$IFNDEF CPU64} // 32-bit platform + mnt_fsname : PChar; + mnt_dir : PChar; + mnt_type : PChar; + mnt_opts : PChar; + mnt_freq : Longint; + mnt_passno : Longint; +{$ELSE} // 64-bit platform + mnt_fsname : PChar; + mnt_dir : PChar; + mnt_type : PChar; + mnt_opts : PChar; + mnt_freq : Longint; + mnt_passno : Longint; +{$ENDIF} + end; + + PPasswd = ^TPasswd; + TPasswd = record + pw_name : PChar; + pw_passwd : PChar; + pw_uid : __uid_t; + pw_gid : __gid_t; + pw_gecos : PChar; + pw_dir : PChar; + pw_shell : PChar; + end; + PPPasswd = ^PPasswd; + + PGroup = ^TGroup; + TGroup = record + gr_name : PChar; + gr_passwd : PChar; + gr_gid : __gid_t; + gr_mem : ^PChar; + end; + PPGroup = ^PGroup; + + Psigval = ^sigval; + sigval = record + case longint of + 0 : ( sival_int : longint ); + 1 : ( sival_ptr : pointer ); + end; + sigval_t = sigval; + Psigval_t = ^sigval_t; + +const + _SIGSET_NWORDS = 1024 div (8 * (sizeof(dword))); + +type + __sighandler_t = procedure(SigNum: Integer); cdecl; + P__sigset_t = ^__sigset_t; + __sigset_t = record + __val : array[0..(_SIGSET_NWORDS)-1] of dword; + end; + sigset_t = __sigset_t; + Psigset_t = ^sigset_t; + P_sigaction = ^_sigaction; + _sigaction = record // Renamed, avoid conflict with sigaction function + case integer of + 1: (sa_handler : __sighandler_t; + sa_mask : __sigset_t; + sa_flags : longint; + sa_restorer : procedure ;cdecl; + ); + // Kylix compatibility + 2: (__sigaction_handler: __sighandler_t); + end; + TSigAction = _sigaction; + PSigAction = ^TSigAction; + TRestoreHandler = procedure; cdecl; + __sigaction = _sigaction; + TSigActionHandler = procedure(Signal: Integer); cdecl; + +const + EPERM = 1; + ENOENT = 2; + ESRCH = 3; + EINTR = 4; + EIO = 5; + ENXIO = 6; + E2BIG = 7; + ENOEXEC = 8; + EBADF = 9; + ECHILD = 10; + EAGAIN = 11; + ENOMEM = 12; + EACCES = 13; + EFAULT = 14; + ENOTBLK = 15; + EBUSY = 16; + EEXIST = 17; + EXDEV = 18; + ENODEV = 19; + ENOTDIR = 20; + EISDIR = 21; + EINVAL = 22; + ENFILE = 23; + EMFILE = 24; + ENOTTY = 25; + ETXTBSY = 26; + EFBIG = 27; + ENOSPC = 28; + ESPIPE = 29; + EROFS = 30; + EMLINK = 31; + EPIPE = 32; + EDOM = 33; + ERANGE = 34; + EDEADLK = 35; + ENAMETOOLONG = 36; + ENOLCK = 37; + ENOSYS = 38; + ENOTEMPTY = 39; + ELOOP = 40; + EWOULDBLOCK = EAGAIN; + ENOMSG = 42; + EIDRM = 43; + ECHRNG = 44; + EL2NSYNC = 45; + EL3HLT = 46; + EL3RST = 47; + ELNRNG = 48; + EUNATCH = 49; + ENOCSI = 50; + EL2HLT = 51; + EBADE = 52; + EBADR = 53; + EXFULL = 54; + ENOANO = 55; + EBADRQC = 56; + EBADSLT = 57; + EDEADLOCK = EDEADLK; + EBFONT = 59; + ENOSTR = 60; + ENODATA = 61; + ETIME = 62; + ENOSR = 63; + ENONET = 64; + ENOPKG = 65; + EREMOTE = 66; + ENOLINK = 67; + EADV = 68; + ESRMNT = 69; + ECOMM = 70; + EPROTO = 71; + EMULTIHOP = 72; + EDOTDOT = 73; + EBADMSG = 74; + EOVERFLOW = 75; + ENOTUNIQ = 76; + EBADFD = 77; + EREMCHG = 78; + ELIBACC = 79; + ELIBBAD = 80; + ELIBSCN = 81; + ELIBMAX = 82; + ELIBEXEC = 83; + EILSEQ = 84; + ERESTART = 85; + ESTRPIPE = 86; + EUSERS = 87; + ENOTSOCK = 88; + EDESTADDRREQ = 89; + EMSGSIZE = 90; + EPROTOTYPE = 91; + ENOPROTOOPT = 92; + EPROTONOSUPPORT = 93; + ESOCKTNOSUPPORT = 94; + EOPNOTSUPP = 95; + EPFNOSUPPORT = 96; + EAFNOSUPPORT = 97; + EADDRINUSE = 98; + EADDRNOTAVAIL = 99; + ENETDOWN = 100; + ENETUNREACH = 101; + ENETRESET = 102; + ECONNABORTED = 103; + ECONNRESET = 104; + ENOBUFS = 105; + EISCONN = 106; + ENOTCONN = 107; + ESHUTDOWN = 108; + ETOOMANYREFS = 109; + ETIMEDOUT = 110; + ECONNREFUSED = 111; + EHOSTDOWN = 112; + EHOSTUNREACH = 113; + EALREADY = 114; + EINPROGRESS = 115; + ESTALE = 116; + EUCLEAN = 117; + ENOTNAM = 118; + ENAVAIL = 119; + EISNAM = 120; + EREMOTEIO = 121; + EDQUOT = 122; + ENOMEDIUM = 123; + EMEDIUMTYPE = 124; + ENOTSUP = EOPNOTSUPP; + ECANCELED = 125; + +const + __S_IFMT = $F000; + __S_IFDIR = $4000; + __S_IFCHR = $2000; + __S_IFBLK = $6000; + __S_IFREG = $8000; + __S_IFIFO = $1000; + __S_IFLNK = $A000; + __S_IFSOCK = $C000; + + __S_ISUID = $800; + __S_ISGID = $400; + __S_ISVTX = $200; + __S_IREAD = $100; + __S_IWRITE = $80; + __S_IEXEC = $40; + + S_IFMT = __S_IFMT; + S_IFDIR = __S_IFDIR; + S_IFCHR = __S_IFCHR; + S_IFBLK = __S_IFBLK; + S_IFREG = __S_IFREG; + S_IFIFO = __S_IFIFO; + S_IFLNK = __S_IFLNK; + S_IFSOCK = __S_IFSOCK; + +function __S_ISTYPE(mode, mask : __mode_t) : boolean; +function S_ISDIR(mode : __mode_t) : boolean; +function S_ISCHR(mode : __mode_t) : boolean; +function S_ISBLK(mode : __mode_t) : boolean; +function S_ISREG(mode : __mode_t) : boolean; +function S_ISFIFO(mode : __mode_t) : boolean; +function S_ISLNK(mode : __mode_t) : boolean; +function S_ISSOCK(mode : __mode_t) : boolean; + +const + S_ISUID = __S_ISUID; + S_ISGID = __S_ISGID; + S_ISVTX = __S_ISVTX; + + S_IRUSR = __S_IREAD; + S_IWUSR = __S_IWRITE; + S_IXUSR = __S_IEXEC; + S_IRWXU = (__S_IREAD or __S_IWRITE) or __S_IEXEC; + + S_IREAD = S_IRUSR; + S_IWRITE = S_IWUSR; + S_IEXEC = S_IXUSR; + + S_IRGRP = S_IRUSR shr 3; + S_IWGRP = S_IWUSR shr 3; + S_IXGRP = S_IXUSR shr 3; + S_IRWXG = S_IRWXU shr 3; + S_IROTH = S_IRGRP shr 3; + S_IWOTH = S_IWGRP shr 3; + S_IXOTH = S_IXGRP shr 3; + S_IRWXO = S_IRWXG shr 3; + +const + ACCESSPERMS = (S_IRWXU or S_IRWXG) or S_IRWXO; + ALLPERMS = ((((S_ISUID or S_ISGID) or S_ISVTX) or S_IRWXU) or S_IRWXG) or S_IRWXO; + DEFFILEMODE = ((((S_IRUSR or S_IWUSR) or S_IRGRP) or S_IWGRP) or S_IROTH) or S_IWOTH; + S_BLKSIZE = 512; + +const + DT_UNKNOWN = 0; + DT_FIFO = 1; + DT_CHR = 2; + DT_DIR = 4; + DT_BLK = 6; + DT_REG = 8; + DT_LNK = 10; + DT_SOCK = 12; + DT_WHT = 14; + +const + RTLD_LAZY = $00001; + RTLD_NOW = $00002; + RTLD_BINDING_MASK = $3; + RTLD_NOLOAD = $00004; + RTLD_GLOBAL = $00100; + RTLD_LOCAL = 0; + RTLD_NODELETE = $01000; + +const + _PATH_DEFPATH = '/usr/bin:/bin'; + _PATH_STDPATH = '/usr/bin:/bin:/usr/sbin:/sbin'; + _PATH_BSHELL = '/bin/sh'; + _PATH_CONSOLE = '/dev/console'; + _PATH_CSHELL = '/bin/csh'; + _PATH_DEVDB = '/var/run/dev.db'; + _PATH_DEVNULL = '/dev/null'; + _PATH_DRUM = '/dev/drum'; + _PATH_KLOG = '/proc/kmsg'; + _PATH_KMEM = '/dev/kmem'; + _PATH_LASTLOG = '/var/log/lastlog'; + _PATH_MAILDIR = '/var/mail'; + _PATH_MAN = '/usr/share/man'; + _PATH_MEM = '/dev/mem'; + _PATH_MNTTAB = '/etc/fstab'; + _PATH_MOUNTED = '/etc/mtab'; + _PATH_NOLOGIN = '/etc/nologin'; + _PATH_PRESERVE = '/var/lib'; + _PATH_RWHODIR = '/var/spool/rwho'; + _PATH_SENDMAIL = '/usr/sbin/sendmail'; + _PATH_SHADOW = '/etc/shadow'; + _PATH_SHELLS = '/etc/shells'; + _PATH_TTY = '/dev/tty'; + _PATH_UNIX = '/boot/vmlinux'; + _PATH_UTMP = '/var/run/utmp'; + _PATH_VI = '/usr/bin/vi'; + _PATH_WTMP = '/var/log/wtmp'; + _PATH_DEV = '/dev/'; + _PATH_TMP = '/tmp/'; + _PATH_VARDB = '/var/db/'; + _PATH_VARRUN = '/var/run/'; + _PATH_VARTMP = '/var/tmp/'; + +const + WCOREFLAG = $80; + +const + SIG_ERR = (-1); + SIG_DFL = (0); + SIG_IGN = (1); + SIG_HOLD = (2); + +const + SIGHUP = 1; + SIGINT = 2; + SIGQUIT = 3; + SIGILL = 4; + SIGTRAP = 5; + SIGABRT = 6; + SIGIOT = 6; + SIGBUS = 7; + SIGFPE = 8; + SIGKILL = 9; + SIGUSR1 = 10; + SIGSEGV = 11; + SIGUSR2 = 12; + SIGPIPE = 13; + SIGALRM = 14; + SIGTERM = 15; + SIGSTKFLT = 16; + SIGCHLD = 17; + SIGCLD = SIGCHLD; + SIGCONT = 18; + SIGSTOP = 19; + SIGTSTP = 20; + SIGTTIN = 21; + SIGTTOU = 22; + SIGURG = 23; + SIGXCPU = 24; + SIGXFSZ = 25; + SIGVTALRM = 26; + SIGPROF = 27; + SIGWINCH = 28; + SIGIO = 29; + SIGPOLL = SIGIO; + SIGPWR = 30; + SIGSYS = 31; + SIGUNUSED = 31; + _NSIG = 64; + +const + WNOHANG = 1; + WUNTRACED = 2; + __WALL = $40000000; + __WCLONE = $80000000; + +const + STDIN_FILENO = 0; + STDOUT_FILENO = 1; + STDERR_FILENO = 2; + +const + R_OK = 4; + W_OK = 2; + X_OK = 1; + F_OK = 0; + +const + SEEK_SET = 0; + SEEK_CUR = 1; + SEEK_END = 2; + +const + _STAT_VER_LINUX_OLD = 1; + _STAT_VER_KERNEL = 1; + _STAT_VER_SVR4 = 2; + _STAT_VER_LINUX = 3; + _STAT_VER = _STAT_VER_LINUX; + + _MKNOD_VER_LINUX = 1; + _MKNOD_VER_SVR4 = 2; + _MKNOD_VER = _MKNOD_VER_LINUX; + +{$IFNDEF KYLIX} +function stat64(const afile: PChar; buf: Pstat64): longint; cdecl; external GLIBC_LIB name 'stat64'; +function lstat64(const path: PChar; buf: Pstat64): longint; cdecl; external GLIBC_LIB name 'lstat64'; +{$ELSE} +function stat64(const afile: PChar; buf: Pstat64): longint; +function lstat64(const path: PChar; buf: Pstat64): longint; +{$ENDIF} + +function statfs64(const path: PChar; buf: Pstatfs64): longint; cdecl; external GLIBC_LIB name 'statfs64'; + +function chmod(const path: PChar; mode: __mode_t): Longint; cdecl; external GLIBC_LIB name 'chmod'; +function libc_chmod(const path: PChar; mode: __mode_t): Longint; cdecl; external GLIBC_LIB name 'chmod'; +function fchmod(fildes: Longint; mode: __mode_t): Longint; cdecl; external GLIBC_LIB name 'fchmod'; +function umask(mask: __mode_t): __mode_t; cdecl; external GLIBC_LIB name 'umask'; +function getumask: __mode_t; cdecl; external GLIBC_LIB name 'getumask'; +function chown(const path: PChar; owner: __uid_t; group: __gid_t): Longint; cdecl; external GLIBC_LIB name 'chown'; +function libc_chown(const path: PChar; owner: __uid_t; group: __gid_t): Longint; cdecl; external GLIBC_LIB name 'chown'; +function fchown(fd: Longint; owner: __uid_t; group: __gid_t): Longint; cdecl; external GLIBC_LIB name 'fchown'; +function lchown(const path: PChar; owner: __uid_t; group:__gid_t): Longint; cdecl; external GLIBC_LIB name 'lchown'; + +function __mkdir(const pathname: PChar; mode: __mode_t): Longint; cdecl; external GLIBC_LIB name 'mkdir'; +function mkdir(const pathname: PChar; mode: __mode_t): Longint; cdecl; external GLIBC_LIB name 'mkdir'; +function libc_mkdir(const pathname: PChar; mode: __mode_t): Longint; cdecl; external GLIBC_LIB name 'mkdir'; +function mknod(const pathname: PChar; mode: __mode_t; dev: __dev_t): Longint; cdecl; external GLIBC_LIB name 'mknod'; +function mkfifo(const pathname: PChar; mode: __mode_t): Longint; cdecl; external GLIBC_LIB name 'mkfifo'; + +function fileno(stream: PFILE): integer; cdecl; external GLIBC_LIB name 'fileno'; + +function utime(const afile: Pchar; buf: Putimbuf): Longint; cdecl; external GLIBC_LIB name 'utime'; + +function setmntent(const afile: PChar; const mode: PChar): PFILE; cdecl; external GLIBC_LIB name 'setmntent'; +function getmntent(stream: PFILE): Pmntent; cdecl; external GLIBC_LIB name 'getmntent'; +function endmntent(stream: PFILE): Longint; cdecl; external GLIBC_LIB name 'endmntent'; + +function dlopen(const filename: PChar; flag: Longint): Pointer; cdecl; external DL_LIB name 'dlopen'; +function dlclose(handle: Pointer): Longint; cdecl; external DL_LIB name 'dlclose'; +function dlsym(handle: Pointer; const symbol: PChar): Pointer; cdecl; external DL_LIB name 'dlsym'; +function dlerror: PChar; cdecl; external GLIBC_LIB name 'dlerror'; + +function malloc(size: size_t): Pointer; cdecl; external GLIBC_LIB name 'malloc'; +function calloc(nmemb: size_t; size: size_t): Pointer; cdecl; external GLIBC_LIB name 'calloc'; +function realloc(ptr: Pointer; size: size_t): Pointer; cdecl; external GLIBC_LIB name 'realloc'; +procedure free(ptr: Pointer); cdecl; external GLIBC_LIB name 'free'; +procedure libc_free(ptr: Pointer); cdecl; external GLIBC_LIB name 'free'; +procedure cfree(ptr: Pointer); cdecl; external GLIBC_LIB name 'cfree'; +function memalign(boundary: size_t; size: size_t): Pointer; cdecl; external GLIBC_LIB name 'memalign'; +function valloc(size: size_t): Pointer; cdecl; external GLIBC_LIB name 'valloc'; + +function memcpy(dest: Pointer; src: Pointer; n: size_t): Pointer; cdecl; external GLIBC_LIB name 'memcpy'; +function memmove(dest: Pointer; src: Pointer; n: size_t): Pointer; cdecl; external GLIBC_LIB name 'memmove'; +function memccpy(dest: Pointer; src: Pointer; c: longint; n: size_t): Pointer; cdecl; external GLIBC_LIB name 'memccpy'; +function memset(s: Pointer; c: Longint; n: size_t): Pointer; cdecl; external GLIBC_LIB name 'memset'; +function memcmp(s1: Pointer; s2: Pointer; n: size_t): Longint; cdecl; external GLIBC_LIB name 'memcmp'; +function memchr(s: Pointer; c: Longint; n: size_t): Pointer; cdecl; external GLIBC_LIB name 'memchr'; +function strcpy(dest: PChar; const src: PChar): PChar; cdecl; external GLIBC_LIB name 'strcpy'; +function strncpy(dest: PChar; const src: PChar; n: size_t): PChar; cdecl; external GLIBC_LIB name 'strncpy'; +function strcat(dest: PChar; const src: PChar): PChar; cdecl; external GLIBC_LIB name 'strcat'; +function strncat(dest: PChar; const src: PChar; n: size_t): PChar; cdecl; external GLIBC_LIB name 'strncat'; +function strcmp(const s1: PChar; const s2: PChar): Longint; cdecl; external GLIBC_LIB name 'strcmp'; +function strncmp(const s1: PChar; const s2: PChar; n: size_t): Longint; cdecl; external GLIBC_LIB name 'strncmp'; +function strcasecmp(const s1: PChar; const s2: PChar): Longint; cdecl; external GLIBC_LIB name 'strcasecmp'; +function strncasecmp(const s1: PChar; const s2: PChar; n: size_t): Longint; cdecl; external GLIBC_LIB name 'strncasecmp'; +function strdup(const s: PChar): PChar; cdecl; external GLIBC_LIB name 'strdup'; +function strndup(const s: PChar; n: size_t): PChar; cdecl; external GLIBC_LIB name 'strndup'; +function strchr(const s: PChar; c: Longint): PChar; cdecl; external GLIBC_LIB name 'strchr'; +function strrchr(const s: PChar; c: Longint): PChar; cdecl; external GLIBC_LIB name 'strrchr'; +function strstr(const haystack: PChar; const needle: PChar): PChar; cdecl; external GLIBC_LIB name 'strstr'; +function strcasestr(const haystack: PChar; const needle: PChar): PChar; cdecl; external GLIBC_LIB name 'strcasestr'; +function strtok(s: PChar; const delim: PChar): PChar; cdecl; external GLIBC_LIB name 'strtok'; +function strtok_r(s: PChar; const delim: PChar; save_ptr: PPchar): PChar; cdecl; external GLIBC_LIB name 'strtok_r'; +function strsep(stringp: PPchar; const delim: PChar): PChar; cdecl; external GLIBC_LIB name 'strsep'; +function strlen(const s: PChar): size_t; cdecl; external GLIBC_LIB name 'strlen'; +function strnlen(const s: PChar; maxlen: size_t): size_t; cdecl; external GLIBC_LIB name 'strnlen'; +function strerror(errnum: Longint): PChar; cdecl; external GLIBC_LIB name 'strerror'; +function strerror_r(errnum: Longint; buf: PChar; buflen: size_t): PChar; cdecl; external GLIBC_LIB name 'strerror_r'; +function strsignal(sig: Longint): PChar; cdecl; external GLIBC_LIB name 'strsignal'; + +function __chdir(const path: PChar): Longint; cdecl; external GLIBC_LIB name 'chdir'; +function chdir(const path: PChar): Longint; cdecl; external GLIBC_LIB name 'chdir'; +function libc_chdir(const path: PChar): Longint; cdecl; external GLIBC_LIB name 'chdir'; + +function errno : error_t; +function __errno_location: PInteger; cdecl; external GLIBC_LIB name '__errno_location'; + +function fork: __pid_t; cdecl; external GLIBC_LIB name 'fork'; +function vfork: __pid_t; cdecl; external GLIBC_LIB name 'vfork'; +function link(const oldpath: PChar; const newpath: PChar): Longint; cdecl; external GLIBC_LIB name 'link'; +function symlink(const oldpath: PChar; const newpath: PChar): Longint; cdecl; external GLIBC_LIB name 'symlink'; +function readlink(const path: PChar; buf: PChar; bufsiz: size_t): Longint; cdecl; external GLIBC_LIB name 'readlink'; +function unlink(const pathname: PChar): Longint; cdecl; external GLIBC_LIB name 'unlink'; +function __rmdir(const pathname: PChar): Longint; cdecl; external GLIBC_LIB name 'rmdir'; +function rmdir(const pathname: PChar): Longint; cdecl; external GLIBC_LIB name 'rmdir'; +function libc_rmdir(const pathname: PChar): Longint; cdecl; external GLIBC_LIB name 'rmdir'; +function remove(const pathname: PChar): Longint; cdecl; external GLIBC_LIB name 'remove'; +function libc_remove(const pathname: PChar): Longint; cdecl; external GLIBC_LIB name 'remove'; +function __rename(const oldpath: PChar; const newpath: PChar): Longint; cdecl; external GLIBC_LIB name 'rename'; +function libc_rename(const oldpath: PChar; const newpath: PChar): Longint; cdecl; external GLIBC_LIB name 'rename'; +function wait(status: PLongint): __pid_t; cdecl; external GLIBC_LIB name 'wait'; +function waitpid(pid: __pid_t; status: Plongint; options: Longint): __pid_t; cdecl; external GLIBC_LIB name 'waitpid'; +function waitid(idtype: idtype_t; id: __id_t; infop: Psiginfo_t; options: Longint): Longint; cdecl; external GLIBC_LIB name 'waitid'; +function wait3(status: Plongint; options: Longint; rusage: Prusage): __pid_t; cdecl; external GLIBC_LIB name 'wait3'; +function wait4(pid: __pid_t; status: Plongint; options: Longint; rusage: Prusage): __pid_t; cdecl; external GLIBC_LIB name 'wait4'; + +function opendir(const name: PChar): PDIR; cdecl; external GLIBC_LIB name 'opendir'; +function closedir(dir: PDIR): Longint; cdecl; external GLIBC_LIB name 'closedir'; +function readdir64(dir: PDIR): PDirent64; cdecl; external GLIBC_LIB name 'readdir64'; +procedure rewinddir(dir: PDIR); cdecl; external GLIBC_LIB name 'rewinddir'; +procedure seekdir(dir: PDIR; pos: Longint); cdecl; external GLIBC_LIB name 'seekdir'; +function telldir(dir: PDIR): Longint; cdecl; external GLIBC_LIB name 'telldir'; +function dirfd(dir: PDIR): Longint; cdecl; external GLIBC_LIB name 'dirfd'; + +function getcwd(buf: PChar; size: size_t): PChar; cdecl; external GLIBC_LIB name 'getcwd'; +function get_current_dir_name: PChar; cdecl; external GLIBC_LIB name 'get_current_dir_name'; +function getwd(buf: PChar): PChar; cdecl; external GLIBC_LIB name 'getwd'; + +function dup(oldfd: Longint): Longint; cdecl; external GLIBC_LIB name 'dup'; +function dup2(oldfd: Longint; newfd: Longint): Longint; cdecl; external GLIBC_LIB name 'dup2'; + +function execve(const filename: PChar; const argv: PPchar; const envp: PPchar): Longint; cdecl; external GLIBC_LIB name 'execve'; +function execv(const path: PChar; const argv: PPchar): Longint; cdecl; external GLIBC_LIB name 'execv'; +function execle(const path: PChar; const arg: PChar): Longint; cdecl; varargs; external GLIBC_LIB name 'execle'; +function execl(const path: PChar; const arg: PChar): Longint; cdecl; varargs; external GLIBC_LIB name 'execl'; +function execvp(const afile: PChar; const argv: PPchar): Longint; cdecl; external GLIBC_LIB name 'execvp'; +function execlp(const afile: PChar; const arg: PChar): Longint; cdecl; varargs; external GLIBC_LIB name 'execlp'; + +function getpid: __pid_t; cdecl; external GLIBC_LIB name 'getpid'; +function getppid: __pid_t; cdecl; external GLIBC_LIB name 'getppid'; +function getpgrp: __pid_t; cdecl; external GLIBC_LIB name 'getpgrp'; + +procedure setpwent; cdecl; external GLIBC_LIB name 'setpwent'; +procedure endpwent; cdecl; external GLIBC_LIB name 'endpwent'; +function getpwent: PPasswd; cdecl; external GLIBC_LIB name 'getpwent'; +function fgetpwent(stream: PFILE): PPasswd; cdecl; external GLIBC_LIB name 'fgetpwent'; +function putpwent(const p: PPasswd; stream: PFILE): Longint; cdecl; external GLIBC_LIB name 'putpwent'; +function getpwuid(uid: __uid_t): PPasswd; cdecl; external GLIBC_LIB name 'getpwuid'; +function getpwnam(const name: PChar): PPasswd; cdecl; external GLIBC_LIB name 'getpwnam'; + +procedure setgrent; cdecl; external GLIBC_LIB name 'setgrent'; +procedure endgrent; cdecl; external GLIBC_LIB name 'endgrent'; +function getgrent:PGroup; cdecl; external GLIBC_LIB name 'getgrent'; +function fgetgrent(stream: PFILE): PGroup; cdecl; external GLIBC_LIB name 'fgetgrent'; +function putgrent(p: PGroup; stream: PFILE): Longint; cdecl; external GLIBC_LIB name 'putgrent'; +function getgrgid(gid: __gid_t): PGroup; cdecl; external GLIBC_LIB name 'getgrgid'; +function getgrnam(name: PChar): PGroup; cdecl; external GLIBC_LIB name 'getgrnam'; + +function __time(t: Ptime_t): time_t; cdecl; external GLIBC_LIB name 'time'; +function time(t: Ptime_t): time_t; cdecl; external GLIBC_LIB name 'time'; +function libc_time(t: Ptime_t): time_t; cdecl; external GLIBC_LIB name 'time'; +function mktime(timep: Ptm): time_t; cdecl; external GLIBC_LIB name 'mktime'; +function strftime(s: PChar; max: size_t; const format: PChar; tm: Ptm): size_t; cdecl; external GLIBC_LIB name 'strftime'; +function gmtime(timep: Ptime_t): Ptm; cdecl; external GLIBC_LIB name 'gmtime'; +function localtime(timep: Ptime_t): Ptm; cdecl; external GLIBC_LIB name 'localtime'; +function ctime(timep: Ptime_t): PChar; cdecl; external GLIBC_LIB name 'ctime'; +function usleep(usec: DWord): Longint; cdecl; external GLIBC_LIB name 'usleep'; + +function mktemp(template: PChar): PChar; cdecl; external GLIBC_LIB name 'mktemp'; +function mkstemp(template: PChar): Longint; cdecl; external GLIBC_LIB name 'mkstemp'; +function mkstemp64(template: PChar): Longint; cdecl; external GLIBC_LIB name 'mkstemp64'; +function mkdtemp(template: PChar): PChar; cdecl; external GLIBC_LIB name 'mkdtemp'; + +function fprintf(stream: PFILE; const format: PChar): Longint; cdecl; varargs; external GLIBC_LIB name 'fprintf'; +function printf(const format: PChar): Longint; cdecl; varargs; external GLIBC_LIB name 'printf'; +function sprintf(s: PChar; const format: PChar): Longint; varargs; cdecl; external GLIBC_LIB name 'sprintf'; +function snprintf(s: PChar; size: size_t; const format: PChar): Longint; varargs; cdecl; external GLIBC_LIB name 'snprintf'; + +function WEXITSTATUS(Status: longint): longint; +function WTERMSIG(Status: longint): longint; +function WSTOPSIG(Status: longint): longint; +function WIFEXITED(Status: longint): Boolean; +function WIFSIGNALED(Status: longint): Boolean; +function WIFSTOPPED(Status: longint): Boolean; +function WCOREDUMP(Status: longint): Boolean; +function W_EXITCODE(ReturnCode, Signal: longint): longint; +function W_STOPCODE(Signal: longint): longint; + +function gethostname(name: PChar; len: size_t): Longint; cdecl; external GLIBC_LIB name 'gethostname'; + +function sigqueue(pid: __pid_t; sig: Longint; val: sigval): Longint; cdecl; external GLIBC_LIB name 'sigqueue'; +function sigaction(sig: Longint; Action: PSigAction; OldAction: PSigAction): Integer; cdecl; external GLIBC_LIB name 'sigaction'; +function __system(const command: PChar): Longint; cdecl; external GLIBC_LIB name 'system'; +function system(const command: PChar): Longint; cdecl; external GLIBC_LIB name 'system'; +function libc_system(const command: PChar): Longint; cdecl; external GLIBC_LIB name 'system'; + +procedure perror(const s: PChar); cdecl; external GLIBC_LIB name 'perror'; +function popen(const command: PChar; const _type: PChar): PFILE; cdecl; external GLIBC_LIB name 'popen'; +function pclose(stream: PFILE): Longint; cdecl; external GLIBC_LIB name 'pclose'; +function pipe(pipedes: Plongint): Longint; cdecl; external GLIBC_LIB name 'pipe'; + +function fopen(const path: PChar; const mode: PChar): PFILE; cdecl; external GLIBC_LIB name 'fopen'; +function fopen64(const path: PChar; const mode: PChar): PFILE; cdecl; external GLIBC_LIB name 'fopen64'; +function fdopen(fd: Longint; mode: PChar): PFILE; cdecl; external GLIBC_LIB name 'fdopen'; +function fclose(fp: PFILE): Longint; cdecl; external GLIBC_LIB name 'fclose'; +function fflush(stream: PFILE): Longint; cdecl; external GLIBC_LIB name 'fflush'; +function fflush_unlocked(stream: PFILE): Longint; cdecl; external GLIBC_LIB name 'fflush_unlocked'; +function fread(ptr: Pointer; size: size_t; n: size_t; stream: PFILE): size_t; cdecl; external GLIBC_LIB name 'fread'; +function fwrite(const ptr: Pointer; size: size_t; n: size_t; stream: PFILE): size_t; cdecl; external GLIBC_LIB name 'fwrite'; +function fseek(stream: PFILE; off: Longint; whence: Longint): Longint; cdecl; external GLIBC_LIB name 'fseek'; +function ftell(stream:PFILE): Longint; cdecl; external GLIBC_LIB name 'ftell'; +procedure rewind(stream:PFILE); cdecl; external GLIBC_LIB name 'rewind'; + +function fseeko(stream: PFILE; offset: __off_t; whence: Longint): Longint; cdecl; external GLIBC_LIB name 'fseeko'; +function ftello(stream: PFILE): __off_t; cdecl; external GLIBC_LIB name 'ftello'; +function fgetpos(stream: PFILE; pos: Pfpos_t): Longint; cdecl; external GLIBC_LIB name 'fgetpos'; +function fsetpos(stream: PFILE; pos: Pfpos_t): Longint; cdecl; external GLIBC_LIB name 'fsetpos'; +function fseeko64(stream: PFILE; offset: __off64_t; whence: Longint): Longint; cdecl; external GLIBC_LIB name 'fseeko64'; +function ftello64(stream: PFILE): __off64_t; cdecl; external GLIBC_LIB name 'ftello64'; +function fgetpos64(stream: PFILE; pos: Pfpos64_t): Longint; cdecl; external GLIBC_LIB name 'fgetpos64'; +function fsetpos64(stream: PFILE; pos: Pfpos64_t): Longint; cdecl; external GLIBC_LIB name 'fsetpos64'; +function feof(stream: PFILE): Longint; cdecl; external GLIBC_LIB name 'feof'; +function ferror(stream: PFILE): Longint; cdecl; external GLIBC_LIB name 'ferror'; + +function fcntl(fd: Longint; cmd: Longint): Longint; cdecl; varargs; external GLIBC_LIB name 'fcntl'; +function open(const pathname: PChar; flags: Longint): Longint; cdecl; varargs; external GLIBC_LIB name 'open'; +function open64(const pathname: PChar; flags: Longint): Longint; cdecl; varargs; external GLIBC_LIB name 'open64'; +function creat(const pathname: PChar; mode: __mode_t): Longint; cdecl; external GLIBC_LIB name 'creat'; +function creat64(const pathname: PChar; mode: __mode_t): Longint; cdecl; external GLIBC_LIB name 'creat64'; + +function __read(Handle: Integer; var Buffer; Count: size_t): ssize_t; cdecl; external GLIBC_LIB name 'read'; +function libc_read(Handle: Integer; var Buffer; Count: size_t): ssize_t; cdecl; external GLIBC_LIB name 'read'; +function __write(Handle: Integer; const Buffer; Count: size_t): ssize_t; cdecl; external GLIBC_LIB name 'write'; +function libc_write(Handle: Integer; const Buffer; Count: size_t): ssize_t; cdecl; external GLIBC_LIB name 'write'; +function __close(Handle: Integer): Integer; cdecl; external GLIBC_LIB name 'close'; +function libc_close(Handle: Integer): Integer; cdecl; external GLIBC_LIB name 'close'; + +function getuid: __uid_t; cdecl; external GLIBC_LIB name 'getuid'; +function geteuid: __uid_t; cdecl; external GLIBC_LIB name 'geteuid'; +function getgid: __gid_t; cdecl; external GLIBC_LIB name 'getgid'; +function getegid: __gid_t; cdecl; external GLIBC_LIB name 'getegid'; + +function access(pathname: PChar; mode: Longint): Longint; cdecl; external GLIBC_LIB name 'access'; +function euidaccess(pathname: PChar; mode: Longint): Longint; cdecl; external GLIBC_LIB name 'euidaccess'; + + + + +implementation + +{$IFDEF KYLIX} +function glibc__xstat64(ver: integer; const afile: PChar; buf: Pstat64): longint; cdecl; external GLIBC_LIB name '__xstat64'; +function glibc__lxstat64(ver: integer; const path: PChar; buf: Pstat64): longint; cdecl; external GLIBC_LIB name '__lxstat64'; + +function stat64(const afile: PChar; buf: Pstat64): longint; +begin + Result := glibc__xstat64(_STAT_VER, afile, buf); +end; + +function lstat64(const path: PChar; buf: Pstat64): longint; +begin + Result := glibc__lxstat64(_STAT_VER, path, buf); +end; +{$ENDIF} + +function errno : error_t; +begin + Result := __errno_location()^; +end; + +function __S_ISTYPE(mode, mask : __mode_t) : boolean; +begin + Result := (mode and __S_IFMT) = mask; +end; + +function S_ISDIR(mode : __mode_t) : boolean; +begin + Result := __S_ISTYPE(mode, __S_IFDIR); +end; + +function S_ISCHR(mode : __mode_t) : boolean; +begin + Result := __S_ISTYPE(mode, __S_IFCHR); +end; + +function S_ISBLK(mode : __mode_t) : boolean; +begin + Result := __S_ISTYPE(mode, __S_IFBLK); +end; + +function S_ISREG(mode : __mode_t) : boolean; +begin + Result := __S_ISTYPE(mode, __S_IFREG); +end; + +function S_ISFIFO(mode : __mode_t) : boolean; +begin + Result := __S_ISTYPE(mode, __S_IFIFO); +end; + +function S_ISLNK(mode : __mode_t) : boolean; +begin + Result := __S_ISTYPE(mode, __S_IFLNK); +end; + +function S_ISSOCK(mode : __mode_t) : boolean; +begin + Result := __S_ISTYPE(mode, __S_IFSOCK); +end; + +Function WEXITSTATUS(Status: longint): longint; +begin + Result:=(Status and $FF00) shr 8; +end; + + +Function WTERMSIG(Status: longint): longint; +begin + Result:=(Status and $7F); +end; + + +Function WSTOPSIG(Status: longint): longint; +begin + Result:=WEXITSTATUS(Status); +end; + + +Function WIFEXITED(Status: longint): Boolean; +begin + Result:=(WTERMSIG(Status)=0); +end; + + +Function WIFSIGNALED(Status: longint): Boolean; +begin + Result:=(not WIFSTOPPED(Status)) and (not WIFEXITED(Status)); +end; + + +Function WIFSTOPPED(Status: longint): Boolean; +begin + Result:=((Status and $FF)=$7F); +end; + + +Function WCOREDUMP(Status: longint): Boolean; +begin + Result:=((Status and WCOREFLAG)<>0); +end; + + +Function W_EXITCODE(ReturnCode, Signal: longint): longint; +begin + Result:=(ReturnCode shl 8) or Signal; +end; + + +Function W_STOPCODE(Signal: longint): longint; +begin + Result:=(Signal shl 8) or $7F; +end; + +end. + |
