Ejemplo n.º 1
1
Archivo: tagfs.c Proyecto: ericvh/tagfs
static void
fsclunk(Fid* fid)
{
	Query*	q;
	File*	f;

	f = fid->file;
	if(f == nil)
		return;
	q = f->aux;
	if(q == nil)
		return;
	if(q->expr != nil){
		/* the query was already made, destroy the file.
		 *
		 * We must incref the file because
		 * removefile assumes that we hold the
		 * reference given to it, and we do not.
		 * We just want the file removed from the tree.
		 */
		free(q->text);
		freeexpr(q->expr);
		free(q);
		f->aux = nil;
		incref(&f->ref);
		removefile(f);
	}
}
Ejemplo n.º 2
0
Archivo: as6.c Proyecto: aap/pdp6
void
freeexpr(Expr *e)
{
	if(e->type >= 2)
		freeexpr(e->r);
	if(e->type == 3)
		freeexpr(e->l);
	free(e);
}
Ejemplo n.º 3
0
void freesubexpr(struct expr *e)  /* free e->subexpr only */
{
    if (e->subexpr) {
	freeexpr(e->subexpr->a);
	freeexpr(e->subexpr->b);
	free(e->subexpr);
	e->subexpr = NULL;
    }
}
Ejemplo n.º 4
0
void freeexpr(struct expr *e)
{
    if (e->subexpr) {
	freeexpr(e->subexpr->a);
	freeexpr(e->subexpr->b);
	free(e->subexpr);
    }
    free(e);
}
Ejemplo n.º 5
0
int main()
{
    char buf[500];
    while (fgets(buf, sizeof buf, stdin)) {
	struct expr *e = parse(buf);
	if (e) {
	    printf("value is %d\n", evalexpr(e));
	    freeexpr(e);
	} else {
	    printf("%s\n", errorstatus);
	}
    }
    return(0);
}
Ejemplo n.º 6
0
Archivo: tagfs.c Proyecto: ericvh/tagfs
static void
fswrite(Req* r)
{
	Query*	q;
	File*	f;
	long	count;
	char*	ntext;
	int	l;

	if(r->fid->qid.type&QTDIR){
		respond(r, "bug: write on dir");
		return;
	}
	f = r->fid->file;
	if(f == ctlf){
		ctlwrite(r);
		return;
	}
	count = r->ifcall.count;
	r->ofcall.count = count;
	q = f->aux;
	if(q->expr != nil){
		// a previous query was made. start another.
		freeexpr(q->expr);
		free(q->text);
		q->expr = nil;
		q->text = nil;
	}
	/* append text to query text, ignore offset.
	 */
	l = strlen(q->text);
	ntext = emalloc9p(l + count + 1);
	strcpy(ntext, q->text);
	memmove(ntext+l, r->ifcall.data, count);
	ntext[l+count]=0;
	free(q->text);
	q->text = ntext;
	respond(r, nil);
}