9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit acce5499735e62c93f8383df281037b16f76b753
parent 1c4f3ff0aa165ed13b3706047dc001447f274f39
Author: Roberto Vargas <roberto.vargas@arm.com>
Date:   Tue,  5 Mar 2019 12:27:25 +0000

[dev] Add devseek()

This function is like seek() but it acts over channels
instead of file descriptors.

Change-Id: I25463f460e6df3d1a6dc1015d239de3556da877f

Diffstat:
Mdrivers/dev.c | 28+++++++++++++++++-----------
Mdrivers/dev.h | 3+++
2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/drivers/dev.c b/drivers/dev.c @@ -380,18 +380,8 @@ devwrite(Chan *c, void *buf, int n) } int -seek(int fd, long long off, int whence) +devseek(Chan *c, long long off, int whence) { - Chan *c; - - if ((c = fd2chan(fd)) == NULL) - return -1; - - if (c->qid & CHDIR) { - errno = EISDIR; - return -1; - } - switch (whence) { case 0: c->offset = off; @@ -408,6 +398,22 @@ seek(int fd, long long off, int whence) } int +seek(int fd, long long off, int whence) +{ + Chan *c; + + if ((c = fd2chan(fd)) == NULL) + return -1; + + if (c->qid & CHDIR) { + errno = EISDIR; + return -1; + } + + return devseek(c, off,whence); +} + +int bind(char *new, char *where) { int i; diff --git a/drivers/dev.h b/drivers/dev.h @@ -41,6 +41,9 @@ struct attr { char *value; }; + +extern int devseek(Chan *c, long long off, int whence); +extern Chan * namec(const char *name, int mode); extern Chan *clone(Chan *c, Chan *nc); extern void chanclose(Chan *c); extern int buf2chan(Chan *c,