From daefa1a92f688399290f231c4c738ef99e7b8ab4 Mon Sep 17 00:00:00 2001 From: rsc Date: Tue, 18 Jan 2005 18:11:39 +0000 Subject: add fsseek --- src/lib9pclient/seek.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/lib9pclient/seek.c (limited to 'src/lib9pclient/seek.c') diff --git a/src/lib9pclient/seek.c b/src/lib9pclient/seek.c new file mode 100644 index 00000000..0785c4b4 --- /dev/null +++ b/src/lib9pclient/seek.c @@ -0,0 +1,46 @@ +#include +#include +#include +#include <9pclient.h> +#include "fsimpl.h" + +vlong +fsseek(CFid *fid, vlong n, int whence) +{ + Dir *d; + + switch(whence){ + case 0: + qlock(&fid->lk); + fid->offset = n; + qunlock(&fid->lk); + break; + case 1: + qlock(&fid->lk); + n += fid->offset; + if(n < 0){ + qunlock(&fid->lk); + werrstr("negative offset"); + return -1; + } + fid->offset = n; + qunlock(&fid->lk); + break; + case 2: + if((d = fsdirfstat(fid)) == nil) + return -1; + n += d->length; + if(n < 0){ + werrstr("negative offset"); + return -1; + } + qlock(&fid->lk); + fid->offset = n; + qunlock(&fid->lk); + break; + default: + werrstr("bad whence in fsseek"); + return -1; + } + return n; +} -- cgit v1.2.3