9ns: Fix devtab function pointer signatures
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 1 Mar 2018 04:07:39 +0000 (23:07 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 30 Apr 2018 18:29:20 +0000 (14:29 -0400)
The signatures had the wrong signedness for some of the types.  It had
been an ongoing annoyance for every new device we create.  I pulled off
the bandaid.

Returning negative values for e.g. dev.read() will decrement the chan's
offset!  See rread() for details.  It's unlikely, but we shouldn't be
propagating errors like that, and the type ought to tell us what the
function should do.

Note that SYS_read returns an ssize_t.  dev.read() does not.  It should
throw for errors.

When I noticed device-internal functions with similar problems, for
instance helper functions like mntrdwr() or some of the functions in
sd.c, I fixed those too.  But this was far from exhaustive.

I did notice that pipebwrite() returns the retval from qio functions, but
ipbwrite() just returns n.  Those qio functions could return -1, maybe,
since they are ssize_t.  That needs some work still.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
23 files changed:
kern/arch/x86/devarch.c
kern/drivers/dev/acpi.c
kern/drivers/dev/alarm.c
kern/drivers/dev/capability.c
kern/drivers/dev/cons.c
kern/drivers/dev/ether.c
kern/drivers/dev/eventfd.c
kern/drivers/dev/kprof.c
kern/drivers/dev/mem.c
kern/drivers/dev/mnt.c
kern/drivers/dev/pci.c
kern/drivers/dev/pipe.c
kern/drivers/dev/proc.c
kern/drivers/dev/random.c
kern/drivers/dev/regress.c
kern/drivers/dev/root.c
kern/drivers/dev/sd.c
kern/drivers/dev/srv.c
kern/drivers/dev/vars.c
kern/drivers/dev/version.c
kern/include/ns.h
kern/src/net/devip.c
kern/src/ns/dev.c

index cd4d8fa..06cb3ae 100644 (file)
@@ -312,12 +312,12 @@ static struct chan *archattach(char *spec)
 }
 
 struct walkqid *archwalk(struct chan *c, struct chan *nc, char **name,
-                                                int nname)
+                                                unsigned int nname)
 {
        return devwalk(c, nc, name, nname, archdir, Qmax, devgen);
 }
 
-static int archstat(struct chan *c, uint8_t * dp, int n)
+static size_t archstat(struct chan *c, uint8_t *dp, size_t n)
 {
        archdir[Qrealmem].length = REAL_MEM_SIZE;
 
@@ -496,7 +496,7 @@ static void archclose(struct chan *c)
        }
 }
 
-static long archread(struct chan *c, void *a, long n, int64_t offset)
+static size_t archread(struct chan *c, void *a, size_t n, off64_t offset)
 {
        char *buf, *p;
        int err, port;
@@ -655,7 +655,7 @@ static ssize_t pstate_write(void *ubuf, size_t len, off64_t off)
        return len;
 }
 
-static long archwrite(struct chan *c, void *a, long n, int64_t offset)
+static size_t archwrite(struct chan *c, void *a, size_t n, off64_t offset)
 {
        char *p;
        int port, err;
index 64dc5de..e836162 100644 (file)
@@ -1949,7 +1949,7 @@ static struct chan *acpiattach(char *spec)
 }
 
 static struct walkqid *acpiwalk(struct chan *c, struct chan *nc, char **name,
-                                                               int nname)
+                                                               unsigned int nname)
 {
        /*
         * Note that devwalk hard-codes a test against the location of 'devgen',
@@ -1958,7 +1958,7 @@ static struct walkqid *acpiwalk(struct chan *c, struct chan *nc, char **name,
        return devwalk(c, nc, name, nname, NULL, 0, acpigen);
 }
 
-static int acpistat(struct chan *c, uint8_t *dp, int n)
+static size_t acpistat(struct chan *c, uint8_t *dp, size_t n)
 {
        struct Atable *a = genatable(c);
 
@@ -1984,7 +1984,7 @@ static int tlen;
 
 // Get the table from the qid.
 // Read that one table using the pointers.
-static long acpiread(struct chan *c, void *a, long n, int64_t off)
+static size_t acpiread(struct chan *c, void *a, size_t n, off64_t off)
 {
        long q;
        struct Atable *t;
@@ -2039,7 +2039,7 @@ static long acpiread(struct chan *c, void *a, long n, int64_t off)
        return -1;
 }
 
-static long acpiwrite(struct chan *c, void *a, long n, int64_t off)
+static size_t acpiwrite(struct chan *c, void *a, size_t n, off64_t off)
 {
        error(EFAIL, "acpiwrite: not until we can figure out what it's for");
 #if 0
index 10302f9..7b31548 100644 (file)
@@ -268,12 +268,12 @@ static struct chan *alarmattach(char *spec)
 }
 
 static struct walkqid *alarmwalk(struct chan *c, struct chan *nc, char **name,
-                                                                int nname)
+                                                                unsigned int nname)
 {
        return devwalk(c, nc, name, nname, 0, 0, alarmgen);
 }
 
-static int alarmstat(struct chan *c, uint8_t * db, int n)
+static size_t alarmstat(struct chan *c, uint8_t *db, size_t n)
 {
        return devstat(c, db, n, 0, 0, alarmgen);
 }
@@ -396,7 +396,7 @@ static long read_qcount(struct chan *c, void *ubuf, size_t n)
        return sizeof(old_count);
 }
 
-static long alarmread(struct chan *c, void *ubuf, long n, int64_t offset)
+static size_t alarmread(struct chan *c, void *ubuf, size_t n, off64_t offset)
 {
        struct proc_alarm *p_alarm;
 
@@ -454,7 +454,7 @@ static void set_proc_alarm(struct proc_alarm *a, uint64_t hexval)
  * active kref on the p_alarm.  Also note that we make no assumptions about
  * current here - we find the proc (and the tchain) via the ref stored in the
  * proc_alarm. */
-static long alarmwrite(struct chan *c, void *ubuf, long n, int64_t unused)
+static size_t alarmwrite(struct chan *c, void *ubuf, size_t n, off64_t unused)
 {
        struct proc_alarm *p_alarm;
 
index 9d466bb..5e396b6 100644 (file)
@@ -73,7 +73,7 @@ static struct chan *capattach(char *spec)
 }
 
 static struct walkqid *capwalk(struct chan *c, struct chan *nc, char **name,
-                               int nname)
+                               unsigned int nname)
 {
        return devwalk(c, nc, name, nname, capdir, ncapdir, devgen);
 }
