glenda.party
term% ls -F
term% cat index.txt
9PCMDBUF(2)                   System Calls Manual                  9PCMDBUF(2)



NAME
       Cmdbuf, parsecmd, respondcmderror, lookupcmd - control message parsing

SYNOPSIS
       #include <u.h>
       #include <libc.h>
       #include <fcall.h>
       #include <thread.h>
       #include <9p.h>

       typedef struct Cmdbuf
       {
           char    *buf;
           char    **f;
           int     nf;
       } Cmdbuf;

       typedef struct Cmdtab
       {
           int     index;
           char    *cmd;
           int     narg;
       };

       Cmdbuf      *parsecmd(char *p, int n)
       Cmdtab      *lookupcmd(Cmdbuf *cb, Cmdtab *tab, int ntab)
       void        respondcmderror(Req *r, Cmdbuf *cb, char *fmt, ...)

DESCRIPTION
       These  data structures and functions provide parsing of textual control
       messages.

       Parsecmd treats the n bytes at p (which need not be NUL-terminated)  as
       a  UTF  string and splits it using tokenize (see getfields(2)).  It re‐
       turns a Cmdbuf structure holding pointers to each field in the message.
       It  is the caller's responsibility to free this structure when it is no
       longer needed.

       Lookupcmd walks through the array ctab, which has ntab entries, looking
       for  the  first Cmdtab that matches the parsed command.  (If the parsed
       command is empty, lookupcmd returns nil immediately.)  A Cmdtab matches
       the  command  if  cmd is equal to cb->f[0] or if cmd is Once a matching
       Cmdtab has been found, if narg is not zero,  then  the  parsed  command
       must  have  exactly  narg fields (including the command string itself).
       If the command has the wrong number  of  arguments,  lookupcmd  returns
       nil.   Otherwise,  it  returns  a  pointer  to  the  Cmdtab  entry.  If
       lookupcmd does not find a matching command  at  all,  it  returns  nil.
       Whenever lookupcmd returns nil, it sets the system error string.

       Respondcmderror  resoponds to request r with an error of the form `fmt:
       cmd,' where fmt is the formatted string and cmd is a reconstruction  of
       the parsed command.  Fmt is often simply %r .

EXAMPLES
       This  interface  is  not  used  in  any distributed 9P servers.  It was
       lifted  from  the  Plan   9   kernel.    Almost   any   kernel   driver
       (/sys/src/9/*/dev*.c) is a good example.

SOURCE
       /sys/src/lib9p/parse.c

SEE ALSO
       9p(2)



                                                                   9PCMDBUF(2)