Esempio n. 1
0
Spfcall *
sp_clunk(Spreq *req, Spfcall *tc)
{
	int n;
	Spconn *conn;
	Spfid *fid;
	Spfcall *rc;

	rc = NULL;
	conn = req->conn;
	fid = sp_fid_find(conn, tc->fid);
	if (!fid) {
		sp_werror(Eunknownfid, EIO);
		goto done;
	} else 
		sp_fid_incref(fid);

	req->fid = fid;
	if (fid->type&Qtauth) {
		if (conn->srv->auth) {
			n = conn->srv->auth->clunk(fid);
			if (n)
				rc = sp_create_rclunk();
		} else
			sp_werror(Ebadusefid, EIO);

		goto done;
	}

	if (fid->omode!=(u16)~0 && fid->omode==Orclose) {
		rc = (*conn->srv->remove)(fid);
		if (rc->type == Rerror)
			goto done;
		free(rc);
		rc = sp_create_rclunk();
	} else
		rc = (*conn->srv->clunk)(fid);

	if (rc && rc->type == Rclunk)
		sp_fid_decref(fid);

done:
	return rc;
}
Esempio n. 2
0
static Spfcall*
npfs_clunk(Spfid *fid)
{
	Fid *f;
	Spfcall *ret;

	f = fid->aux;
	ret = sp_create_rclunk();
//	sp_fid_decref(fid);
	return ret;
}