@@ -86,7 +86,7 @@ static void capremove(struct chan *c)
                error(EPERM, "Permission denied");
 }
 
-static int32_t capstat(struct chan *c, uint8_t *db, int32_t n)
+static size_t capstat(struct chan *c, uint8_t *db, size_t n)
 {
        return devstat(c, db, n, capdir, ncapdir, devgen);
 }
@@ -185,7 +185,7 @@ static void capclose(struct chan *c)
 {
 }
 
-static long capread(struct chan *c, void *va, long n, int64_t m)
+static size_t capread(struct chan *c, void *va, size_t n, off64_t m)
 {
        switch ((uint32_t)c->qid.path) {
        case Qdir:
@@ -198,7 +198,7 @@ static long capread(struct chan *c, void *va, long n, int64_t m)
        return n;
 }
 
-static long capwrite(struct chan *c, void *va, long n, int64_t m)
+static size_t capwrite(struct chan *c, void *va, size_t n, off64_t m)
 {
        struct Caphash *p;
        char *cp;
index 4cb0527..1a9ce3d 100644 (file)
@@ -711,12 +711,12 @@ static struct chan *consattach(char *spec)
 }
 
 static struct walkqid *conswalk(struct chan *c, struct chan *nc, char **name,
-                                                               int nname)
+                                                               unsigned int nname)
 {
        return devwalk(c, nc, name, nname, consdir, ARRAY_SIZE(consdir), devgen);
 }
 
-static int consstat(struct chan *c, uint8_t *dp, int n)
+static size_t consstat(struct chan *c, uint8_t *dp, size_t n)
 {
        struct dir dir;
        struct dirtab *tab;
@@ -789,7 +789,7 @@ static void consclose(struct chan *c)
        }
 }
 
-static long consread(struct chan *c, void *buf, long n, int64_t off)
+static size_t consread(struct chan *c, void *buf, size_t n, off64_t off)
 {
        ERRSTACK(1);
        uint32_t l;
@@ -1050,7 +1050,7 @@ static long consread(struct chan *c, void *buf, long n, int64_t off)
        return -1;      /* never reached */
 }
 
-static long conswrite(struct chan *c, void *va, long n, int64_t off)
+static size_t conswrite(struct chan *c, void *va, size_t n, off64_t off)
 {
        ERRSTACK(1);
        char buf[256], ch;
index 9a73098..f0a7c14 100644 (file)
@@ -119,7 +119,7 @@ static void ethershutdown(void)
 }
 
 static struct walkqid *etherwalk(struct chan *chan, struct chan *nchan,
-                                                                char **name, int nname)
+                                                                char **name, unsigned int nname)
 {
        ERRSTACK(1);
        struct walkqid *wq;
@@ -139,10 +139,10 @@ static struct walkqid *etherwalk(struct chan *chan, struct chan *nchan,
        return wq;
 }
 
-static int etherstat(struct chan *chan, uint8_t * dp, int n)
+static size_t etherstat(struct chan *chan, uint8_t *dp, size_t n)
 {
        ERRSTACK(1);
-       int s;
+       size_t s;
        struct ether *ether;
 
        ether = chan->aux;
@@ -191,7 +191,7 @@ static void etherclose(struct chan *chan)
        runlock(&ether->rwlock);
 }
 
-static long etherread(struct chan *chan, void *buf, long n, int64_t off)
+static size_t etherread(struct chan *chan, void *buf, size_t n, off64_t off)
 {
        ERRSTACK(1);
        struct ether *ether;
@@ -223,7 +223,7 @@ out:
        return r;
 }
 
-static struct block *etherbread(struct chan *chan, long n, uint32_t offset)
+static struct block *etherbread(struct chan *chan, size_t n, off64_t offset)
 {
        ERRSTACK(1);
        struct block *b;
@@ -241,7 +241,7 @@ static struct block *etherbread(struct chan *chan, long n, uint32_t offset)
        return b;
 }
 
-static int etherwstat(struct chan *chan, uint8_t * dp, int n)
+static size_t etherwstat(struct chan *chan, uint8_t *dp, size_t n)
 {
        ERRSTACK(1);
        struct ether *ether;
@@ -450,7 +450,7 @@ static int etheroq(struct ether *ether, struct block *bp)
        return len;
 }
 
-static long etherwrite(struct chan *chan, void *buf, long n, int64_t unused)
+static size_t etherwrite(struct chan *chan, void *buf, size_t n, off64_t unused)
 {
        ERRSTACK(2);
        struct ether *ether;
@@ -511,7 +511,7 @@ out:
        return l;
 }
 
-static long etherbwrite(struct chan *chan, struct block *bp, uint32_t unused)
+static size_t etherbwrite(struct chan *chan, struct block *bp, off64_t unused)
 {
        ERRSTACK(1);
        struct ether *ether;
index 2287b25..a46e6c9 100644 (file)
@@ -90,7 +90,7 @@ static struct chan *efd_attach(char *spec)
 }
 
 static struct walkqid *efd_walk(struct chan *c, struct chan *nc, char **name,
-                                                               int nname)
+                                                               unsigned int nname)
 {
        struct walkqid *wq;
        struct eventfd *efd = c->aux;
@@ -117,7 +117,7 @@ static struct walkqid *efd_walk(struct chan *c, struct chan *nc, char **name,
 }
 
 /* In the future, we could use stat / wstat to get and set O_NONBLOCK */
-static int efd_stat(struct chan *c, uint8_t * db, int n)
+static size_t efd_stat(struct chan *c, uint8_t *db, size_t n)
 {
        return devstat(c, db, n, efd_dir, ARRAY_SIZE(efd_dir), devgen);
 }
@@ -182,7 +182,7 @@ success:
        return ret;
 }
 
