コード例 #1
0
ファイル: CacheSession.cpp プロジェクト: rallan9/inetfs
int CacheSession::getxattr(const string& path, const string& attr, string& value)
{
	int status = 0;
	_STDERR("looking up xattr %s for %s", attr.c_str(), path.c_str());
	if (attr == "url" || attr == "icon")
	{
		// special case: get the url from rstat (or cache)
		file_stat_t fs;

		if ((status = rstat(path.c_str(), fs)) < 0)
		{
			return status;
		}
		if (attr == "url")
		{
			value = fs.fs_url;
		}
		else if (attr == "icon")
		{
			value = fs.fs_icon;
		}
		if (value.empty())
		{
			return -ENODATA;
		}
		return status;
	}
	return m_session->getxattr(path, attr, value);
}
コード例 #2
0
ファイル: avt_files.c プロジェクト: tingley/tactical
/*
 * Handle CHECK_LOAD
 */
errr check_load(void)
{

#ifdef CHECK_LOAD

	struct statstime    st;

	/* Success if not checking */
	if (!check_load_value) return (0);

	/* Check the load */
	if (0 == rstat("localhost", &st))
	{
		long val1 = (long)(st.avenrun[2]);
		long val2 = (long)(check_load_value) * FSCALE;

		/* Check for violation */
		if (val1 >= val2) return (1);
	}

#endif

	/* Success */
	return (0);
}
コード例 #3
0
ファイル: abc.c プロジェクト: JamesLinus/vsta
/*
 * init_buf()
 *	Initialize the buffering system
 */
void
init_buf(port_t arg_ioport, int arg_coresec)
{
	char *p;

	/*
	 * Record args
	 */
	ioport = arg_ioport;
	coresec = arg_coresec;

	/*
	 * Initialize data structures
	 */
	ll_init(&allbufs);
	bufpool = hash_alloc(coresec / 8);
	bufsize = 0;
	ASSERT_DEBUG(bufpool, "init_buf: bufpool");
	fg_pid = gettid();

	/*
	 * Record whether DMA is supported
	 */
	p = rstat(ioport, "dma");
	can_dma = p && atoi(p);

	/*
	 * Spin off background thread
	 */
	bg_pid = tfork(bg_thread, 0);
}
コード例 #4
0
ファイル: bbsd_single.c プロジェクト: wyat/kbs
static inline int get_load(double *load)
{
#if defined(HAVE_GETLOADAVG)
    return getloadavg(load,3);
#elif defined(LINUX) /* ! HAVE_GETLOADAVG && LINUX */
    FILE *fp;
    int ret;
    double avg[3];
    load[0]=0;
    load[1]=0;
    load[2]=0;
    if (!(fp=fopen("/proc/loadavg","r")))
        return 0;
    ret=fscanf(fp,"%g %g %g",&avg[0],&avg[1],&avg[2]);
    fclose(fp);
    switch (ret) {
        case 3:
            load[2]=avg[2];
        case 2:
            load[1]=avg[1];
        case 1:
            load[0]=avg[0];
            break;
        default:
            return -1;
    }
    return ret;
#else /* ! HAVE_GETLOADAVG && ! LINUX */
    struct statstime rsts;
    rstat("localhost",&rsts);
    load[0]=(rs.avenrun[0]*0.00390625); /* div by 256 */
    load[1]=(rs.avenrun[1]*0.00390625);
    load[2]=(rs.avenrun[2]*0.00390625);
#endif /* HAVE_GETLOADAVG */
}
コード例 #5
0
ファイル: ilolpex6.cpp プロジェクト: andreasmattas/testcode
int
main (int argc, char **argv)
{
   IloEnv   env;
   try {
      IloModel model(env, "example");

      IloNumVarArray var(env);
      IloRangeArray  rng(env);
      populatebycolumn (model, var, rng);

      IloCplex cplex(model);

      IloCplex::BasisStatusArray cstat(env), rstat(env);
      cstat.add(IloCplex::AtUpper);
      cstat.add(IloCplex::Basic);
      cstat.add(IloCplex::Basic);
      rstat.add(IloCplex::AtLower);
      rstat.add(IloCplex::AtLower);
      cplex.setBasisStatuses(cstat, var, rstat, rng);
      cplex.solve();

      cplex.out() << "Solution status = " << cplex.getStatus() << endl;
      cplex.out() << "Solution value  = " << cplex.getObjValue() << endl;
      cplex.out() << "Iteration count = " << cplex.getNiterations() << endl;

      IloNumArray vals(env);
      cplex.getValues(vals, var);
      env.out() << "Values        = " << vals << endl;
      cplex.getSlacks(vals, rng);
      env.out() << "Slacks        = " << vals << endl;
      cplex.getDuals(vals, rng);
      env.out() << "Duals         = " << vals << endl;
      cplex.getReducedCosts(vals, var);
      env.out() << "Reduced Costs = " << vals << endl;

      cplex.exportModel("lpex6.lp");
   }
   catch (IloException& e) {
      cerr << "Concert exception caught: " << e << endl;
   }
   catch (...) {
      cerr << "Unknown exception caught" << endl;
   }

   env.end();
   return 0;
}  // END main
コード例 #6
0
ファイル: annexe_stockdata2.c プロジェクト: Zatrof/42
t_file				*annexe_rdata(char *filename, char *path, struct stat buf)
{
	t_file			*file;

	if ((file = (t_file*)malloc(sizeof(*file))) == NULL)
		return (NULL);
	if ((file->name = ft_strdup(filename)) == NULL)
		return (NULL);
	if (rstat(path, filename, &file, buf) == -1)
		return (NULL);
	if (perm(buf.st_mode, &file) == -1)
		return (NULL);
	if ((file->date = mtime(&buf.st_mtime)) == NULL)
		return (NULL);
	file->rec = NULL;
	file->path = NULL;
	file->slink = NULL;
	file->logerror = NULL;
	file->time = buf.st_mtime;
	file->size = buf.st_size;
	file->link = buf.st_nlink;
	file->block = buf.st_blocks;
	return (file);
}
コード例 #7
0
ファイル: perm.c プロジェクト: JamesLinus/vsta
/*
 * fchmod()
 *	Change mode of open file
 *
 * Our mapping of POSIXese to VSTa is as follows:
 *	"Other" affects the default protection granted
 *	"Group" affects all intermediate protections
 *	"User" affects the final, most specific match
 */
