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.
This commit is contained in:
parent
d1986d8c0e
commit
e279699344
4 changed files with 31 additions and 6 deletions
|
@ -6,6 +6,9 @@ plumber \- file system for interprocess messaging
|
|||
[
|
||||
.B -p
|
||||
.I plumbing
|
||||
] [
|
||||
.B -s
|
||||
.I srvname
|
||||
]
|
||||
.SH DESCRIPTION
|
||||
The
|
||||
|
@ -31,11 +34,17 @@ and
|
|||
and a set of output
|
||||
.I ports
|
||||
for dispatching messages to applications.
|
||||
.PP
|
||||
The service is also published as a
|
||||
.IR srv (4)
|
||||
file, named in
|
||||
.BR $plumbsrv ,
|
||||
file,
|
||||
.IR srvname ,
|
||||
for mounting elsewhere.
|
||||
By default, its name is a dot-separated concatenation
|
||||
of the program's name and a process id.
|
||||
A different one can be specified via the
|
||||
.B -s
|
||||
option.
|
||||
.PP
|
||||
Programs use
|
||||
.B write
|
||||
|
|
|
@ -218,9 +218,10 @@ startfsys(void)
|
|||
clock = getclock();
|
||||
if(cexecpipe(&mntfd, &srvfd) < 0)
|
||||
error("can't create pipe: %r");
|
||||
sprint(srvfile, "/srv/plumb.%s.%d", user, getpid());
|
||||
if(putenv("plumbsrv", srvfile) < 0)
|
||||
error("can't write $plumbsrv: %r");
|
||||
if(srvname == nil)
|
||||
snprint(srvfile, sizeof(srvfile), "/srv/plumb.%s.%d", user, getpid());
|
||||
else
|
||||
snprint(srvfile, sizeof(srvfile), "/srv/%s", srvname);
|
||||
fd = create(srvfile, OWRITE|OCEXEC|ORCLOSE, 0600);
|
||||
if(fd < 0)
|
||||
error("can't create /srv file: %r");
|
||||
|
|
|
@ -15,6 +15,7 @@ Ruleset **rules;
|
|||
int printerrors=1;
|
||||
jmp_buf parsejmp;
|
||||
char *lasterror;
|
||||
char *srvname;
|
||||
|
||||
void
|
||||
makeports(Ruleset *rules[])
|
||||
|
@ -37,6 +38,13 @@ mainproc(void *v)
|
|||
sendp(c, nil);
|
||||
}
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprint(2, "usage: %s [-p plumbfile] [-s srvname]\n", argv0);
|
||||
exits("usage");
|
||||
}
|
||||
|
||||
void
|
||||
threadmain(int argc, char *argv[])
|
||||
{
|
||||
|
@ -48,7 +56,13 @@ threadmain(int argc, char *argv[])
|
|||
|
||||
ARGBEGIN{
|
||||
case 'p':
|
||||
plumbfile = ARGF();
|
||||
plumbfile = EARGF(usage());
|
||||
break;
|
||||
case 's':
|
||||
srvname = EARGF(usage());
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
break;
|
||||
}ARGEND
|
||||
|
||||
|
|
|
@ -92,3 +92,4 @@ jmp_buf parsejmp;
|
|||
char *lasterror;
|
||||
char **ports;
|
||||
int nports;
|
||||
char *srvname;
|
||||
|
|
Loading…
Reference in a new issue