/*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); }
/*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)); }
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; }