summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_subr.c
diff options
context:
space:
mode:
authorjlemon <jlemon@FreeBSD.org>2001-02-16 14:31:49 +0000
committerjlemon <jlemon@FreeBSD.org>2001-02-16 14:31:49 +0000
commitc7ba1f9694fa8b0335305d6b36f179a03a55fee9 (patch)
tree62247d63383508e8961a98d00ff66b72291651a0 /sys/kern/kern_subr.c
parent65a56b38f14e356f543283221b0cc6ff39d53725 (diff)
downloadFreeBSD-src-c7ba1f9694fa8b0335305d6b36f179a03a55fee9.zip
FreeBSD-src-c7ba1f9694fa8b0335305d6b36f179a03a55fee9.tar.gz
Introduce copyinfrom and copyinstrfrom, which can copy data from either
user or kernel space. This will allow layering of os-compat (e.g.: linux) system calls. Apply the changes to mount.
Diffstat (limited to 'sys/kern/kern_subr.c')
-rw-r--r--sys/kern/kern_subr.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/sys/kern/kern_subr.c b/sys/kern/kern_subr.c
index 6b51c5c..ac4bad6 100644
--- a/sys/kern/kern_subr.c
+++ b/sys/kern/kern_subr.c
@@ -387,3 +387,39 @@ uio_yield()
PICKUP_GIANT();
splx(s);
}
+
+int
+copyinfrom(const void *src, void *dst, size_t len, int seg)
+{
+ int error = 0;
+
+ switch (seg) {
+ case UIO_USERSPACE:
+ error = copyin(src, dst, len);
+ break;
+ case UIO_SYSSPACE:
+ bcopy(src, dst, len);
+ break;
+ default:
+ panic("copyinfrom: bad seg %d\n", seg);
+ }
+ return (error);
+}
+
+int
+copyinstrfrom(const void *src, void *dst, size_t len, size_t *copied, int seg)
+{
+ int error = 0;
+
+ switch (seg) {
+ case UIO_USERSPACE:
+ error = copyinstr(src, dst, len, copied);
+ break;
+ case UIO_SYSSPACE:
+ error = copystr(src, dst, len, copied);
+ break;
+ default:
+ panic("copyinstrfrom: bad seg %d\n", seg);
+ }
+ return (error);
+}
OpenPOWER on IntegriCloud