示例#1
0
/*ARGSUSED2*/
static int
devfs_create(struct vnode *dvp, char *nm, struct vattr *vap, vcexcl_t excl,
    int mode, struct vnode **vpp, struct cred *cred, int flag)
{
	int error;
	struct vnode *vp;

	dcmn_err2(("devfs_create %s\n", nm));
	error = dv_find(VTODV(dvp), nm, &vp, NULL, NULLVP, cred, 0);
	if (error == 0) {
		if (excl == EXCL)
			error = EEXIST;
		else if (vp->v_type == VDIR && (mode & VWRITE))
			error = EISDIR;
		else
			error = VOP_ACCESS(vp, mode, 0, cred);

		if (error) {
			VN_RELE(vp);
		} else
			*vpp = vp;
	} else if (error == ENOENT)
		error = EROFS;

	return (error);
}
示例#2
0
/*ARGSUSED3*/
static int
devfs_lookup(struct vnode *dvp, char *nm, struct vnode **vpp,
    struct pathname *pnp, int flags, struct vnode *rdir, struct cred *cred)
{
	ASSERT(dvp->v_type == VDIR);
	dcmn_err2(("devfs_lookup: %s\n", nm));
	return (dv_find(VTODV(dvp), nm, vpp, pnp, rdir, cred, 0));
}
示例#3
0
int main(void)
{
	d_vector(int) v = DV_INIT;
	int *p;
	int int3[3] = {1,2,3};
	int idx;

	check_int(v.size, 0);
	check(v.data == NULL);

	dv_reserve(&v, 1);
	check(v.data != NULL);
	check_int(v.size, 0);
	check(dv_reserved(v) >= 1);

	dv_free(v);
	dv_init(&v);
	check_int(v.size, 0);
	check(v.data == NULL);

	dv_resize(&v, 2);
	check_int(v.size, 2);
	check(v.data != NULL);
	v.data[0] = 50000;
	v.data[1] = 50000;

	dv_resize(&v, 1);
	check_int(v.size, 1);
	check_int(v.data[0], 50000);
	check_int(v.data[1], 0);

	dv_clear(&v);
	check_int(v.size, 0);
	check(v.data != NULL);
	check_int(v.data[0], 0);

	dv_resize(&v, 3);
	v.data[0] = 1;
	v.data[1] = 2;
	v.data[2] = 3;
	p = dv_insert_buffer(&v, 1, 2);
    check(p == &v.data[1]);
	check_int(v.size, 5);
	check_int(v.data[0], 1);
	check_int(v.data[1], 2);
	check_int(v.data[2], 3);
	check_int(v.data[3], 2);
	check_int(v.data[4], 3);

	dv_resize(&v, 2);
	p = dv_insert_zeroed(&v, 1, 2);
    check(p == &v.data[1]);
	check_int(v.size, 4);
	check_int(v.data[0], 1);
	check_int(v.data[1], 0);
	check_int(v.data[2], 0);
	check_int(v.data[3], 2);

	dv_resize(&v, 5);
	v.data[4] = 4;
	dv_resize(&v, 1);
	p = dv_append_buffer(&v, 4);
    check(p == &v.data[1]);
	check_int(v.size, 5);
	check_int(v.data[4], 4);

	dv_resize(&v, 5);
	v.data[4] = 4;
	dv_resize(&v, 1);
	p = dv_append_zeroed(&v, 4);
    check(p == &v.data[1]);
	check_int(v.size, 5);
	check_int(v.data[4], 0);

	dv_resize(&v, 1);
	v.data[0] = 64;
	dv_append2(&v, int3, 3);
	check_int(v.size, 4);
	check_int(v.data[0], 64);
	check_int(v.data[1], 1);
	check_int(v.data[2], 2);
	check_int(v.data[3], 3);

	dv_resize(&v, 1);
	dv_append1(&v, 56);
	check_int(v.size, 2);
	check_int(v.data[1], 56);
	check_int(v.data[2], 0);

	dv_resize(&v, 1);
	generations = 0;
	v.data[0] = 64;
	dv_append(&v, generate());
	check_int(generations, 1);
	check_int(v.size, 4);
	check_int(v.data[0], 64);
	check_int(v.data[1], 1);
	check_int(v.data[2], 2);
	check_int(v.data[3], 3);

	dv_resize(&v, 1);
	v.data[0] = 64;
	dv_set2(&v, int3, 3);
	check_int(v.size, 3);
	check_int(v.data[0], 1);
	check_int(v.data[1], 2);
	check_int(v.data[2], 3);

	dv_resize(&v, 1);
	generations = 0;
	v.data[0] = 64;
	dv_set(&v, generate());
	check_int(generations, 1);
	check_int(v.size, 3);
	check_int(v.data[0], 1);
	check_int(v.data[1], 2);
	check_int(v.data[2], 3);

	dv_resize(&v, 2);
	generations = 0;
	v.data[0] = 64;
	v.data[1] = 36;
	dv_insert(&v, 1, generate());
	check_int(generations, 1);
	check_int(v.size, 5);
	check_int(v.data[0], 64);
	check_int(v.data[1], 1);
	check_int(v.data[2], 2);
	check_int(v.data[3], 3);
	check_int(v.data[4], 36);

	dv_resize(&v, 2);
	generations = 0;
	v.data[0] = 64;
	v.data[1] = 36;
	dv_insert2(&v, 1, int3, 3);
	check_int(v.size, 5);
	check_int(v.data[0], 64);
	check_int(v.data[1], 1);
	check_int(v.data[2], 2);
	check_int(v.data[3], 3);
	check_int(v.data[4], 36);

	dv_erase(&v, 1, 3);
	check_int(v.size, 2);
	check_int(v.data[0], 64);
	check_int(v.data[1], 36);

	dv_resize(&v, 3);
	v.data[0] = 45;
	v.data[1] = 35;
	v.data[2] = 45;
	dv_remove(&v, 45);
	check_int(v.size, 1);
	check_int(v.data[0], 35);

	dv_resize(&v, 3);
	v.data[0] = 45;
	v.data[1] = 35;
	v.data[2] = 45;
	dv_find(v, 35, &idx);
	check_int(idx, 1);
	dv_find(v, 55, &idx);
	check_int(idx, -1);

	dv_resize(&v, 3);
	v.data[0] = 1;
	v.data[1] = 2;
	v.data[2] = 3;
	check(dv_begins_with(v, generate()));
	check(dv_equals(v, generate()));
	check(dv_cmp(v, generate()) == 0);
	check(dv_ends_with(v, generate()));

	dv_resize(&v, 4);
	v.data[3] = 5;
	check(dv_begins_with(v, generate()));
	check(dv_cmp(v, generate()) > 0);
	check(!dv_ends_with(v, generate()));

	v.data[2] = 1;
	check(!dv_begins_with(v, generate()));
	check(dv_cmp(v, generate()) < 0);

	dv_resize(&v, 4);
	v.data[0] = 5;
	v.data[1] = 1;
	v.data[2] = 2;
	v.data[3] = 3;
	check(dv_ends_with(v, generate()));

	v.data[2] = 5;
	check(!dv_ends_with(v, generate()));

	return 0;
}