henesyinit from lsubb0c8bdb6 years agoHistory
82 lines · 1.2 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <plumb.h> int debug;char* fname; static voidmsg(Plumbmsg* m){ 	free(fname);	if (m->wdir && m->data[0] != '/')		fname = smprint("%s/%s", m->wdir, m->data);	else		fname = strdup(m->data);	switch(rfork(RFPROC|RFNOWAIT|RFMEM|RFFDG)){	case 0:		execl("/bin/page", "page", "-w", fname, nil);		exits("exec");	case -1:		sysfatal("fork: %r");	default:		if (debug)			fprint(2, "plumbing %s\n", fname);	}} intcreateport(char* name){	int	fd;	char*	fname; 	fname = smprint("/devs/ports/%s", name);	assert(fname);	if (access(fname, AREAD) >= 0)		fd = open(fname, OREAD|OCEXEC);	else		fd = create(fname, OREAD|OCEXEC, 0660);	free(fname);	return fd;} static voidusage(void){		fprint(2, "usage: %s [-p port] \n", argv0);		sysfatal("usage");} voidmain(int argc, char* argv[]){	Plumbmsg* m;	int plumbfd;	char*	port;  	port="postscript";	ARGBEGIN{	case 'd':		debug++;		break;	case 'p':		port = EARGF(usage());	default:		usage();	}ARGEND;	if (argc > 0)		usage();	plumbfd = createport(port);	if (plumbfd < 0)		sysfatal("port %s: %r", port);	for(;;){		m = plumbrecv(plumbfd);		if(m == nil)			sysfatal("plumbrecv port %s: %r", port);		msg(m);		plumbfree(m);	}}