-static long efd_read(struct chan *c, void *ubuf, long n, int64_t offset)
+static size_t efd_read(struct chan *c, void *ubuf, size_t n, off64_t offset)
 {
        struct eventfd *efd = c->aux;
 
@@ -230,7 +230,7 @@ success:
        efd_fire_taps(efd, FDTAP_FILT_READABLE);
 }
 
-static long efd_write(struct chan *c, void *ubuf, long n, int64_t offset)
+static size_t efd_write(struct chan *c, void *ubuf, size_t n, off64_t offset)
 {
        struct eventfd *efd = c->aux;
        unsigned long write_val;
index 67ffacd..cbc7b1c 100644 (file)
@@ -185,7 +185,7 @@ static void kprof_shutdown(void)
 }
 
 static struct walkqid *kprof_walk(struct chan *c, struct chan *nc, char **name,
-                                  int nname)
+                                  unsigned int nname)
 {
        return devwalk(c, nc, name, nname, kproftab, ARRAY_SIZE(kproftab), devgen);
 }
@@ -200,7 +200,7 @@ static long kprof_profdata_read(void *dest, long size, int64_t off)
        return profiler_read(dest, size);
 }
 
-static int kprof_stat(struct chan *c, uint8_t *db, int n)
+static size_t kprof_stat(struct chan *c, uint8_t *db, size_t n)
 {
        kproftab[Kprofdataqid].length = kprof_profdata_size();
        kproftab[Kptraceqid].length = kprof_tracedata_size();
@@ -320,7 +320,7 @@ static long mpstatraw_read(void *va, long n, int64_t off)
        return n;
 }
 
-static long kprof_read(struct chan *c, void *va, long n, int64_t off)
+static size_t kprof_read(struct chan *c, void *va, size_t n, off64_t off)
 {
        uint64_t w, *bp;
        char *a, *ea;
@@ -352,7 +352,7 @@ static long kprof_read(struct chan *c, void *va, long n, int64_t off)
        return n;
 }
 
-static long kprof_write(struct chan *c, void *a, long n, int64_t unused)
+static size_t kprof_write(struct chan *c, void *a, size_t n, off64_t unused)
 {
        ERRSTACK(1);
        struct cmdbuf *cb = parsecmd(a, n);
index 7de9556..fefed1e 100644 (file)
@@ -43,12 +43,12 @@ static struct chan *mem_attach(char *spec)
 }
 
 static struct walkqid *mem_walk(struct chan *c, struct chan *nc, char **name,
-                                                               int nname)
+                                                               unsigned int nname)
 {
        return devwalk(c, nc, name, nname, mem_dir, ARRAY_SIZE(mem_dir), devgen);
 }
 
-static int mem_stat(struct chan *c, uint8_t *db, int n)
+static size_t mem_stat(struct chan *c, uint8_t *db, size_t n)
 {
        return devstat(c, db, n, mem_dir, ARRAY_SIZE(mem_dir), devgen);
 }
@@ -411,7 +411,7 @@ static void mem_close(struct chan *c)
        }
 }
 
-static long mem_read(struct chan *c, void *ubuf, long n, int64_t offset)
+static size_t mem_read(struct chan *c, void *ubuf, size_t n, off64_t offset)
 {
        struct sized_alloc *sza;
 
@@ -431,7 +431,7 @@ static long mem_read(struct chan *c, void *ubuf, long n, int64_t offset)
        return -1;
 }
 
-static long mem_write(struct chan *c, void *ubuf, long n, int64_t offset)
+static size_t mem_write(struct chan *c, void *ubuf, size_t n, off64_t offset)
 {
        switch (c->qid.path) {
        default:
index 12e19fe..650d017 100644 (file)
@@ -116,7 +116,7 @@ void mntgate(struct mnt *);
 void mntpntfree(struct mnt *);
 void mntqrm(struct mnt *, struct mntrpc *);
 struct mntrpc *mntralloc(struct chan *, uint32_t);
-long mntrdwr(int unused_int, struct chan *, void *, long, int64_t);
+size_t mntrdwr(int unused_int, struct chan *, void *, size_t, off64_t);
 int mntrpcread(struct mnt *, struct mntrpc *);
 void mountio(struct mnt *, struct mntrpc *);
 void mountmux(struct mnt *, struct mntrpc *);
@@ -425,7 +425,7 @@ struct chan *mntchan(void)
 }
 
 static struct walkqid *mntwalk(struct chan *c, struct chan *nc, char **name,
-                                                          int nname)
+                                                          unsigned int nname)
 {
        ERRSTACK(2);
        volatile int alloc;
@@ -508,7 +508,7 @@ Return:
        return wq;
 }
 
-static int mntstat(struct chan *c, uint8_t * dp, int n)
+static size_t mntstat(struct chan *c, uint8_t *dp, size_t n)
 {
        ERRSTACK(1);
        struct mnt *m;
@@ -663,7 +663,7 @@ static void mntremove(struct chan *c)
        mntclunk(c, Tremove);
 }
 
