diff --git a/modules/src/system/.distr b/modules/src/system/.distr index 05e4045f3..b4e192629 100644 --- a/modules/src/system/.distr +++ b/modules/src/system/.distr @@ -17,3 +17,4 @@ system.h time.c unlock.c write.c +seek.c diff --git a/modules/src/system/Makefile b/modules/src/system/Makefile index dee6ac420..3762891fa 100644 --- a/modules/src/system/Makefile +++ b/modules/src/system/Makefile @@ -7,10 +7,10 @@ INCLUDES = -I. CFLAGS = $(INCLUDES) -O OBJ = access.o break.o chmode.o close.o create.o filesize.o \ modtime.o lock.o open.o read.o remove.o stop.o \ - system.o time.o unlock.o write.o + system.o time.o unlock.o write.o seek.o CSRC = access.c break.c chmode.c close.c create.c filesize.c \ modtime.c lock.c open.c read.c remove.c stop.c \ - system.c time.c unlock.c write.c + system.c time.c unlock.c write.c seek.c SRC = Makefile system.h $(CSRC) all: $(LIBSYS) diff --git a/modules/src/system/seek.c b/modules/src/system/seek.c new file mode 100644 index 000000000..2d742fac1 --- /dev/null +++ b/modules/src/system/seek.c @@ -0,0 +1,18 @@ +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +/* $Header$ */ + +#include + +long lseek(); + +int +sys_seek(fp, off, whence, poff) + File *fp; + long off; + long *poff; +{ + return (*poff = lseek(fp->o_fd, off, whence)) >= 0; +} diff --git a/modules/src/system/system.3 b/modules/src/system/system.3 index 3fbd5181d..38bd8888c 100644 --- a/modules/src/system/system.3 +++ b/modules/src/system/system.3 @@ -29,6 +29,12 @@ sys_break, sys_stop, sys_time \- system call interface .B char *bufptr; .B int nbytes; .PP +.B int sys_seek(filep, offset, whence, poffset) +.B File *filep; +.B long offset; +.B int whence; +.B long *poffset; +.PP .B int sys_reset(filep) .B File *filep .PP @@ -142,6 +148,31 @@ A non-zero return value indicates that .I nbytes are actually written. .PP +.I Sys_seek +sets the file pointer of +.I filep +as follows: +.IP " " +If +.I whence +is 0, the pointer is set to +.I offset +bytes. +.IP " " +If +.I whence +is 1, the pointer is set to its current location plus +.IR offset . +.IP " " +If +.I whence +is 2, the pointer is set to the size of the file plus +.IR offset . +.PP +Upon succesful completion, the resulting pointer location is returned in +.IR poffset , +and 1 is returned. Otherwise, 0 is returned. +.PP .I Sys_reset causes the open file known by .I filep