コード例 #1
0
ファイル: mount.c プロジェクト: eugmes/diod
Npcfsys*
npc_start (int rfd, int wfd, int msize, int flags)
{
	Npcfsys *fs;
	Npfcall *tc = NULL, *rc = NULL;

	if ((flags & NPC_MULTI_RPC))
		fs = npc_create_mtfsys (rfd, wfd, msize, flags);
	else 
		fs = npc_create_fsys (rfd, wfd, msize, flags);
	if (!fs)
		goto done;
	if (!(tc = np_create_tversion (msize, "9P2000.L"))) {
		np_uerror (ENOMEM);
		goto done;
	}
	if (fs->rpc (fs, tc, &rc) < 0)
		goto done;
	if (rc->u.rversion.msize < msize)
		fs->msize = rc->u.rversion.msize;
	if (np_strcmp (&rc->u.rversion.version, "9P2000.L") != 0) {
		np_uerror(EIO);
		goto done;
	}
done:
	if (tc)
		free (tc);
	if (rc)
		free (rc);
	if (np_rerror () && fs) {
		npc_finish (fs);
		fs = NULL;
	}			
	return fs;
}
コード例 #2
0
ファイル: srv.c プロジェクト: ericvh/npfs-dirtab
static Npfcall*
np_default_version(Npconn *conn, u32 msize, Npstr *version) 
{
	int dotu;
	char *ver;
	Npfcall *rc;

	if (msize > conn->srv->msize)
		msize = conn->srv->msize;

	dotu = 0;
	if (np_strcmp(version, "9P2000.u")==0 && conn->srv->dotu) {
		ver = "9P2000.u";
		dotu = 1;
	} else if (np_strncmp(version, "9P2000", 6) == 0)
		ver = "9P2000";
	else
		ver = NULL;

	if (msize < IOHDRSZ)
		np_werror("msize too small", EIO);
	else if (ver) {
		np_conn_reset(conn, msize, dotu);
		rc = np_create_rversion(msize, ver);
	} else
		np_werror("unsupported 9P version", EIO);

	return rc;
}
コード例 #3
0
ファイル: npstring.c プロジェクト: 8l/diod
int
np_strncmp(Npstr *str, char *cs, int len)
{
	int ret;

	if (str->len >= len)
		ret = strncmp(str->str, cs, len);
	else
		ret = np_strcmp(str, cs);

	return ret;
}
コード例 #4
0
ファイル: user.c プロジェクト: alepharchives/diod-ether
/* Take another reference on afid->user and return it.
 * If afid was for a different user return NULL.
 */
Npuser *
np_afid2user (Npfid *afid, Npstr *uname, u32 n_uname)
{
    Npuser *u = NULL;

    if (n_uname != P9_NONUNAME) {
        if (n_uname != afid->user->uid) {
            np_uerror (EPERM);
            goto done;
        }
    } else {
        if (np_strcmp (uname, afid->user->uname) != 0) {
            np_uerror (EPERM);
            goto done;
        }
    }
    u = afid->user;
    np_user_incref (u);
done:
    return u;
}
コード例 #5
0
ファイル: fcall.c プロジェクト: lowfatcomputing/diod
Npfcall *
np_version(Npreq *req, Npfcall *tc)
{
	Npfcall *rc = NULL;
	int msize = tc->u.tversion.msize;

	if (msize < P9_IOHDRSZ + 1) {
		np_uerror(EIO);
		return NULL;
	}
	if (msize > req->conn->msize)
		msize = req->conn->msize;
	if (msize < req->conn->msize)
		req->conn->msize = msize; /* conn->msize can only be reduced */
	if (np_strcmp(&tc->u.tversion.version, "9P2000.L") == 0) {
		if (!(rc = np_create_rversion(msize, "9P2000.L")))
			np_uerror(ENOMEM);
	} else
		np_uerror(EIO);
	return rc;
}