Plan 9 from Bell Labs’s /usr/web/sources/contrib/steve/root/sys/src/cmd/ndb/glean/main.c

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


#include <u.h>
#include <libc.h>
#include <bio.h>
#include <ctype.h>
#include <fcall.h>
#include <mp.h>
#include <libsec.h>
#include <thread.h>
#include <pool.h>
#include <ip.h>
#include <9p.h>
#include "nbcache.h"

int Debug;
int Passive;

void
fsopen(Req *r)
{
	r->fid->file->aux = snapshot();
	respond(r, nil);
}

static void
fsread(Req *r)
{
	readstr(r, r->fid->file->aux);
	respond(r, nil);
}

void
fsdestroyfile(File *f)
{
	free(f->aux);
}


Srv fs = {
	.open = fsopen,
	.read = fsread,
};

static void
usage(void)
{
	fprint(2, "usage: %s [-p] [-m mntpt] [-s srvname] [-x /net]\n", argv0);
	exits("usage");
}

static void
ding(void *u, char *msg)
{
	USED(u);
	if(strstr(msg, "alarm"))
		noted(NCONT);
	noted(NDFLT);
}


void
main(int argc, char *argv[])
{
	File *f;
	char *mtpt, *svs;

	svs = nil;
	Netdir = "/net";
	mtpt = "/lib/ndb";
	ARGBEGIN{
	case 'd':
		Debug++;
		break;
	case 'p':
		Passive = 1;
		break;
	case 'D':
		chatty9p++;
		break;
	case 'm':
		mtpt = EARGF(usage());
		break;
	case 's':
		svs = EARGF(usage());
		break;
	case 'x':
		Netdir = EARGF(usage());
		break;
	case '?':
		usage();
		break;
	default:
		fprint(2, "unrecognized option\n");
		usage();
	}ARGEND

	if (argc != 0)
		usage();

	notify(ding);

	quotefmtinstall();
	fmtinstall('I', eipfmt);
	fmtinstall('V', eipfmt);
	fmtinstall('E', eipfmt);
	fmtinstall('M', eipfmt);

	switch(rfork(RFPROC|RFNOWAIT|RFMEM|RFNOTEG)){
	case -1:
		sysfatal("fork() failed %r\n");
	case 0:
		listener();
		break;
	default:
		break;
	}

	fs.tree = alloctree(nil, nil, DMDIR|0755, fsdestroyfile);
	postmountsrv(&fs, svs, mtpt, MBEFORE);
	if((f = createfile(fs.tree->root, "gleaned", nil, 0444, nil)) == nil)
		sysfatal("cannot create file %r");
	closefile(f);

	exits(0);
}


Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].