int
fchmod(int fd, int mode)
{
	char *prot, buf[PERMLEN*8];
	uchar prots[PERMLEN+1];
	uint nprot, x;

	/*
	 * Get current protections
	 */
	prot = rstat(__fd_port(fd), "acc");
	if (prot == 0) {
		return(__seterr(EINVAL));
	}

	/*
	 * Explode out to prots[]
	 */
	nprot = 0;
	while ((nprot < (PERMLEN + 1)) && *prot && (*prot != '\n')) {
		prots[nprot++] = atoi(prot);
		prot = strchr(prot, '/');
		if (!prot) {
			break;
		}
		prot += 1;
	}

	/*
	 * Now mung up the protections based on a mapping of POSIX
	 * protection concepts.
	 */

	/*
	 * "User".  Apllies to the most specific.
	 */
	map_perm(&prots[nprot-1], mode);

	/*
	 * "Group".  Applies to all of the rest except the most specific.
	 */
	mode <<= 3;
	for (x = 1; x < (nprot-1); ++x) {
		map_perm(&prots[x], mode);
	}

	/*
	 * "Other".  Affects first (default) protection slot
	 */
	mode <<= 3;
	map_perm(&prots[0], mode);

	/*
	 * Build a "acc=X" to reflect potentially changed protection
	 */
	strcpy(buf, "acc=");
	for (x = 0; x < nprot; ++x) {
		sprintf(buf + strlen(buf), "%s%d",
			x ? "/" : "",
			prots[x]);
	}
	strcat(buf, "\n");

	/*
	 * Send it back
	 */
	return(wstat(__fd_port(fd), buf));
}
コード例 #8
0
ファイル: srv.c プロジェクト: 99years/plan9
void
respond(Req *r, char *error)
{
	int i, m, n;
	char errbuf[ERRMAX];
	Srv *srv;

	srv = r->srv;
	assert(srv != nil);

	if(r->responded){
		assert(r->pool);
		goto free;
	}
		
	assert(r->responded == 0);
	r->error = error;

	switch(r->ifcall.type){
	default:
		assert(0);
	/*
	 * Flush is special.  If the handler says so, we return
	 * without further processing.  Respond will be called
	 * again once it is safe.
	 */
	case Tflush:
		if(rflush(r, error)<0)
			return;
		break;
	case Tversion:	rversion(r, error);	break;
	case Tauth:	rauth(r, error);	break;
	case Tattach:	rattach(r, error);	break;
	case Twalk:	rwalk(r, error);	break;
	case Topen:	ropen(r, error);	break;
	case Tcreate:	rcreate(r, error);	break;
	case Tread:	rread(r, error);	break;
	case Twrite:	rwrite(r, error);	break;
	case Tclunk:	rclunk(r, error);	break;
	case Tremove:	rremove(r, error, errbuf);	break;
	case Tstat:	rstat(r, error);	break;
	case Twstat:	rwstat(r, error);	break;
	}

	r->ofcall.tag = r->ifcall.tag;
	r->ofcall.type = r->ifcall.type+1;
	if(r->error)
		setfcallerror(&r->ofcall, r->error);

if(chatty9p)
	fprint(2, "-%d-> %F\n", srv->outfd, &r->ofcall);

	qlock(&srv->wlock);
	n = convS2M(&r->ofcall, srv->wbuf, srv->msize);
	if(n <= 0){
		fprint(2, "n = %d %F\n", n, &r->ofcall);
		abort();
	}
	assert(n > 2);
	/*
	 * There is a race here - we must remove the entry before
	 * the write, so that if the client is very fast and reuses the
	 * tag, the read loop won't think it is still in use.
	 * 
	 * By removing the entry before the write, we open up a 
	 * race with incoming Tflush messages.  Specifically, an
	 * incoming Tflush might not see r even though it has not
	 * yet been responded to.  It would then send an Rflush
	 * immediately, potentially before we do the write.  This can't
	 * happen because we already old srv->wlock, so nothing
	 * is going out on the wire before this write.
	 */
	if(r->pool)	/* not a fake */
		closereq(removereq(r->pool, r->ifcall.tag));

	qlock(&r->lk);
	r->responded = 1;
	if(r->pool)
	if(r->ref.ref == 1+r->nflush)
	if(r->fid){
		/*
		 * There are no references other than in our r->flush array,
		 * so no one else should be accessing r concurrently.
		 * Close the fid now, before responding to the message.
		 * 
		 * If the client is behaving (there are no outstanding T-messages
		 * that reference r->fid) and the message is a Tclunk or Tremove,
		 * then this closefid will call destroyfid.  
		 * 
		 * This means destroyfid can't piddle around 
		 * indefinitely (we're holding srv->wlock!), but it provides
		 * for tighter semantics as to when destroyfid is called.
		 *
		 * LANL has observed cases where waiting until after the write
		 * can delay a closefid on a Twrite for many 9P transactions,
		 * so that a handful of transactions can happen including a Tclunk
		 * and a Topen, and the original fid will still not be destroyed.
		 */
		closefid(r->fid);
		r->fid = nil;
	}
	qunlock(&r->lk);
	m = write(srv->outfd, srv->wbuf, n);
	if(m != n)
		sysfatal("lib9p srv: write %d returned %d on fd %d: %r", n, m, srv->outfd);
	qunlock(&srv->wlock);

free:
	qlock(&r->lk);	/* no one will add flushes now */

	for(i=0; i<r->nflush; i++){
		r->flush[i]->oldreq = nil;	/* so it doesn't try to lock us! */
		respond(r->flush[i], nil);
	}
	free(r->flush);
	r->flush = nil;
	r->nflush = 0;
	qunlock(&r->lk);

	if(r->pool)
		closereq(r);
	else
		free(r);
}
コード例 #9
0
ファイル: bbsrf.c プロジェクト: madoldman/inankai_bbs
struct utmpx * invis()
{
	static struct utmpx data;
	FILE   *fp;
	char   *name, *tp;
	struct passwd *pp;
	tp = ttyname(0);
	if (!tp)
		return NULL;
	tp = strchr(tp, '/') + 1;
	tp = strchr(tp, '/') + 1;
	pp = getpwuid(getuid());
	if (!pp)
	{
		fprintf(stderr, "You Don't exist!\n");
		exit(0);
	}
	name = pp->pw_name;

#ifdef INVISIBLE

