summaryrefslogtreecommitdiff
path: root/ULibc.pas
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@redhat.com>2024-10-25 11:32:12 +0200
committerTomas Bzatek <tbzatek@redhat.com>2024-10-25 11:32:12 +0200
commitd08636bdad4f36431bfdf07e8400d7188a2df781 (patch)
tree841aef1904f9c87ee02e1a730ef488cc75215ec6 /ULibc.pas
parent741e1499ed55e20c136298ced705dcbb59915117 (diff)
downloadtuxcmd-0.6.83.tar.xz
Rework file copy/open-read-write-close data handlingv0.6.83
Stick to the POSIX open(2), read(2), write(2), close(2) return values semantics, apply on the VFS interface. Also handle short reads and writes that are common for some gvfs backends. This makes cross-VFS copy work.
Diffstat (limited to 'ULibc.pas')
-rw-r--r--ULibc.pas31
1 files changed, 25 insertions, 6 deletions
diff --git a/ULibc.pas b/ULibc.pas
index edccfc8..3b187be 100644
--- a/ULibc.pas
+++ b/ULibc.pas
@@ -631,6 +631,23 @@ const
SEEK_END = 2;
const
+ O_RDONLY = 0;
+ O_WRONLY = 1;
+ O_RDWR = 2;
+ O_CREAT = $40;
+ O_EXCL = $80;
+ O_NOCTTY = $100;
+ O_TRUNC = $200;
+ O_APPEND = $400;
+ O_NONBLOCK = $800;
+ O_NDELAY = O_NONBLOCK;
+ O_SYNC = $1000;
+ O_DIRECT = $4000;
+ O_DIRECTORY = $10000;
+ O_NOFOLLOW = $20000;
+ O_CLOEXEC = $80000;
+
+const
_STAT_VER_LINUX_OLD = 1;
_STAT_VER_KERNEL = 1;
_STAT_VER_SVR4 = 2;
@@ -872,15 +889,17 @@ 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 open(const pathname: PChar; flags: Longint; mode: Longint): Longint; cdecl; varargs; external GLIBC_LIB name 'open';
+function open64(const pathname: PChar; flags: Longint; mode: 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 lseek(fd: longint; offset: __off_t; whence: longint):__off_t; cdecl; external GLIBC_LIB name 'lseek';
+function lseek64(fd: longint; offset: __off64_t; whence: longint):__off64_t; cdecl; external GLIBC_LIB name 'lseek64';
-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 __read(Handle: Integer; Buffer: Pointer; Count: size_t): ssize_t; cdecl; external GLIBC_LIB name 'read';
+function libc_read(Handle: Integer; Buffer: Pointer; Count: size_t): ssize_t; cdecl; external GLIBC_LIB name 'read';
+function __write(Handle: Integer; Buffer: Pointer; Count: size_t): ssize_t; cdecl; external GLIBC_LIB name 'write';
+function libc_write(Handle: Integer; Buffer: Pointer; 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';