-static int mntwstat(struct chan *c, uint8_t * dp, int n)
+static size_t mntwstat(struct chan *c, uint8_t *dp, size_t n)
 {
        ERRSTACK(1);
        struct mnt *m;
@@ -691,7 +691,7 @@ static int mntwstat(struct chan *c, uint8_t * dp, int n)
  * If the return a partial result, but more than one result,
  * we'll return a shorter read and the next offset will be aligned
  */
-static long mntread(struct chan *c, void *buf, long n, int64_t off)
+static size_t mntread(struct chan *c, void *buf, size_t n, off64_t off)
 {
        uint8_t *p, *e;
        int nc, cache, isdir, dirlen;
@@ -742,12 +742,12 @@ static long mntread(struct chan *c, void *buf, long n, int64_t off)
        return n;
 }
 
-static long mntwrite(struct chan *c, void *buf, long n, int64_t off)
+static size_t mntwrite(struct chan *c, void *buf, size_t n, off64_t off)
 {
        return mntrdwr(Twrite, c, buf, n, off);
 }
 
-long mntrdwr(int type, struct chan *c, void *buf, long n, int64_t off)
+size_t mntrdwr(int type, struct chan *c, void *buf, size_t n, off64_t off)
 {
        ERRSTACK(1);
        struct mnt *m;
index 347d7be..c9a82b9 100644 (file)
@@ -120,12 +120,13 @@ static struct chan *pciattach(char *spec)
        return devattach(devname(), spec);
 }
 
-struct walkqid *pciwalk(struct chan *c, struct chan *nc, char **name, int nname)
+struct walkqid *pciwalk(struct chan *c, struct chan *nc, char **name,
+                        unsigned int nname)
 {
        return devwalk(c, nc, name, nname, (struct dirtab *)0, 0, pcigen);
 }
 
-static int pcistat(struct chan *c, uint8_t *dp, int n)
+static size_t pcistat(struct chan *c, uint8_t *dp, size_t n)
 {
        return devstat(c, dp, n, (struct dirtab *)0, 0L, pcigen);
 }
@@ -144,7 +145,7 @@ static void pciclose(struct chan *_)
 {
 }
 
-static long pciread(struct chan *c, void *va, long n, int64_t offset)
+static size_t pciread(struct chan *c, void *va, size_t n, off64_t offset)
 {
        char buf[PCI_CONFIG_SZ], *ebuf, *w, *a;
        int i, tbdf, r;
@@ -207,7 +208,7 @@ static long pciread(struct chan *c, void *va, long n, int64_t offset)
        return n;
 }
 
-static long pciwrite(struct chan *c, void *va, long n, int64_t offset)
+static size_t pciwrite(struct chan *c, void *va, size_t n, off64_t offset)
 {
        uint8_t *a;
        int i, r, tbdf;
index 13f1910..d53a2c0 100644 (file)
@@ -190,7 +190,7 @@ pipegen(struct chan *c, char *unused,
 }
 
 static struct walkqid *pipewalk(struct chan *c, struct chan *nc, char **name,
-                                                               int nname)
+                                                               unsigned int nname)
 {
        struct walkqid *wq;
        Pipe *p;
@@ -215,7 +215,7 @@ static struct walkqid *pipewalk(struct chan *c, struct chan *nc, char **name,
        return wq;
 }
 
-static int pipestat(struct chan *c, uint8_t * db, int n)
+static size_t pipestat(struct chan *c, uint8_t *db, size_t n)
 {
        Pipe *p;
        struct dir dir;
@@ -343,7 +343,7 @@ static void pipeclose(struct chan *c)
        kref_put(&p->ref);
 }
 
-static long piperead(struct chan *c, void *va, long n, int64_t offset)
+static size_t piperead(struct chan *c, void *va, size_t n, off64_t offset)
 {
        Pipe *p;
 
@@ -371,7 +371,7 @@ static long piperead(struct chan *c, void *va, long n, int64_t offset)
        return -1;      /* not reached */
 }
 
-static struct block *pipebread(struct chan *c, long n, uint32_t offset)
+static struct block *pipebread(struct chan *c, size_t n, off64_t offset)
 {
        Pipe *p;
 
@@ -396,7 +396,7 @@ static struct block *pipebread(struct chan *c, long n, uint32_t offset)
 /*
  *  A write to a closed pipe causes an EPIPE error to be thrown.
  */
-static long pipewrite(struct chan *c, void *va, long n, int64_t ignored)
+static size_t pipewrite(struct chan *c, void *va, size_t n, off64_t ignored)
 {
        ERRSTACK(1);
        Pipe *p;
@@ -446,7 +446,7 @@ static long pipewrite(struct chan *c, void *va, long n, int64_t ignored)
        return n;
 }
 
-static long pipebwrite(struct chan *c, struct block *bp, uint32_t offset)
+static size_t pipebwrite(struct chan *c, struct block *bp, off64_t offset)
 {
        long n;
        Pipe *p;
@@ -478,7 +478,7 @@ static long pipebwrite(struct chan *c, struct block *bp, uint32_t offset)
        return n;
 }
 
-static int pipewstat(struct chan *c, uint8_t *dp, int n)
+static size_t pipewstat(struct chan *c, uint8_t *dp, size_t n)
 {
        ERRSTACK(2);
        struct dir *d;
index a494314..4672bb6 100644 (file)
@@ -360,12 +360,12 @@ static struct chan *procattach(char *spec)
 }
 
 static struct walkqid *procwalk(struct chan *c, struct chan *nc, char **name,
-                                                               int nname)
+                                                               unsigned int nname)
 {
        return devwalk(c, nc, name, nname, 0, 0, procgen);
 }
 
-static int procstat(struct chan *c, uint8_t * db, int n)
+static size_t procstat(struct chan *c, uint8_t *db, size_t n)
 {
        return devstat(c, db, n, 0, 0, procgen);
 }
@@ -651,7 +651,7 @@ static struct chan *procopen(struct chan *c, int omode)
        return tc;
 }
 
-static int procwstat(struct chan *c, uint8_t * db, int n)
+static size_t procwstat(struct chan *c, uint8_t *db, size_t n)
 {
        ERRSTACK(2);
        error(ENOSYS, ERROR_FIXME);
@@ -903,7 +903,7 @@ static int eventsavailable(void *)
 }
 #endif
 
-static long procread(struct chan *c, void *va, long n, int64_t off)
+static size_t procread(struct chan *c, void *va, size_t n, off64_t off)
 {
        ERRSTACK(1);
        struct proc *p;
@@ -1085,7 +1085,7 @@ static void mntscan(struct mntwalk *mw, struct proc *p)
        runlock(&pg->ns);
 }
 
-static long procwrite(struct chan *c, void *va, long n, int64_t off)
+static size_t procwrite(struct chan *c, void *va, size_t n, off64_t off)
 {
        ERRSTACK(2);
 
index b64ec06..d666ed7 100644 (file)
@@ -128,13 +128,13 @@ static struct chan *randomattach(char *spec)
 }
 
 static struct walkqid *randomwalk(struct chan *c, struct chan *nc, char **name,
-                                                               int nname)
+                                  unsigned int nname)
 {
        return devwalk(c, nc, name, nname, randomdir,
                       ARRAY_SIZE(randomdir), devgen);
 }
 
