plan9fox/sys/src/cmd/plumb/plumber.h
qwx e279699344 plumber: remove $plumbsrv, add optional srvname, usage check
Plumber both posts a service to /srv and sets a $plumbsrv environment
variable.  Our libplumb no longer uses $plumbsrv and nothing else
does.  It's a silly hack;  rc doesn't update /env immediately, and
scripts, which for instance set up subrios, cannot rely on it to
clean up the plumber at the end.

Instead, add the option to specify a srvname, actually check for some
common errors and print a usage string.

Thanks to Ori for input and a preliminary patch.
2021-09-10 21:03:47 +00:00

96 lines
1.5 KiB
C

typedef struct Exec Exec;
typedef struct Rule Rule;
typedef struct Ruleset Ruleset;
/*
* Object
*/
enum
{
OArg,
OAttr,
OData,
ODst,
OPlumb,
OSrc,
OType,
OWdir,
};
/*
* Verbs
*/
enum
{
VAdd, /* apply to OAttr only */
VClient,
VDelete, /* apply to OAttr only */
VIs,
VIsdir,
VIsfile,
VMatches,
VSet,
VStart,
VTo,
};
struct Rule
{
int obj;
int verb;
char *arg; /* unparsed string of all arguments */
char *qarg; /* quote-processed arg string */
Reprog *regex;
};
struct Ruleset
{
int npat;
int nact;
Rule **pat;
Rule **act;
char *port;
};
struct Exec
{
Plumbmsg *msg;
char *match[10];
int p0; /* begin and end of match */
int p1;
int clearclick; /* click was expanded; remove attribute */
int setdata; /* data should be set to $0 */
int holdforclient; /* exec'ing client; keep message until port is opened */
/* values of $variables */
char *file;
char *dir;
};
void parseerror(char*, ...);
void error(char*, ...);
void* emalloc(long);
void* erealloc(void*, long);
char* estrdup(char*);
Ruleset** readrules(char*, int);
void startfsys(void);
Exec* matchruleset(Plumbmsg*, Ruleset*);
void freeexec(Exec*);
char* startup(Ruleset*, Exec*);
char* printrules(void);
void addport(char*);
char* writerules(char*, int);
char* expand(Exec*, char*, char**);
void makeports(Ruleset*[]);
void freeruleset(Ruleset*);
void printinputstack(void);
int popinput(void);
Ruleset **rules;
char *user;
char *home;
jmp_buf parsejmp;
char *lasterror;
char **ports;
int nports;
char *srvname;