Index: kern/vfs_syscalls.c =================================================================== RCS file: /space2/ncvs/src/sys/kern/vfs_syscalls.c,v retrieving revision 1.249 diff -u -p -r1.249 vfs_syscalls.c --- kern/vfs_syscalls.c 23 Apr 2002 01:27:38 -0000 1.249 +++ kern/vfs_syscalls.c 2 May 2002 15:27:14 -0000 @@ -2893,6 +2893,29 @@ chflags(td, uap) } /* + * Same as chflags() but doesn't follow symlinks. + */ +int +lchflags(td, uap) + struct thread *td; + register struct lchflags_args /* { + syscallarg(char *) path; + syscallarg(int) flags; + } */ *uap; +{ + int error; + struct nameidata nd; + + NDINIT(&nd, LOOKUP, NOFOLLOW, UIO_USERSPACE, SCARG(uap, path), td); + if ((error = namei(&nd)) != 0) + return (error); + NDFREE(&nd, NDF_ONLY_PNBUF); + error = setfflags(td, nd.ni_vp, SCARG(uap, flags)); + vrele(nd.ni_vp); + return error; +} + +/* * Change flags of a file given a file descriptor. */ #ifndef _SYS_SYSPROTO_H_ Index: kern/syscalls.master =================================================================== RCS file: /space2/ncvs/src/sys/kern/syscalls.master,v retrieving revision 1.110 diff -u -p -r1.110 syscalls.master --- kern/syscalls.master 17 Apr 2002 13:05:13 -0000 1.110 +++ kern/syscalls.master 30 Apr 2002 22:04:32 -0000 @@ -561,3 +561,4 @@ 389 UNIMPL BSD __mac_set_file 390 STD BSD { int kenv(int what, const char *name, char *value, \ int len); } +391 STD BSD { int lchflags(const char *path, int flags); } Index: sys/stat.h =================================================================== RCS file: /space2/ncvs/src/sys/sys/stat.h,v retrieving revision 1.23 diff -u -p -r1.23 stat.h --- sys/stat.h 19 Mar 2002 20:18:41 -0000 1.23 +++ sys/stat.h 2 May 2002 15:30:44 -0000 @@ -255,6 +255,7 @@ mode_t umask(mode_t); #ifndef _POSIX_SOURCE int chflags(const char *, u_long); +int lchflags(const char *, int); int fchflags(int, u_long); int fchmod(int, mode_t); int lchmod(const char *, mode_t);