	if ((fp = fopen(UTMPX_FILE, "r+")) == NULL)
	{
#else
	if ((fp = fopen(UTMPX_FILE, "r")) == NULL)
	{
#endif
		printf("Cannot open %s \n", UTMPX_FILE);
		exit(0);
	}
	while (read(fileno(fp), &data, sizeof(struct utmpx)) > 0)
	{
		if (data.ut_type != DEAD_PROCESS && !strcmp(tp, data.ut_line))
		{
			struct utmpx nildata;
			memcpy(&nildata, &data, sizeof(nildata));
#ifdef INVISIBLE

			memset(nildata.ut_name, 0, 8);
			fseek(fp, (long) (ftell(fp) - sizeof(struct utmpx)), 0);
			if (write(fileno(fp), &nildata, sizeof(struct utmpx)) != sizeof(struct utmpx))
				/* NIL IF STATEMENT */
				;
#endif

			fclose(fp);
			return &data;
		}
	}
	fclose(fp);
	return NULL;
}
#endif

#ifdef USE_UTMP
struct utmp * invis()
{
	static struct utmp data;
	FILE   *fp;
	char   *tp;
	struct passwd *pp;
	tp = ttyname(0);
	if (!tp)
		return NULL;
	tp = strchr(tp, '/') + 1;
	tp = strchr(tp, '/') + 1;
	pp = getpwuid(getuid());
	if (!pp)
	{
		fprintf(stderr, "You Don't exist!\n");
		exit(0);
	}
#ifdef INVISIBLE
	if ((fp = fopen(UTMP_PATH, "r+")) == NULL)
	{
#else
	if ((fp = fopen(UTMP_PATH, "r")) == NULL)
	{
#endif
		printf("bbsrf: cannot open %s\n", UTMP_PATH);
		exit(0);
	}
	while (read(fileno(fp), &data, sizeof(struct utmp)) > 0)
	{
		if (!strcmp(tp, data.ut_line))
		{
			struct utmp nildata;
			memcpy(&nildata, &data, sizeof(nildata));
#ifdef INVISIBLE

			memset(nildata.ut_name, 0, 8);
			fseek(fp, (long) (ftell(fp) - sizeof(struct utmp)), 0);
			write(fileno(fp), &nildata, sizeof(struct utmp));
#endif

			fclose(fp);
			return &data;
		}
	}
	fclose(fp);
	return NULL;
}
#endif

void get_load(double load[])
{
#if defined(LINUX)
	FILE   *fp;
	fp = fopen("/proc/loadavg", "r");
	if (!fp)
		load[0] = load[1] = load[2] = 0;
	else
	{
		float   av[3];
		fscanf(fp, "%g %g %g", av, av + 1, av + 2);
		fclose(fp);
		load[0] = av[0];
		load[1] = av[1];
		load[2] = av[2];
	}
#elif defined(BSD44)
	getloadavg(load, 3);
#else

	struct statstime rs;
	rstat("localhost", &rs);
	load[0] = rs.avenrun[0] / (double) (1 << 8);
	load[1] = rs.avenrun[1] / (double) (1 << 8);
	load[2] = rs.avenrun[2] / (double) (1 << 8);
#endif
}

char   *env[] = {
                    "TERM=xxxxxxxxxxxxxxxxxxxxxxxxxxx",
                    NULL};

void set_max_load(char* prog_name)
{
	char   *p;
	p = strrchr(prog_name, '.');

	if (p && *(p + 1) != '\0')
		max_load = atoi(p + 1);
}
コード例 #10
0
ファイル: srv.c プロジェクト: npe9/harvey
void
respond(Req *r, char *error)
{
	int i, m, n;
	char errbuf[ERRMAX];
	Srv *srv;

	srv = r->srv;
	assert(srv != nil);

	assert(r->responded == 0);
	r->error = error;

	switch(r->ifcall.type){
	default:
		assert(0);
	/*
	 * Flush is special.  If the handler says so, we return
	 * without further processing.  Respond will be called
	 * again once it is safe.
	 */
	case Tflush:
		if(rflush(r, error)<0)
			return;
		break;
	case Tversion:	rversion(r, error);	break;
	case Tauth:	rauth(r, error);	break;
	case Tattach:	rattach(r, error);	break;
	case Twalk:	rwalk(r, error);	break;
	case Topen:	ropen(r, error);	break;
	case Tcreate:	rcreate(r, error);	break;
	case Tread:	rread(r, error);	break;
	case Twrite:	rwrite(r, error);	break;
	case Tclunk:	rclunk(r, error);	break;
	case Tremove:	rremove(r, error, errbuf);	break;
	case Tstat:	rstat(r, error);	break;
	case Twstat:	rwstat(r, error);	break;
	}

	r->ofcall.tag = r->ifcall.tag;
	r->ofcall.type = r->ifcall.type+1;
	if(r->error)
		setfcallerror(&r->ofcall, r->error);

if(chatty9p)
	fprint(2, "-%d-> %F\n", srv->outfd, &r->ofcall);

	qlock(&srv->wlock);
	n = convS2M(&r->ofcall, srv->wbuf, srv->msize);
	if(n <= 0){
		fprint(2, "n = %d %F\n", n, &r->ofcall);
		abort();
	}
	assert(n > 2);
	if(r->pool)	/* not a fake */
		closereq(removereq(r->pool, r->ifcall.tag));
	m = write(srv->outfd, srv->wbuf, n);
	if(m != n)
		sysfatal("lib9p srv: write %d returned %d on fd %d: %r", n, m, srv->outfd);
	qunlock(&srv->wlock);

	qlock(&r->lk);	/* no one will add flushes now */
	r->responded = 1;
	qunlock(&r->lk);

	for(i=0; i<r->nflush; i++)
		respond(r->flush[i], nil);
	free(r->flush);
	r->flush = nil;
	r->nflush = 0;

	if(r->pool)
		closereq(r);
	else
		free(r);
}
コード例 #11
0
ファイル: cs.c プロジェクト: brho/akaros
static void *job_thread(void *arg)
{
	struct mfile *mf;
	struct job *job = arg;

	spinlock_lock(&dblock);
	mf = newfid(job->request.fid);

	if (debug)
		fprintf(stderr, "CS:%F", &job->request);
	switch (job->request.type) {
	default:
		fprintf(stderr, "CS:unknown request type %d", job->request.type);
		break;
	case Tversion:
		rversion(job);
		break;
	case Tauth:
		rauth(job);
		break;
	case Tflush:
		rflush(job);
		break;
	case Tattach:
		rattach(job, mf);
		break;
	case Twalk:
		rwalk(job, mf);
		break;
	case Topen:
		ropen(job, mf);
		break;
	case Tcreate:
		rcreate(job, mf);
		break;
	case Tread:
		rread(job, mf);
		break;
	case Twrite:
		rwrite(job, mf);
		break;
	case Tclunk:
		rclunk(job, mf);
		break;
	case Tremove:
		rremove(job, mf);
		break;
	case Tstat:
		rstat(job, mf);
		break;
	case Twstat:
		rwstat(job, mf);
		break;
	}
	spinlock_unlock(&dblock);

	freejob(job);

	if (debug)
		fprintf(stderr, "CS:Job done\n");
	return 0;
}
コード例 #12
0
ファイル: dns.c プロジェクト: Earnestly/plan9
void
io(void)
{
	volatile long n;
	volatile uchar mdata[IOHDRSZ + Maxfdata];
	Job *volatile job;
	Mfile *volatile mf;
	volatile Request req;

	memset(&req, 0, sizeof req);
	/*
	 *  a slave process is sometimes forked to wait for replies from other
	 *  servers.  The master process returns immediately via a longjmp
	 *  through 'mret'.
	 */
	if(setjmp(req.mret))
		putactivity(0);
	req.isslave = 0;
	stop = 0;
	while(!stop){
		procsetname("%d %s/dns Twrites of %d 9p rpcs read; %d alarms",
			stats.qrecvd9p, mntpt, stats.qrecvd9prpc, stats.alarms);
		n = read9pmsg(mfd[0], mdata, sizeof mdata);
		if(n<=0){
			dnslog("error reading 9P from %s: %r", mntpt);
			sleep(2000);	/* don't thrash after read error */
			return;
		}

		stats.qrecvd9prpc++;
		job = newjob();
		if(convM2S(mdata, n, &job->request) != n){
			freejob(job);
			continue;
		}
		mf = newfid(job->request.fid, 0);
		if(debug)
			dnslog("%F", &job->request);

		getactivity(&req, 0);
		req.aborttime = timems() + Maxreqtm;
		req.from = "9p";

		switch(job->request.type){
		default:
			warning("unknown request type %d", job->request.type);
			break;
		case Tversion:
			rversion(job);
			break;
		case Tauth:
			rauth(job);
			break;
		case Tflush:
			rflush(job);
			break;
		case Tattach:
			rattach(job, mf);
			break;
		case Twalk:
			rwalk(job, mf);
			break;
		case Topen:
			ropen(job, mf);
			break;
		case Tcreate:
			rcreate(job, mf);
			break;
		case Tread:
			rread(job, mf);
			break;
		case Twrite:
			/* &req is handed to dnresolve() */
			rwrite(job, mf, &req);
			break;
		case Tclunk:
			rclunk(job, mf);
			break;
		case Tremove:
			rremove(job, mf);
			break;
		case Tstat:
			rstat(job, mf);
			break;
		case Twstat:
			rwstat(job, mf);
			break;
		}

		freejob(job);

		/*
		 *  slave processes die after replying
		 */
		if(req.isslave){
			putactivity(0);
			_exits(0);
		}

		putactivity(0);
	}
	/* kill any udp server, notifier, etc. processes */
	postnote(PNGROUP, getpid(), "die");
	sleep(1000);
}
コード例 #13
0
ファイル: main.c プロジェクト: slackware-jheengut/slackyd
int
main(int argc, char **argv)
{
    unsigned packages_found = 0;
    pkg_t **packages = NULL;
    int i, sflag;

#if defined MTRACE
    mtrace();
#endif

    if (parse_options(argc, argv))
	 usage(*argv);

    parse_config ();

	putchar ('\n');
	
    xstrstr = (opt.case_insensitive) ? strcasestr : strstr;
	xstrcmp = (opt.case_insensitive) ? strcasecmp : strcmp;

    /* Load packages installed and split all folds.
	 * Save in a global installed_t struct because
	 * too many function they need.
	 */
	 nginst = installed (&ginst);

    /* update */
    if (opt.update)
	 update();

    /* upgrade all packages */
    if (opt.upgrade)
     upgrade (opt.package);

    /* search */
    if (opt.search || opt.get || opt.view || opt.getsrc || opt.buildsrc)
    {

    packages_list_check (true, PKGLIST_CHECK_QUIT_ON_ALL);
    	
	fprintf (stdout, "Searching %s: ", (opt.package) ? opt.package : "all");
	fflush (stdout);
	
	sflag = (!opt.package || !opt.use_regex) ? MATCH_ALL_NAME : MATCH_USING_REGEX;

	packages = pkgl2pkgt (search (sflag, opt.package), &packages_found);

	if (packages_found == 0)
	 fprintf (stdout, "nothing found.");
    else
     fprintf (stdout, "found %u package%s.\n", packages_found, (packages_found > 1) ? "s" : "");
        
    if (packages_found > 1000)
     fprintf (stdout, "Sorting packages: ");
	fflush (stdout);
	sort_pkg (&packages, &packages_found);
	if (packages_found > 1000)
     fprintf (stdout, "done.\n");
	putchar ('\n');
	show_pkg_found (packages, packages_found);

	}

    /* get */
    if (opt.get)
	 get (&packages, &packages_found);
   
    /* get build sources */
    if (opt.getsrc || opt.buildsrc)
	 pkgsrc_get (&packages, &packages_found);
    
    /* check for missing shared libraries */
    if (opt.shared_dep)
     check_shared_dep (opt.package);

    /* check for missing packager-indicated library */
    if (opt.packager_dep)
     search_packager_lib (opt.package);

    /* view */
    if (opt.view)
	 show_package_info (packages, packages_found);


    /* show packages installed */
    if (opt.installed)
	 installed_packages (opt.package);

    /* show non-slackware packages installed */
    if (opt.nslack_installed)
	 unofficial_packages (opt.package);

    /* show obsolete packages, installed but missing from repositories */
    if (opt.obsolete)
     obsolete_packages (opt.package);
     
    /* show blacklisted packages available */
    if (opt.show_blacklisted)
	 blacklisted_packages (opt.package);

    if (opt.replaceable)
     replaceable_packages (opt.package);

    /* show repositoies stat */
    if (opt.rstat)
     rstat();

    /* clean slackyd directory */
    if (opt.purge_all)
    {
        fprintf (stdout, "Cleaning cache...\n");
        purge (PURGE_ALL);
    }
    if (opt.purge)
    {
        fprintf (stdout, "Removing packages and sources...\n");
        purge (PURGE_PKG);
    }
    
    putchar ('\n');
    
    /* cleanup */
	free_installed_t (&ginst, nginst);
    pkg_t_free_all (&packages, packages_found);

    for (i = (signed)N_REPOS - 1; i >= 0; i--)
	{
		free (REPOS[i].name);
		free (REPOS[i].hostname);
		free (REPOS[i].path);
	}
	free (REPOS);

	free (opt.package);
	free (opt.config);
    free (opt.cache);
    
	while ((opt.nblacklisted--) > 0)
	{
	    regfree (&opt.blacklisted[opt.nblacklisted]);
	}
    free (opt.blacklisted);

	return EXIT_SUCCESS;
}
コード例 #14
0
ファイル: dns.c プロジェクト: 00001/plan9port
void
ioproc0(void *v)
{
	long n;
	Mfile *mf;
	uchar mdata[IOHDRSZ + Maxfdata];
	Request req;
	Job *job;

	USED(v);

	for(;;){
		n = read9pmsg(mfd[0], mdata, sizeof mdata);
		if(n <= 0){
			syslog(0, logfile, "error reading mntpt: %r");
			break;
		}
		job = newjob();
		if(convM2S(mdata, n, &job->request) != n){
			freejob(job);
			continue;
		}
		if(debug)
			syslog(0, logfile, "%F", &job->request);

		getactivity(&req);
		req.aborttime = now + 60;	/* don't spend more than 60 seconds */

		mf = nil;
		switch(job->request.type){
		case Tversion:
		case Tauth:
		case Tflush:
			break;
		case Tattach:
			mf = newfid(job->request.fid, 1);
			if(mf == nil){
				sendmsg(job, "fid in use");
				goto skip;
			}
			break;
		default:
			mf = newfid(job->request.fid, 0);
			if(mf == nil){
				sendmsg(job, "unknown fid");
				goto skip;
			}
			break;
		}

		switch(job->request.type){
		default:
			syslog(1, logfile, "unknown request type %d", job->request.type);
			break;
		case Tversion:
			rversion(job);
			break;
		case Tauth:
			rauth(job);
			break;
		case Tflush:
			rflush(job);
			break;
		case Tattach:
			rattach(job, mf);
			break;
		case Twalk:
			rwalk(job, mf);
			break;
		case Topen:
			ropen(job, mf);
			break;
		case Tcreate:
			rcreate(job, mf);
			break;
		case Tread:
			rread(job, mf);
			break;
		case Twrite:
			rwrite(job, mf, &req);
			break;
		case Tclunk:
			rclunk(job, mf);
			break;
		case Tremove:
			rremove(job, mf);
			break;
		case Tstat:
			rstat(job, mf);
			break;
		case Twstat:
			rwstat(job, mf);
			break;
		}
skip:
		freejob(job);
		putactivity();
	}
}
コード例 #15
0
ファイル: res.rf.c プロジェクト: CraigNoble/openlava
void
rfServ_(int acceptSock)
{
    static char          fname[] = "rfServ_()";
    struct LSFHeader     msgHdr;
    struct LSFHeader     buf;
    struct sockaddr_in   from;
    socklen_t            fromLen = sizeof(from);
    int                  sock;
    XDR                  xdrs;

    sock = accept(acceptSock, (struct sockaddr *)&from, &fromLen);
    if (sock < 0) {
        ls_errlog(stderr, I18N_FUNC_FAIL_MM, fname, "readDecodeHdr_");
        closesocket(acceptSock);
        return;
    }

    xdrmem_create(&xdrs, (char *) &buf, sizeof(buf), XDR_DECODE);

    for (;;) {

        XDR_SETPOS(&xdrs, 0);
        if (readDecodeHdr_(sock,
                           (char *)&buf,
                           SOCK_READ_FIX,
                           &xdrs,
                           &msgHdr) < 0) {
            ls_errlog(stderr, I18N_FUNC_FAIL_MM, fname, "readDecodeHdr_");
            closesocket(sock);
            xdr_destroy(&xdrs);
            return;
        }

        switch (msgHdr.opCode) {
            case RF_OPEN:
                ropen(sock, &msgHdr);
                break;

            case RF_CLOSE:
                rclose(sock, &msgHdr);
                break;

            case RF_WRITE:
                rwrite(sock, &msgHdr);
                break;

            case RF_READ:
                rread(sock, &msgHdr);
                break;

            case RF_STAT:
                rstat(sock, &msgHdr);
                break;

            case RF_GETMNTHOST:
                rgetmnthost(sock, &msgHdr);
                break;

            case RF_FSTAT:
                rfstat(sock, &msgHdr);
                break;

            case RF_LSEEK:
                rlseek(sock, &msgHdr);
                break;

            case RF_UNLINK:
                runlink(sock, &msgHdr);
                break;

            case RF_TERMINATE:
                closesocket(sock);
                return;

            default:
                ls_errlog(stderr, _i18n_msg_get(ls_catd, NL_SETN, 602,
                                                "%s: Unknown opcode %d"),
                          fname, msgHdr.opCode);
                xdr_destroy(&xdrs);
                break;
        }
    }

}
コード例 #16
0
ファイル: rstat.cpp プロジェクト: sriramsr/dating
int main (int argc, char* argv[]) {
	rstat d = rstat(argc,argv);
    d.run ();
    d. summarize();
}
コード例 #17
0
ファイル: trfs.c プロジェクト: CoryXie/nix-os
static void
service(int cfd, int sfd, int dfd)
{
	Fcall	f;
	int	r;
	Fid*	fp;

	fidpool = allocfidpool(nop);
	for(;;){
		fp = nil;
		r = getfcall(cfd, &f);
		if (r <= 0){
			fprint(dfd, "trfs: getfcall %r\n");
			break;
		}
		if(verbose)
			fprint(dfd , "c→s %F\n", &f);
		switch(f.type){
		case Tclunk:
		case Tremove:
			// BUG in lib9p? removefid leaks fid.
			// is that what it should do?
			fp = lookupfid(fidpool, f.fid);
			if (fp != nil){
				removefid(fidpool, f.fid);
				closefid(fp);
				closefid(fp);
				fp = nil;
			}
			break;
		case Tcreate:
			tcreate(&f);
			// and also...
		case Topen:
			fp = allocfid(fidpool, f.fid);
			fp->aux = 0;
			break;
		case Tread:
			tread(&f);
			break;
		case Twalk:
			twalk(&f);
			break;
		case Twstat:
			twstat(&f);
			break;
		}
		if(verbose && debug)
			fprint(dfd , "c→s %F\n", &f);
		if (putfcall(sfd, &f) < 0)
			fprint(dfd , "can't putfcall: %r\n");
		

		r = getfcall(sfd, &f);
		if (r <= 0){
			fprint(dfd, "trfs: 2nd getfcall %r\n");
			break;
		}
		if (verbose)
			fprint(dfd, "c←s %F\n", &f);
		switch(f.type){
		case Ropen:
		case Rcreate:
			fp->qid = f.qid;
			break;
		case Rread:
			rread(&f);
			break;
		case Rstat:
			rstat(&f);
			break;
		}
		if(verbose && debug)
			fprint(dfd , "c←s %F\n", &f);
		if (putfcall(cfd, &f) < 0)
			fprint(dfd , "can't 2n dputfcall: %r\n");
		if (fp != nil)
			closefid(fp);
	}
}
コード例 #18
0
ファイル: InetfsProperties.cpp プロジェクト: rallan9/inetfs
bool
InetfsProperties::exists()
{
	file_stat_t st;
	return 0 == rstat(st);
}