-static int randomstat(struct chan *c, uint8_t *dp, int n)
+static size_t randomstat(struct chan *c, uint8_t *dp, size_t n)
 {
        struct dir dir;
        struct dirtab *tab;
@@ -168,7 +168,7 @@ static void randomclose(struct chan *c)
 {
 }
 
-static long randomread(struct chan *c, void *va, long n, int64_t ignored)
+static size_t randomread(struct chan *c, void *va, size_t n, off64_t ignored)
 {
        switch (c->qid.path) {
                case Qdir:
@@ -187,7 +187,7 @@ static long randomread(struct chan *c, void *va, long n, int64_t ignored)
 /*
  *  A write to a closed random causes an ERANDOM error to be thrown.
  */
-static long randomwrite(struct chan *c, void *va, long n, int64_t ignored)
+static size_t randomwrite(struct chan *c, void *va, size_t n, off64_t ignored)
 {
        error(EPERM, "No use for writing random just yet");
        return -1;
@@ -199,12 +199,6 @@ static long randombwrite(struct chan *c, struct block *bp, uint32_t junk)
        return -1;
 }
 
-static int randomwstat(struct chan *c, uint8_t *dp, int n)
-{
-       error(EPERM, "No use for wstat random just yet");
-       return -1;
-}
-
 static int random_tapfd(struct chan *c, struct fd_tap *tap, int cmd)
 {
        /* We don't actually support HANGUP, but epoll implies it. */
@@ -242,7 +236,7 @@ struct dev randomdevtab __devtab = {
        .read = randomread,
        .write = randomwrite,
        .remove = devremove,
-       .wstat = randomwstat,
+       .wstat = devwstat,
        .power = devpower,
        .chaninfo = devchaninfo,
        .tapfd = random_tapfd,
index 7b4dd40..9dfc63a 100644 (file)
@@ -73,14 +73,14 @@ regressinit(void)
 {
 }
 
-static struct walkqid*
-regresswalk(struct chan *c, struct chan *nc, char **name, int nname)
+static struct walkqid *regresswalk(struct chan *c, struct chan *nc, char **name,
+                                   unsigned int nname)
 {
-       return devwalk(c, nc, name, nname, regresstab, ARRAY_SIZE(regresstab), devgen);
+       return devwalk(c, nc, name, nname, regresstab, ARRAY_SIZE(regresstab),
+                      devgen);
 }
 
-static int
-regressstat(struct chan *c, uint8_t *db, int n)
+static size_t regressstat(struct chan *c, uint8_t *db, size_t n)
 {
        if (regress.monitor)
                regresstab[Monitordataqid].length = qlen(regress.monitor);
@@ -108,8 +108,7 @@ regressclose(struct chan*unused)
 {
 }
 
-static long
-regressread(struct chan *c, void *va, long n, int64_t off)
+static size_t regressread(struct chan *c, void *va, size_t n, off64_t off)
 {
        uint64_t w, *bp;
        char *a, *ea;
@@ -143,8 +142,7 @@ regressread(struct chan *c, void *va, long n, int64_t off)
        return n;
 }
 
-static long
-regresswrite(struct chan *c, void *a, long n, int64_t unused)
+static size_t regresswrite(struct chan *c, void *a, size_t n, off64_t unused)
 {
        ERRSTACK(1);
        uintptr_t pc;
index 45ebc7f..09832bf 100644 (file)
@@ -310,7 +310,7 @@ static int rootgen(struct chan *c, char *name, struct dirtab *tab_unused,
 }
 
 static struct walkqid *rootwalk(struct chan *c, struct chan *nc, char **name,
-                                                               int nname)
+                                                               unsigned int nname)
 {
        return devwalk(c, nc, name, nname, NULL, 0, rootgen);
 }
@@ -318,10 +318,10 @@ static struct walkqid *rootwalk(struct chan *c, struct chan *nc, char **name,
 /* Instead of using devstat, we use our own.  This allows us to have stats on
  * directories.  devstat() just fakes it.  Note that gen cannot return a direct
  * gen for a directory, since that would break devdirread(). */
-static int rootstat(struct chan *c, uint8_t * dp, int n)
+static size_t rootstat(struct chan *c, uint8_t *dp, size_t n)
 {
        struct dir dir[1];
-       ssize_t ret;
+       size_t ret;
        struct dirtab *entry = &roottab[c->qid.path];
 
        /* TODO: this assumes eve is the user, which is what synthetic devices do.
@@ -373,7 +373,7 @@ static void rootclose(struct chan *c)
 {
 }
 
-static long rootread(struct chan *c, void *buf, long n, int64_t offset)
+static size_t rootread(struct chan *c, void *buf, size_t n, off64_t offset)
 {
        uint32_t p, len;
        uint8_t *data;
@@ -401,7 +401,7 @@ static long rootread(struct chan *c, void *buf, long n, int64_t offset)
  * kpagemalloc ... barret?
  *             we have kpage_alloc (gives a page) and kpage_alloc_addr (void*)
  */
-static long rootwrite(struct chan *c, void *a, long n, int64_t off)
+static size_t rootwrite(struct chan *c, void *a, size_t n, off64_t off)
 {
        struct rootdata *rd = &rootdata[c->qid.path];
        struct dirtab *r = &roottab[c->qid.path];
@@ -425,7 +425,7 @@ static long rootwrite(struct chan *c, void *a, long n, int64_t off)
        return n;
 }
 
-static int rootwstat(struct chan *c, uint8_t *m_buf, int m_buf_sz)
+static size_t rootwstat(struct chan *c, uint8_t *m_buf, size_t m_buf_sz)
 {
        struct dirtab *file = &roottab[c->qid.path];
        struct dir *dir;
index a67b7b7..776348b 100644 (file)
@@ -674,12 +674,12 @@ static struct chan *sdattach(char *spec)
 }
 
 static struct walkqid *sdwalk(struct chan *c, struct chan *nc, char **name,
-                              int nname)
+                              unsigned int nname)
 {
        return devwalk(c, nc, name, nname, NULL, 0, sdgen);
 }
 
-static int32_t sdstat(struct chan *c, uint8_t *db, int32_t n)
+static size_t sdstat(struct chan *c, uint8_t *db, size_t n)
 {
        return devstat(c, db, n, NULL, 0, sdgen);
 }
@@ -758,8 +758,8 @@ static void sdclose(struct chan *c)
        }
 }
 
-static int32_t sdbio(struct chan *c, int write, char *a, int32_t len,
-                     int64_t off)
+static size_t sdbio(struct chan *c, int write, char *a, size_t len,
+                    off64_t off)
 {
        ERRSTACK(2);
        int nchange;
@@ -768,7 +768,7 @@ static int32_t sdbio(struct chan *c, int write, char *a, int32_t len,
        struct sdunit *unit;
        struct sdev *sdev;
        int64_t bno;
-       int32_t l, max, nb, offset;
+       size_t l, max, nb, offset;
 
        sdev = sdgetdev(DEV(c->qid));
        if (sdev == NULL) {
@@ -892,7 +892,7 @@ static int32_t sdbio(struct chan *c, int write, char *a, int32_t len,
        return len;
 }
 
-static int32_t sdrio(struct sdreq *r, void *a, int32_t n)
+static size_t sdrio(struct sdreq *r, void *a, size_t n)
 {
        ERRSTACK(1);
        void *data;
@@ -1118,14 +1118,14 @@ int sdfakescsi(struct sdreq *r, void *info, int ilen)
        }
 }
 
-static long sdread(struct chan *c, void *a, long n, int64_t off)
+static size_t sdread(struct chan *c, void *a, size_t n, off64_t off)
 {
        ERRSTACK(1);
        char *p, *e, *buf;
        struct sdpart *pp;
        struct sdunit *unit;
        struct sdev *sdev;
-       int32_t offset;
+       off64_t offset;
        int i, l, mm, status;
 
        offset = off;
@@ -1206,19 +1206,19 @@ static long sdread(struct chan *c, void *a, long n, int64_t off)
                }
                if (unit->state == Rawdata) {
                        unit->state = Rawstatus;
-                       i = sdrio(unit->req, a, n);
+                       n = sdrio(unit->req, a, n);
                } else if (unit->state == Rawstatus) {
                        status = unit->req->status;
                        unit->state = Rawcmd;
                        kfree(unit->req);
                        unit->req = NULL;
-                       i = readnum(0, a, n, status, NUMSIZE);
+                       n = readnum(0, a, n, status, NUMSIZE);
                } else
-                       i = 0;
+                       n = 0;
                qunlock(&unit->raw);
                kref_put(&sdev->r);
                poperror();
-               return i;
+               return n;
 
        case Qpart:
                return sdbio(c, 0, a, n, off);
@@ -1227,7 +1227,7 @@ static long sdread(struct chan *c, void *a, long n, int64_t off)
 
 static void legacytopctl(struct cmdbuf *);
 
-static long sdwrite(struct chan *c, void *a, long n, int64_t off)
+static size_t sdwrite(struct chan *c, void *a, size_t n, off64_t off)
 {
        ERRSTACK(2);
        char *f0;
@@ -1399,7 +1399,7 @@ static long sdwrite(struct chan *c, void *a, long n, int64_t off)
        return n;
 }
 
-static int32_t sdwstat(struct chan *c, uint8_t *dp, int32_t n)
+static size_t sdwstat(struct chan *c, uint8_t *dp, size_t n)
 {
        ERRSTACK(2);
        struct dir *d;
index 1db03fd..1338588 100644 (file)
@@ -153,12 +153,12 @@ static struct chan *srvattach(char *spec)
 }
 
 static struct walkqid *srvwalk(struct chan *c, struct chan *nc, char **name,
-                                                          int nname)
+                                                          unsigned int nname)
 {
        return devwalk(c, nc, name, nname, 0, 0, srvgen);
 }
 
-static int srvstat(struct chan *c, uint8_t * db, int n)
+static size_t srvstat(struct chan *c, uint8_t *db, size_t n)
 {
        return devstat(c, db, n, 0, 0, srvgen);
 }
@@ -244,12 +244,6 @@ static void srvcreate(struct chan *c, char *name, int omode, uint32_t perm,
        atomic_inc(&nr_srvs);
 }
 
-static int srvwstat(struct chan *c, uint8_t * dp, int n)
-{
-       error(ENOSYS, ERROR_FIXME);
-       return -1;
-}
-
 static void srvremove(struct chan *c)
 {
        struct srvfile *srv_i, *temp;
@@ -281,12 +275,12 @@ static void srvclose(struct chan *c)
 /* N.B. srvopen gives the chan back. The only 'reading' we do
  * in srv is of the top level directory.
  */
-static long srvread(struct chan *c, void *va, long count, int64_t offset)
+static size_t srvread(struct chan *c, void *va, size_t count, off64_t offset)
 {
        return devdirread(c, va, count, 0, 0, srvgen);
 }
 
-static long srvwrite(struct chan *c, void *va, long count, int64_t offset)
+static size_t srvwrite(struct chan *c, void *va, size_t count, off64_t offset)
 {
        ERRSTACK(2);
        struct srvfile *srv;
@@ -344,7 +338,7 @@ struct dev srvdevtab __devtab = {
        .write = srvwrite,
        .bwrite = devbwrite,
        .remove = srvremove,
-       .wstat = srvwstat,
+       .wstat = devwstat,
        .power = devpower,
        .chaninfo = devchaninfo,
 };
index 3de2549..1e4a375 100644 (file)
@@ -105,7 +105,7 @@ static struct chan *vars_attach(char *spec)
 }
 
 static struct walkqid *vars_walk(struct chan *c, struct chan *nc, char **name,
-                                                                int nname)
+                                                                unsigned int nname)
 {
        ERRSTACK(1);
        struct walkqid *ret;
@@ -121,10 +121,10 @@ static struct walkqid *vars_walk(struct chan *c, struct chan *nc, char **name,
        return ret;
 }
 
-static int vars_stat(struct chan *c, uint8_t *db, int n)
+static size_t vars_stat(struct chan *c, uint8_t *db, size_t n)
 {
        ERRSTACK(1);
-       int ret;
+       size_t ret;
 
        qlock(&vars_lock);
        if (waserror()) {
@@ -291,7 +291,7 @@ static const char *get_integer_fmt(char data_fmt, char data_size)
        return 0;
 }
 
-static long vars_read(struct chan *c, void *ubuf, long n, int64_t offset)
+static size_t vars_read(struct chan *c, void *ubuf, size_t n, off64_t offset)
 {
        ERRSTACK(1);
        char tmp[128];  /* big enough for any number and most strings */
@@ -299,7 +299,7 @@ static long vars_read(struct chan *c, void *ubuf, long n, int64_t offset)
        char data_size, data_fmt, *fmt;
        const char *fmt_int;
        bool is_signed = FALSE;
-       long ret;
+       size_t ret;
 
        qlock(&vars_lock);
        if (waserror()) {
@@ -386,7 +386,7 @@ static long vars_read(struct chan *c, void *ubuf, long n, int64_t offset)
        return ret;
 }
 
-static long vars_write(struct chan *c, void *ubuf, long n, int64_t offset)
+static size_t vars_write(struct chan *c, void *ubuf, size_t n, off64_t offset)
 {
        error(EFAIL, "Can't write to a #%s file", devname());
 }
index 400b845..f475a91 100644 (file)
@@ -94,12 +94,12 @@ static void ver_shutdown(void)
 }
 
 static struct walkqid *ver_walk(struct chan *c, struct chan *nc, char **name,
-                                                                int nname)
+                                                               unsigned int nname)
 {
        return devwalk(c, nc, name, nname, vertab, ARRAY_SIZE(vertab), devgen);
 }
 
-static int ver_stat(struct chan *c, uint8_t *db, int n)
+static size_t ver_stat(struct chan *c, uint8_t *db, size_t n)
 {
        return devstat(c, db, n, vertab, ARRAY_SIZE(vertab), devgen);
 }
@@ -143,7 +143,7 @@ static ssize_t read_buildid(void *va, long n, off64_t off)
        return readmem(off, va, n, build_id, sizeof(build_id));
 }
 
-static long ver_read(struct chan *c, void *va, long n, int64_t off)
+static size_t ver_read(struct chan *c, void *va, size_t n, off64_t off)
 {
        switch ((int) c->qid.path) {
        case Kverdirqid:
@@ -175,7 +175,7 @@ static long ver_read(struct chan *c, void *va, long n, int64_t off)
        return 0;
 }
 
-static long ver_write(struct chan *c, void *a, long n, int64_t unused)
+static size_t ver_write(struct chan *c, void *a, size_t n, off64_t unused)
 {
        error(ENOTSUP, ERROR_FIXME);
        return -1;
index b92ee31..153f661 100644 (file)
@@ -499,25 +499,26 @@ struct cname {
 struct dev {
        char *name;
 
-       void (*reset) (void);
-       void (*init) (void);
-       void (*shutdown) (void);
-       struct chan *(*attach) (char *muxattach);
-       struct walkqid *(*walk) (struct chan *, struct chan *, char **name, int);
-       int (*stat) (struct chan *, uint8_t *, int);
-       struct chan *(*open) (struct chan *, int);
+       void (*reset)(void);
+       void (*init)(void);
+       void (*shutdown)(void);
+       struct chan *(*attach)(char *muxattach);
+       struct walkqid *(*walk)(struct chan *, struct chan *, char **name,
+                               unsigned int);
+       size_t (*stat)(struct chan *, uint8_t *, size_t);
+       struct chan *(*open)(struct chan *, int);
        void (*create)(struct chan *, char *, int, uint32_t, char *);
-       void (*close) (struct chan *);
-       long (*read) (struct chan *, void *, long, int64_t);
-       struct block *(*bread) (struct chan *, long, uint32_t);
-       long (*write) (struct chan *, void *, long, int64_t);
-       long (*bwrite) (struct chan *, struct block *, uint32_t);
-       void (*remove) (struct chan *);
-       int (*wstat) (struct chan *, uint8_t * unused_uint8_p_t, int);
-       void (*power) (int);            /* power mgt: power(1) → on, power (0) → off */
+       void (*close)(struct chan *);
+       size_t (*read)(struct chan *, void *, size_t, off64_t);
+       struct block *(*bread)(struct chan *, size_t, off64_t);
+       size_t (*write)(struct chan *, void *, size_t, off64_t);
+       size_t (*bwrite)(struct chan *, struct block *, off64_t);
+       void (*remove)(struct chan *);
+       size_t (*wstat)(struct chan *, uint8_t *, size_t);
+       void (*power)(int);             /* power mgt: power(1) → on, power (0) → off */
 //  int (*config)( int unused_int, char *unused_char_p_t, DevConf*);
-       char *(*chaninfo) (struct chan *, char *, size_t);
-       int (*tapfd) (struct chan *, struct fd_tap *, int);
+       char *(*chaninfo)(struct chan *, char *, size_t);
+       int (*tapfd)(struct chan *, struct fd_tap *, int);
        int (*chan_ctl)(struct chan *, int);
        /* we need to be aligned to 64 bytes for the linker tables. */
 } __attribute__ ((aligned(64)));
@@ -753,8 +754,8 @@ int cursoron(int);
 void cursoroff(int);
 void cwrite(struct chan *, uint8_t * unused_uint8_p_t, int unused_int, int64_t);
 struct chan *devattach(const char *name, char *spec);
-struct block *devbread(struct chan *, long, uint32_t);
-long devbwrite(struct chan *, struct block *, uint32_t);
+struct block *devbread(struct chan *, size_t, off64_t);
+size_t devbwrite(struct chan *, struct block *, off64_t);
 struct chan *devclone(struct chan *);
 void devcreate(struct chan *, char *name, int mode, uint32_t perm, char *ext);
 void devdir(struct chan *, struct qid, char *, int64_t, char *, long,
@@ -772,12 +773,12 @@ void devremove(struct chan *);
 void devreset(void);
 void devshutdown(void);
 size_t dev_make_stat(struct chan *c, struct dir *dir, uint8_t *dp, size_t n);
-int devstat(struct chan *, uint8_t * unused_uint8_p_t, int unused_int,
-                       struct dirtab *, int unused_int2, Devgen *);
+size_t devstat(struct chan *, uint8_t *db, size_t n, struct dirtab *,
+               int ntab, Devgen *);
 struct walkqid *devwalk(struct chan *,
                                                struct chan *, char **unused_char_pp_t, int unused_int,
                                                struct dirtab *, int unused_intw, Devgen *);
-int devwstat(struct chan *, uint8_t * unused_uint8_p_t, int);
+size_t devwstat(struct chan *, uint8_t *, size_t);
 char *devchaninfo(struct chan *chan, char *ret, size_t ret_l);
 void disinit(void *);
 void disfault(void *, char *unused_char_p_t);
index 6053e8a..1014b01 100644 (file)
@@ -413,7 +413,7 @@ static struct chan *ipattach(char *spec)
 }
 
 static struct walkqid *ipwalk(struct chan *c, struct chan *nc, char **name,
-                                                         int nname)
+                                                         unsigned int nname)
 {
        struct IPaux *a = c->aux;
        struct walkqid *w;
@@ -424,7 +424,7 @@ static struct walkqid *ipwalk(struct chan *c, struct chan *nc, char **name,
        return w;
 }
 
-static int ipstat(struct chan *c, uint8_t * db, int n)
+static size_t ipstat(struct chan *c, uint8_t *db, size_t n)
 {
        return devstat(c, db, n, NULL, 0, ipgen);
 }
@@ -615,7 +615,7 @@ static struct chan *ipopen(struct chan *c, int omode)
        return c;
 }
 
-static int ipwstat(struct chan *c, uint8_t * dp, int n)
+static size_t ipwstat(struct chan *c, uint8_t *dp, size_t n)
 {
        ERRSTACK(2);
        struct dir *d;
@@ -786,7 +786,7 @@ enum {
        Statelen = 32 * 1024,
 };
 
-static long ipread(struct chan *ch, void *a, long n, int64_t off)
+static size_t ipread(struct chan *ch, void *a, size_t n, off64_t off)
 {
        struct conv *c;
        struct Proto *x;
@@ -884,7 +884,7 @@ static long ipread(struct chan *ch, void *a, long n, int64_t off)
        }
 }
 
-static struct block *ipbread(struct chan *ch, long n, uint32_t offset)
+static struct block *ipbread(struct chan *ch, size_t n, off64_t offset)
 {
        struct conv *c;
 
@@ -1399,7 +1399,7 @@ static void autobind(struct conv *cv)
        kfree(cb);
 }
 
-static long ipwrite(struct chan *ch, void *v, long n, int64_t off)
+static size_t ipwrite(struct chan *ch, void *v, size_t n, off64_t off)
 {
        ERRSTACK(1);
        struct conv *c;
@@ -1499,10 +1499,10 @@ static long ipwrite(struct chan *ch, void *v, long n, int64_t off)
        return n;
 }
 
-static long ipbwrite(struct chan *ch, struct block *bp, uint32_t offset)
+static size_t ipbwrite(struct chan *ch, struct block *bp, off64_t offset)
 {
        struct conv *c;
-       int n;
+       size_t n;
 
        switch (TYPE(ch->qid)) {
                case Qdata:
index 50cab9b..5706023 100644 (file)
@@ -324,9 +324,8 @@ size_t dev_make_stat(struct chan *c, struct dir *dir, uint8_t *dp, size_t n)
        return n;
 }
 
-int
-devstat(struct chan *c, uint8_t * db, int n,
-               struct dirtab *tab, int ntab, Devgen * gen)
+size_t devstat(struct chan *c, uint8_t *db, size_t n, struct dirtab *tab,
+               int ntab, Devgen *gen)
 {
        int i;
        struct dir dir;
@@ -451,7 +450,7 @@ void devcreate(struct chan *c, char *unused_char_p_t, int unused_int,
        error(EPERM, ERROR_FIXME);
 }
 
-struct block *devbread(struct chan *c, long n, uint32_t offset)
+struct block *devbread(struct chan *c, size_t n, off64_t offset)
 {
        ERRSTACK(1);
        struct block *bp;
@@ -468,7 +467,7 @@ struct block *devbread(struct chan *c, long n, uint32_t offset)
        return bp;
 }
 
-long devbwrite(struct chan *c, struct block *bp, uint32_t offset)
+size_t devbwrite(struct chan *c, struct block *bp, off64_t offset)
 {
        ERRSTACK(1);
        long n;
@@ -489,7 +488,7 @@ void devremove(struct chan *c)
        error(EPERM, ERROR_FIXME);
 }
 
-int devwstat(struct chan *c, uint8_t * unused_uint8_p_t, int i)
+size_t devwstat(struct chan *c, uint8_t *unused_uint8_p_t, size_t i)
 {
        error(EPERM, ERROR_FIXME);
        return 0;