summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authormux <mux@FreeBSD.org>2002-05-05 23:47:41 +0000
committermux <mux@FreeBSD.org>2002-05-05 23:47:41 +0000
commitb2f5ccfa53b23c3e6406e04932e9bcf5bed60eaa (patch)
treeee73278f756ea404482f718fab8e7bd5320a4ceb /sys
parent07314cd73a922e08912adf63c1b4845e85a54563 (diff)
downloadFreeBSD-src-b2f5ccfa53b23c3e6406e04932e9bcf5bed60eaa.zip
FreeBSD-src-b2f5ccfa53b23c3e6406e04932e9bcf5bed60eaa.tar.gz
Add the lchflags(2) syscall.
Reviewed by: rwatson
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/init_sysent.c3
-rw-r--r--sys/kern/syscalls.c3
-rw-r--r--sys/kern/vfs_extattr.c23
-rw-r--r--sys/kern/vfs_syscalls.c23
-rw-r--r--sys/sys/stat.h1
-rw-r--r--sys/sys/syscall.h5
-rw-r--r--sys/sys/syscall.mk5
-rw-r--r--sys/sys/sysproto.h7
8 files changed, 63 insertions, 7 deletions
diff --git a/sys/kern/init_sysent.c b/sys/kern/init_sysent.c
index b212aaf..567ce4b 100644
--- a/sys/kern/init_sysent.c
+++ b/sys/kern/init_sysent.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: src/sys/kern/syscalls.master,v 1.109 2002/04/14 05:31:47 alc Exp
+ * created from FreeBSD: src/sys/kern/syscalls.master,v 1.111 2002/05/05 23:37:44 mux Exp
*/
#include "opt_compat.h"
@@ -413,4 +413,5 @@ struct sysent sysent[] = {
{ 0, (sy_call_t *)nosys }, /* 388 = __mac_set_fd */
{ 0, (sy_call_t *)nosys }, /* 389 = __mac_set_file */
{ AS(kenv_args), (sy_call_t *)kenv }, /* 390 = kenv */
+ { AS(lchflags_args), (sy_call_t *)lchflags }, /* 391 = lchflags */
};
diff --git a/sys/kern/syscalls.c b/sys/kern/syscalls.c
index 34a1382..7b0b49e 100644
--- a/sys/kern/syscalls.c
+++ b/sys/kern/syscalls.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: src/sys/kern/syscalls.master,v 1.109 2002/04/14 05:31:47 alc Exp
+ * created from FreeBSD: src/sys/kern/syscalls.master,v 1.111 2002/05/05 23:37:44 mux Exp
*/
char *syscallnames[] = {
@@ -398,4 +398,5 @@ char *syscallnames[] = {
"#388", /* 388 = __mac_set_fd */
"#389", /* 389 = __mac_set_file */
"kenv", /* 390 = kenv */
+ "lchflags", /* 391 = lchflags */
};
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c
index 1db5510..f256e9e 100644
--- a/sys/kern/vfs_extattr.c
+++ b/sys/kern/vfs_extattr.c
@@ -2894,6 +2894,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_
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 1db5510..f256e9e 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -2894,6 +2894,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_
diff --git a/sys/sys/stat.h b/sys/sys/stat.h
index a53960d..00c8de0 100644
--- a/sys/sys/stat.h
+++ b/sys/sys/stat.h
@@ -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);
diff --git a/sys/sys/syscall.h b/sys/sys/syscall.h
index c336453..31c0c9a 100644
--- a/sys/sys/syscall.h
+++ b/sys/sys/syscall.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: src/sys/kern/syscalls.master,v 1.109 2002/04/14 05:31:47 alc Exp
+ * created from FreeBSD: src/sys/kern/syscalls.master,v 1.111 2002/05/05 23:37:44 mux Exp
*/
#define SYS_syscall 0
@@ -304,4 +304,5 @@
#define SYS_thread_wakeup 382
#define SYS_kse_yield 383
#define SYS_kenv 390
-#define SYS_MAXSYSCALL 391
+#define SYS_lchflags 391
+#define SYS_MAXSYSCALL 392
diff --git a/sys/sys/syscall.mk b/sys/sys/syscall.mk
index 4c25a9e..d269daf 100644
--- a/sys/sys/syscall.mk
+++ b/sys/sys/syscall.mk
@@ -1,7 +1,7 @@
# FreeBSD system call names.
# DO NOT EDIT-- this file is automatically generated.
# $FreeBSD$
-# created from FreeBSD: src/sys/kern/syscalls.master,v 1.109 2002/04/14 05:31:47 alc Exp
+# created from FreeBSD: src/sys/kern/syscalls.master,v 1.111 2002/05/05 23:37:44 mux Exp
MIASM = \
syscall.o \
exit.o \
@@ -253,4 +253,5 @@ MIASM = \
kse_new.o \
thread_wakeup.o \
kse_yield.o \
- kenv.o
+ kenv.o \
+ lchflags.o
diff --git a/sys/sys/sysproto.h b/sys/sys/sysproto.h
index 80385c0..011dc92 100644
--- a/sys/sys/sysproto.h
+++ b/sys/sys/sysproto.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: src/sys/kern/syscalls.master,v 1.109 2002/04/14 05:31:47 alc Exp
+ * created from FreeBSD: src/sys/kern/syscalls.master,v 1.111 2002/05/05 23:37:44 mux Exp
*/
#ifndef _SYS_SYSPROTO_H_
@@ -1111,6 +1111,10 @@ struct kenv_args {
char value_l_[PADL_(char *)]; char * value; char value_r_[PADR_(char *)];
char len_l_[PADL_(int)]; int len; char len_r_[PADR_(int)];
};
+struct lchflags_args {
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
+ char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
+};
int nosys(struct thread *, struct nosys_args *);
void sys_exit(struct thread *, struct sys_exit_args *);
int fork(struct thread *, struct fork_args *);
@@ -1361,6 +1365,7 @@ int kse_new(struct thread *, struct kse_new_args *);
int thread_wakeup(struct thread *, struct thread_wakeup_args *);
int kse_yield(struct thread *, struct kse_yield_args *);
int kenv(struct thread *, struct kenv_args *);
+int lchflags(struct thread *, struct lchflags_args *);
#ifdef COMPAT_43
OpenPOWER on IntegriCloud