1 cfa37a7b 2004-04-10 devnull .TH 9PCMDBUF 3
3 cfa37a7b 2004-04-10 devnull Cmdbuf, parsecmd, respondcmderror, lookupcmd \- control message parsing
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
7 cfa37a7b 2004-04-10 devnull #include <u.h>
8 cfa37a7b 2004-04-10 devnull #include <libc.h>
9 cfa37a7b 2004-04-10 devnull #include <fcall.h>
10 cfa37a7b 2004-04-10 devnull #include <thread.h>
11 cfa37a7b 2004-04-10 devnull #include <9p.h>
16 cfa37a7b 2004-04-10 devnull .ta \w'\fL1234'u +\w'\fL12345678'u
17 cfa37a7b 2004-04-10 devnull typedef struct Cmdbuf
19 cfa37a7b 2004-04-10 devnull char *buf;
20 cfa37a7b 2004-04-10 devnull char **f;
22 cfa37a7b 2004-04-10 devnull } Cmdbuf;
24 cfa37a7b 2004-04-10 devnull typedef struct Cmdtab
26 cfa37a7b 2004-04-10 devnull int index;
27 cfa37a7b 2004-04-10 devnull char *cmd;
28 cfa37a7b 2004-04-10 devnull int narg;
31 cfa37a7b 2004-04-10 devnull Cmdbuf *parsecmd(char *p, int n)
32 cfa37a7b 2004-04-10 devnull Cmdtab *lookupcmd(Cmdbuf *cb, Cmdtab *tab, int ntab)
33 cfa37a7b 2004-04-10 devnull void respondcmderror(Req *r, Cmdbuf *cb, char *fmt, ...)
35 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
36 cfa37a7b 2004-04-10 devnull These data structures and functions provide parsing of textual control messages.
38 cfa37a7b 2004-04-10 devnull .I Parsecmd
39 cfa37a7b 2004-04-10 devnull treats the
43 cfa37a7b 2004-04-10 devnull (which need not be NUL-terminated) as a UTF string and splits it
45 bf8a59fa 2004-04-11 devnull .IR tokenize (3).
46 cfa37a7b 2004-04-10 devnull It returns a
47 cfa37a7b 2004-04-10 devnull .B Cmdbuf
48 cfa37a7b 2004-04-10 devnull structure holding pointers to each field in the message.
50 cfa37a7b 2004-04-10 devnull .I Lookupcmd
51 cfa37a7b 2004-04-10 devnull walks through the array
52 cfa37a7b 2004-04-10 devnull .IR ctab ,
53 cfa37a7b 2004-04-10 devnull which has
56 cfa37a7b 2004-04-10 devnull looking for the first
57 cfa37a7b 2004-04-10 devnull .B Cmdtab
58 cfa37a7b 2004-04-10 devnull that matches the parsed command.
59 cfa37a7b 2004-04-10 devnull (If the parsed command is empty,
60 cfa37a7b 2004-04-10 devnull .I lookupcmd
61 cfa37a7b 2004-04-10 devnull returns nil immediately.)
63 cfa37a7b 2004-04-10 devnull .B Cmdtab
64 cfa37a7b 2004-04-10 devnull matches the command if
66 cfa37a7b 2004-04-10 devnull is equal to
67 cfa37a7b 2004-04-10 devnull .IB cb -> f [0]
72 cfa37a7b 2004-04-10 devnull Once a matching
73 cfa37a7b 2004-04-10 devnull .B Cmdtab
74 cfa37a7b 2004-04-10 devnull has been found, if
76 cfa37a7b 2004-04-10 devnull is not zero, then the parsed command
77 cfa37a7b 2004-04-10 devnull must have exactly
79 cfa37a7b 2004-04-10 devnull fields (including the command string itself).
80 cfa37a7b 2004-04-10 devnull If the command has the wrong number of arguments,
81 cfa37a7b 2004-04-10 devnull .I lookupcmd
82 cfa37a7b 2004-04-10 devnull returns nil.
83 cfa37a7b 2004-04-10 devnull Otherwise, it returns a pointer to the
84 cfa37a7b 2004-04-10 devnull .B Cmdtab
87 cfa37a7b 2004-04-10 devnull .I lookupcmd
88 cfa37a7b 2004-04-10 devnull does not find a matching command at all,
89 cfa37a7b 2004-04-10 devnull it returns nil.
91 cfa37a7b 2004-04-10 devnull .I lookupcmd
92 cfa37a7b 2004-04-10 devnull returns nil, it sets the system error string.
94 cfa37a7b 2004-04-10 devnull .I Respondcmderror
95 cfa37a7b 2004-04-10 devnull resoponds to request
97 cfa37a7b 2004-04-10 devnull with an error of the form
98 cfa37a7b 2004-04-10 devnull `\fIfmt\fB:\fI cmd\fR,'
101 cfa37a7b 2004-04-10 devnull is the formatted string and
103 cfa37a7b 2004-04-10 devnull is a reconstruction of the parsed command.
105 cfa37a7b 2004-04-10 devnull is often simply
106 cfa37a7b 2004-04-10 devnull .B "%r" .
107 cfa37a7b 2004-04-10 devnull .SH EXAMPLES
108 cfa37a7b 2004-04-10 devnull This interface is not used in any distributed 9P servers.
109 cfa37a7b 2004-04-10 devnull It was lifted from the Plan 9 kernel.
110 cfa37a7b 2004-04-10 devnull Almost any kernel driver
111 b5fdffee 2004-04-19 devnull .RB ( /usr/local/plan9/src/9/*/dev*.c )
112 cfa37a7b 2004-04-10 devnull is a good example.
113 cfa37a7b 2004-04-10 devnull .SH SOURCE
114 b5fdffee 2004-04-19 devnull .B /usr/local/plan9/src/lib9p/parse.c
115 cfa37a7b 2004-04-10 devnull .SH SEE ALSO
116 bf8a59fa 2004-04-11 devnull .IR 9p (3)