DragonFly On-Line Manual Pages


VOP_ATTRIB(9)	      DragonFly Kernel Developer's Manual	 VOP_ATTRIB(9)

NAME

VOP_GETATTR, VOP_SETATTR -- get and set attributes on a file or directory

SYNOPSIS

#include <sys/param.h> #include <sys/vnode.h> int VOP_GETATTR(struct vnode *vp, struct vattr *vap, struct ucred *cred, struct proc *p); int VOP_SETATTR(struct vnode *vp, struct vattr *vap, struct ucred *cred, struct proc *p);

DESCRIPTION

These entry points manipulate various attributes of a file or directory, including file permissions, owner, group, size, access time and modifica- tion time. The arguments are: vp the vnode of the file vap the attributes of the file cred the user credentials of the calling process p the process Attributes which are not being modified by VOP_SETATTR(9) should be set to the value VNOVAL.

LOCKS

VOP_GETATTR(9) expects the vnode to be locked on entry and will leave the vnode locked on return. VOP_SETATTR(9) expects the vnode to be locked on entry and will leave the vnode locked on return.

RETURN VALUES

VOP_GETATTR(9) returns information about the file in *vap. VOP_SETATTR(9) returns zero if the attributes were changed successfully, otherwise an appropriate error is returned.

PSEUDOCODE

int vop_getattr(struct vnode *vp, struct vattr *vap, struct ucred *cred, struct proc *p) { /* * Fill in the contents of *vap with information from * the filesystem. */ ...; return 0; } int vop_setattr(struct vnode *vp, struct vattr *vap, struct ucred *cred, struct proc *p) { /* * Check for unsettable attributes. */ if ((vap->va_type != VNON) || (vap->va_nlink != VNOVAL) || (vap->va_fsid != VNOVAL) || (vap->va_fileid != VNOVAL) || (vap->va_blocksize != VNOVAL) || (vap->va_rdev != VNOVAL) || ((int)vap->va_bytes != VNOVAL) || (vap->va_gen != VNOVAL)) { return (EINVAL); } if (vap->va_flags != VNOVAL) { /* * Set the immutable and append flags of the file. */ } if (vap->va_uid != (uid_t)VNOVAL || vap->va_gid != (gid_t)VNOVAL) { /* * Change owner and/or group of the file. */ } if (vap->va_size != VNOVAL) { /* * Truncate the file to the specified size. */ } if (vap->va_atime.tv_sec != VNOVAL || vap->va_mtime.tv_sec != VNOVAL) { /* * Change access and/or modification time of file. */ } if (vap->va_mode != (mode_t)VNOVAL) { /* * Change permissions of file. */ } return 0; }

ERRORS

[EPERM] The file is immutable [EACCES] Permission denied [EROFS] The filesystem is readonly

SEE ALSO

vnode(9), VOP_ACCESS(9)

AUTHORS

This man page was written by Doug Rabson. DragonFly 3.7 July 24, 1996 DragonFly 3.7