summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2008-04-08 09:45:49 +0000
committerkib <kib@FreeBSD.org>2008-04-08 09:45:49 +0000
commiteb77b477b46f73f94adb6a57311b621ff373ec0d (patch)
tree27aa9d496f901903e5e31001326287aab78c768b /sys/i386
parentc2a6bed59d13cefde1d4e2483c484d2ff7f534dd (diff)
downloadFreeBSD-src-eb77b477b46f73f94adb6a57311b621ff373ec0d.zip
FreeBSD-src-eb77b477b46f73f94adb6a57311b621ff373ec0d.tar.gz
Implement the linux syscalls
openat, mkdirat, mknodat, fchownat, futimesat, fstatat, unlinkat, renameat, linkat, symlinkat, readlinkat, fchmodat, faccessat. Submitted by: rdivacky Sponsored by: Google Summer of Code 2007 Tested by: pho
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/ibcs2/ibcs2_util.c2
-rw-r--r--sys/i386/linux/linux.h2
-rw-r--r--sys/i386/linux/linux_dummy.c12
-rw-r--r--sys/i386/linux/linux_sysvec.c2
-rw-r--r--sys/i386/linux/syscalls.master37
5 files changed, 26 insertions, 29 deletions
diff --git a/sys/i386/ibcs2/ibcs2_util.c b/sys/i386/ibcs2/ibcs2_util.c
index 9f385b7..d63a640 100644
--- a/sys/i386/ibcs2/ibcs2_util.c
+++ b/sys/i386/ibcs2/ibcs2_util.c
@@ -56,5 +56,5 @@ ibcs2_emul_find(struct thread *td, char *path, enum uio_seg pathseg,
{
return (kern_alternate_path(td, ibcs2_emul_path, path, pathseg, pbuf,
- cflag));
+ cflag, AT_FDCWD));
}
diff --git a/sys/i386/linux/linux.h b/sys/i386/linux/linux.h
index e689475..4d556c6 100644
--- a/sys/i386/linux/linux.h
+++ b/sys/i386/linux/linux.h
@@ -550,8 +550,6 @@ int linux_ioctl_unregister_handler(struct linux_ioctl_handler *h);
#define LINUX_F_WRLCK 1
#define LINUX_F_UNLCK 2
-#define LINUX_AT_FDCWD -100
-
/*
* mount flags
*/
diff --git a/sys/i386/linux/linux_dummy.c b/sys/i386/linux/linux_dummy.c
index fec4f65..f4e267c 100644
--- a/sys/i386/linux/linux_dummy.c
+++ b/sys/i386/linux/linux_dummy.c
@@ -87,18 +87,6 @@ DUMMY(inotify_init);
DUMMY(inotify_add_watch);
DUMMY(inotify_rm_watch);
DUMMY(migrate_pages);
-DUMMY(mkdirat);
-DUMMY(mknodat);
-DUMMY(fchownat);
-DUMMY(futimesat);
-DUMMY(fstatat64);
-DUMMY(unlinkat);
-DUMMY(renameat);
-DUMMY(linkat);
-DUMMY(symlinkat);
-DUMMY(readlinkat);
-DUMMY(fchmodat);
-DUMMY(faccessat);
DUMMY(pselect6);
DUMMY(ppoll);
DUMMY(unshare);
diff --git a/sys/i386/linux/linux_sysvec.c b/sys/i386/linux/linux_sysvec.c
index df3f8d1..2de5a6f 100644
--- a/sys/i386/linux/linux_sysvec.c
+++ b/sys/i386/linux/linux_sysvec.c
@@ -777,7 +777,7 @@ exec_linux_imgact_try(struct image_params *imgp)
*/
if ((error = exec_shell_imgact(imgp)) == 0) {
linux_emul_convpath(FIRST_THREAD_IN_PROC(imgp->proc),
- imgp->interpreter_name, UIO_SYSSPACE, &rpath, 0);
+ imgp->interpreter_name, UIO_SYSSPACE, &rpath, 0, AT_FDCWD);
if (rpath != NULL) {
len = strlen(rpath) + 1;
diff --git a/sys/i386/linux/syscalls.master b/sys/i386/linux/syscalls.master
index af0755a..98df86d 100644
--- a/sys/i386/linux/syscalls.master
+++ b/sys/i386/linux/syscalls.master
@@ -475,20 +475,31 @@
292 AUE_NULL STD { int linux_inotify_add_watch(void); }
293 AUE_NULL STD { int linux_inotify_rm_watch(void); }
294 AUE_NULL STD { int linux_migrate_pages(void); }
-295 AUE_OPEN_RWTC STD { int linux_openat(l_int dfd, char *filename, \
+295 AUE_OPEN_RWTC STD { int linux_openat(l_int dfd, const char *filename, \
l_int flags, l_int mode); }
-296 AUE_NULL STD { int linux_mkdirat(void); }
-297 AUE_NULL STD { int linux_mknodat(void); }
-298 AUE_NULL STD { int linux_fchownat(void); }
-299 AUE_NULL STD { int linux_futimesat(void); }
-300 AUE_NULL STD { int linux_fstatat64(void); }
-301 AUE_NULL STD { int linux_unlinkat(void); }
-302 AUE_NULL STD { int linux_renameat(void); }
-303 AUE_NULL STD { int linux_linkat(void); }
-304 AUE_NULL STD { int linux_symlinkat(void); }
-305 AUE_NULL STD { int linux_readlinkat(void); }
-306 AUE_NULL STD { int linux_fchmodat(void); }
-307 AUE_NULL STD { int linux_faccessat(void); }
+296 AUE_MKDIRAT STD { int linux_mkdirat(l_int dfd, const char *pathname, \
+ l_int mode); }
+297 AUE_MKNODAT STD { int linux_mknodat(l_int dfd, const char *filename, \
+ l_int mode, l_uint dev); }
+298 AUE_FCHOWNAT STD { int linux_fchownat(l_int dfd, const char *filename, \
+ l_uid16_t uid, l_gid16_t gid, l_int flag); }
+299 AUE_FUTIMESAT STD { int linux_futimesat(l_int dfd, char *filename, \
+ struct l_timeval *utimes); }
+300 AUE_FSTATAT STD { int linux_fstatat64(l_int dfd, char *pathname, \
+ struct l_stat64 *statbuf, l_int flag); }
+301 AUE_UNLINKAT STD { int linux_unlinkat(l_int dfd, const char *pathname, \
+ l_int flag); }
+302 AUE_RENAMEAT STD { int linux_renameat(l_int olddfd, const char *oldname, \
+ l_int newdfd, const char *newname); }
+303 AUE_LINKAT STD { int linux_linkat(l_int olddfd, const char *oldname, \
+ l_int newdfd, const char *newname, l_int flags); }
+304 AUE_SYMLINKAT STD { int linux_symlinkat(const char *oldname, l_int newdfd, \
+ const char *newname); }
+305 AUE_READLINKAT STD { int linux_readlinkat(l_int dfd, const char *path, \
+ char *buf, l_int bufsiz); }
+306 AUE_FCHMODAT STD { int linux_fchmodat(l_int dfd, const char *filename, \
+ l_mode_t mode); }
+307 AUE_FACCESSAT STD { int linux_faccessat(l_int dfd, const char *filename, l_int mode); }
308 AUE_NULL STD { int linux_pselect6(void); }
309 AUE_NULL STD { int linux_ppoll(void); }
310 AUE_NULL STD { int linux_unshare(void); }
OpenPOWER on IntegriCloud