Print. Add printing for qids, cnams, and chans
authorRonald G. Minnich <rminnich@google.com>
Fri, 25 Jul 2014 19:17:35 +0000 (19:17 +0000)
committerRonald G. Minnich <rminnich@google.com>
Fri, 25 Jul 2014 19:17:35 +0000 (19:17 +0000)
We don't have standard formatted prints for qids, chans, and cnames.
Add printqid, printcname, and printchan.
Set up such that %C will print a chan and %Q will print a qid.
What happens when we run out? We shift to utf-8 of course.
I can't wait to use the infinity symbol format!
You only think I'm joking.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
kern/include/ns.h
kern/src/net/eipconv.c
kern/src/printfmt.c

index fdfba12..955129a 100644 (file)
@@ -243,6 +243,7 @@ enum {
        Tmax,
 };
 
+void init_empty_dir(struct dir *d);
 unsigned int convM2S(uint8_t * unused_uint8_p_t, unsigned int unused_int,
                                         struct fcall *);
 unsigned int convS2M(struct fcall *, uint8_t * unused_uint8_p_t, unsigned int);
@@ -300,6 +301,7 @@ enum {
        Amount,                                         /* to be mounted or mounted upon */
        Acreate,                                        /* is to be created */
        Aremove,                                        /* will be removed by caller */
+       Acreatechan,                                    /* return a chan for a create request. for sysrename. */
 
        COPEN = 0x0001,                         /* for i/o */
        CMSG = 0x0002,  /* the message channel for a mount */
@@ -1023,6 +1025,11 @@ int fd_setfl(int fd, int flags);
 /* kern/drivers/dev/srv.c */
 char *srvname(struct chan *c);
 
+/* kern/src/eipconv.c. Put them here or face real include hell. */
+void printqid(void (*putch) (int, void **), void **putdat, struct qid *q);
+void printcname(void (*putch) (int, void **), void **putdat, struct cname *c);
+void printchan(void (*putch) (int, void **), void **putdat, struct chan *c);
+
 static inline int abs(int a)
 {
        if (a < 0)
index 5057ff9..8be05bc 100644 (file)
@@ -106,6 +106,54 @@ void printipmask(void (*putch) (int, void **), void **putdat, uint8_t * ip)
        printfmt(putch, putdat, "/%d", n);
 }
 
+void printqid(void (*putch) (int, void **), void **putdat, struct qid *q)
+{
+       printfmt(putch, putdat, "{path:%p,type:%02x,vers:%p}",
+                q->path, q->type, q->vers);
+
+}
+
+void printcname(void (*putch) (int, void **), void **putdat, struct cname *c)
+{
+       printfmt(putch, putdat, "{ref %d, alen %d, len %d, s %s}",
+                kref_refcnt(&c->ref), c->alen, c->len, c->s);
+}
+
+void printchan(void (*putch) (int, void **), void **putdat, struct chan *c)
+{
+
+       printfmt(putch, putdat, "%slocked ", spin_locked(&c->lock) ? "":"un");
+       printfmt(putch, putdat, "refs %p ", kref_refcnt(&c->ref));
+//     printfmt(putch, putdat, "%p ", struct chan *next,
+//     printfmt(putch, putdat, "%p ", struct chan *link,
+       printfmt(putch, putdat, "off %p ", c->offset);
+       printfmt(putch, putdat, "type %p ", c->type);
+       printfmt(putch, putdat, "dev %p ", c->dev);
+       printfmt(putch, putdat, "mode %p ", c->mode);
+       printfmt(putch, putdat, "flag %p ", c->flag);
+       printfmt(putch, putdat, "qid");
+       printqid(putch, putdat, &c->qid);
+       printfmt(putch, putdat, " fid %p ", c->fid);
+       printfmt(putch, putdat, "iounit %p ", c->iounit);
+       printfmt(putch, putdat, "umh %p ", c->umh);
+       printfmt(putch, putdat, "umc %p ", c->umc);
+//      printfmt(putch, putdat, "%p ", qlock_t umqlock,
+       printfmt(putch, putdat, "uri %p ", c->uri);
+       printfmt(putch, putdat, "dri %p ", c->dri);
+       printfmt(putch, putdat, "mountid %p ", c->mountid);
+       printfmt(putch, putdat, "mntcache %p ", c->mcp);
+       printfmt(putch, putdat, "mnt %p ", c->mux);
+       printfmt(putch, putdat, "aux %p ", c->aux);
+       printfmt(putch, putdat, "mchan %p ", c->mchan);
+       printfmt(putch, putdat, "mqid %p ");
+       printqid(putch, putdat, &c->mqid);
+       printfmt(putch, putdat, " cname ");
+       printcname(putch, putdat, c->name);
+       printfmt(putch, putdat, " ateof %p ", c->ateof);
+       printfmt(putch, putdat, "buf %p ", c->buf);
+       printfmt(putch, putdat, "bufused %p ", c->bufused);
+}
+
 static uint8_t testvec[11][16] = {
        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 1, 3, 4, 5,},
        {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
index 4badcd7..fc778f5 100644 (file)
@@ -135,6 +135,11 @@ void vprintfmt(void (*putch)(int, void**), void **putdat, const char *fmt, va_li
                        lflag++;
                        goto reswitch;
 
+               // chan
+               case 'C':
+                       printchan(putch, putdat, va_arg(ap, void*));
+                       break;
+
                // character
                case 'c':
                        putch(va_arg(ap, int), putdat);
@@ -247,6 +252,10 @@ void vprintfmt(void (*putch)(int, void**), void **putdat, const char *fmt, va_li
                        base = 16;
                        goto number;
 
+               // qid
+               case 'Q':
+                       printqid(putch, putdat, va_arg(ap, void*));
+                       break;
                number:
                        printnum(putch, putdat, num, base, width, padc);
                        break;