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)