Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ (2) — Plan9 4th Edition

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

9p(2)

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;
intnf;
} Cmdbuf;
 typedef struct Cmdtab
{
intindex;
char∗cmd;
intnarg;
};
 Cmdbuf∗parsecmd(char ∗p, int n)
Cmdtab∗lookupcmd(Cmdbuf ∗cb, Cmdtab ∗tab, int ntab)
voidrespondcmderror(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(2). It returns a ­Cmdbuf structure holding pointers to each field in the message. 

­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)

Plan 9  —  February 04, 2003

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026