PERFORCE change 122222 for review
Roman Divacky
rdivacky at FreeBSD.org
Sun Jun 24 08:57:56 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=122222
Change 122222 by rdivacky at rdivacky_witten on 2007/06/24 08:57:35
Add fstatat, futimesat, linkat, mkdirat, mkfifoat, mknodat, openat, readlinkat,
renameat, symlinkat and unlinkat.
Unlinkat AT_REMOVEDIR support is incomplete, we lack checking for non-emptiness
of the dir in question.
None if these is tested by something else but compilation.
Affected files ...
.. //depot/projects/soc2007/rdivacky/linux_at/sys/compat/linux/linux_file.c#12 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/kern/init_sysent.c#5 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/kern/syscalls.c#5 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/kern/syscalls.master#5 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/kern/systrace_args.c#5 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/kern/vfs_syscalls.c#28 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/sys/syscall.h#5 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/sys/syscall.mk#5 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/sys/syscallsubr.h#12 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/sys/sysproto.h#5 edit
Differences ...
==== //depot/projects/soc2007/rdivacky/linux_at/sys/compat/linux/linux_file.c#12 (text+ko) ====
@@ -1018,7 +1018,7 @@
args->newdfd, to, args->flags);
#endif
- error = kern_linkat(td, path, to, UIO_SYSSPACE, olddfd, newdfd);
+ error = kern_linkat(td, path, to, UIO_SYSSPACE, olddfd, newdfd, FOLLOW);
LFREEPATH(path);
LFREEPATH(to);
return (error);
==== //depot/projects/soc2007/rdivacky/linux_at/sys/kern/init_sysent.c#5 (text+ko) ====
@@ -508,4 +508,15 @@
{ AS(fchmodat_args), (sy_call_t *)fchmodat, AUE_CHMOD, NULL, 0, 0 }, /* 476 = fchmodat */
{ AS(fchownat_args), (sy_call_t *)fchownat, AUE_CHOWN, NULL, 0, 0 }, /* 477 = fchownat */
{ AS(fexecve_args), (sy_call_t *)fexecve, AUE_EXECVE, NULL, 0, 0 }, /* 478 = fexecve */
+ { AS(fstatat_args), (sy_call_t *)fstatat, AUE_STAT, NULL, 0, 0 }, /* 479 = fstatat */
+ { AS(futimesat_args), (sy_call_t *)futimesat, AUE_UTIMES, NULL, 0, 0 }, /* 480 = futimesat */
+ { AS(linkat_args), (sy_call_t *)linkat, AUE_LINK, NULL, 0, 0 }, /* 481 = linkat */
+ { AS(mkdirat_args), (sy_call_t *)mkdirat, AUE_MKDIR, NULL, 0, 0 }, /* 482 = mkdirat */
+ { AS(mkfifoat_args), (sy_call_t *)mkfifoat, AUE_MKFIFO, NULL, 0, 0 }, /* 483 = mkfifoat */
+ { AS(mknodat_args), (sy_call_t *)mknodat, AUE_MKNOD, NULL, 0, 0 }, /* 484 = mknodat */
+ { AS(openat_args), (sy_call_t *)openat, AUE_OPEN_RWTC, NULL, 0, 0 }, /* 485 = openat */
+ { AS(readlinkat_args), (sy_call_t *)readlinkat, AUE_READLINK, NULL, 0, 0 }, /* 486 = readlinkat */
+ { AS(renameat_args), (sy_call_t *)renameat, AUE_RENAME, NULL, 0, 0 }, /* 487 = renameat */
+ { AS(symlinkat_args), (sy_call_t *)symlinkat, AUE_SYMLINK, NULL, 0, 0 }, /* 488 = symlinkat */
+ { AS(unlinkat_args), (sy_call_t *)unlinkat, AUE_UNLINK, NULL, 0, 0 }, /* 489 = unlinkat */
};
==== //depot/projects/soc2007/rdivacky/linux_at/sys/kern/syscalls.c#5 (text+ko) ====
@@ -486,4 +486,15 @@
"fchmodat", /* 476 = fchmodat */
"fchownat", /* 477 = fchownat */
"fexecve", /* 478 = fexecve */
+ "fstatat", /* 479 = fstatat */
+ "futimesat", /* 480 = futimesat */
+ "linkat", /* 481 = linkat */
+ "mkdirat", /* 482 = mkdirat */
+ "mkfifoat", /* 483 = mkfifoat */
+ "mknodat", /* 484 = mknodat */
+ "openat", /* 485 = openat */
+ "readlinkat", /* 486 = readlinkat */
+ "renameat", /* 487 = renameat */
+ "symlinkat", /* 488 = symlinkat */
+ "unlinkat", /* 489 = unlinkat */
};
==== //depot/projects/soc2007/rdivacky/linux_at/sys/kern/syscalls.master#5 (text+ko) ====
@@ -839,5 +839,17 @@
476 AUE_CHMOD STD { int fchmodat(int dirfd, char *path, mode_t mode, int flag); }
477 AUE_CHOWN STD { int fchownat(int dirfd, char *path, uid_t uid, gid_t gid, int flag); }
478 AUE_EXECVE STD { int fexecve(int fd, char **argv, char **envv); }
+479 AUE_STAT STD { int fstatat(int fd, char *path, struct stat *buf, int flag); }
+480 AUE_UTIMES STD { int futimesat(int fd, char *path, struct timeval *times); }
+481 AUE_LINK STD { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }
+482 AUE_MKDIR STD { int mkdirat(int fd, char *path, mode_t mode); }
+483 AUE_MKFIFO STD { int mkfifoat(int fd, char *path, mode_t mode); }
+484 AUE_MKNOD STD { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
+; XXX: see the comment for open
+485 AUE_OPEN_RWTC STD { int openat(int fd, char *path, int flag, mode_t mode); }
+486 AUE_READLINK STD { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); }
+487 AUE_RENAME STD { int renameat(int oldfd, char *old, int newfd, char *new); }
+488 AUE_SYMLINK STD { int symlinkat(char *path1, int fd, char *path2); }
+489 AUE_UNLINK STD { int unlinkat(int fd, char *path, int flag); }
; Please copy any additions and changes to the following compatability tables:
; sys/compat/freebsd32/syscalls.master
==== //depot/projects/soc2007/rdivacky/linux_at/sys/kern/systrace_args.c#5 (text+ko) ====
@@ -2845,6 +2845,112 @@
*n_args = 3;
break;
}
+ /* fstatat */
+ case 479: {
+ struct fstatat_args *p = params;
+ iarg[0] = p->fd; /* int */
+ uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[2] = (intptr_t) p->buf; /* struct stat * */
+ iarg[3] = p->flag; /* int */
+ *n_args = 4;
+ break;
+ }
+ /* futimesat */
+ case 480: {
+ struct futimesat_args *p = params;
+ iarg[0] = p->fd; /* int */
+ uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[2] = (intptr_t) p->times; /* struct timeval * */
+ *n_args = 3;
+ break;
+ }
+ /* linkat */
+ case 481: {
+ struct linkat_args *p = params;
+ iarg[0] = p->fd1; /* int */
+ uarg[1] = (intptr_t) p->path1; /* char * */
+ iarg[2] = p->fd2; /* int */
+ uarg[3] = (intptr_t) p->path2; /* char * */
+ iarg[4] = p->flag; /* int */
+ *n_args = 5;
+ break;
+ }
+ /* mkdirat */
+ case 482: {
+ struct mkdirat_args *p = params;
+ iarg[0] = p->fd; /* int */
+ uarg[1] = (intptr_t) p->path; /* char * */
+ iarg[2] = p->mode; /* mode_t */
+ *n_args = 3;
+ break;
+ }
+ /* mkfifoat */
+ case 483: {
+ struct mkfifoat_args *p = params;
+ iarg[0] = p->fd; /* int */
+ uarg[1] = (intptr_t) p->path; /* char * */
+ iarg[2] = p->mode; /* mode_t */
+ *n_args = 3;
+ break;
+ }
+ /* mknodat */
+ case 484: {
+ struct mknodat_args *p = params;
+ iarg[0] = p->fd; /* int */
+ uarg[1] = (intptr_t) p->path; /* char * */
+ iarg[2] = p->mode; /* mode_t */
+ iarg[3] = p->dev; /* dev_t */
+ *n_args = 4;
+ break;
+ }
+ /* openat */
+ case 485: {
+ struct openat_args *p = params;
+ iarg[0] = p->fd; /* int */
+ uarg[1] = (intptr_t) p->path; /* char * */
+ iarg[2] = p->flag; /* int */
+ iarg[3] = p->mode; /* mode_t */
+ *n_args = 4;
+ break;
+ }
+ /* readlinkat */
+ case 486: {
+ struct readlinkat_args *p = params;
+ iarg[0] = p->fd; /* int */
+ uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[2] = (intptr_t) p->buf; /* char * */
+ uarg[3] = p->bufsize; /* size_t */
+ *n_args = 4;
+ break;
+ }
+ /* renameat */
+ case 487: {
+ struct renameat_args *p = params;
+ iarg[0] = p->oldfd; /* int */
+ uarg[1] = (intptr_t) p->old; /* char * */
+ iarg[2] = p->newfd; /* int */
+ uarg[3] = (intptr_t) p->new; /* char * */
+ *n_args = 4;
+ break;
+ }
+ /* symlinkat */
+ case 488: {
+ struct symlinkat_args *p = params;
+ uarg[0] = (intptr_t) p->path1; /* char * */
+ iarg[1] = p->fd; /* int */
+ uarg[2] = (intptr_t) p->path2; /* char * */
+ *n_args = 3;
+ break;
+ }
+ /* unlinkat */
+ case 489: {
+ struct unlinkat_args *p = params;
+ iarg[0] = p->fd; /* int */
+ uarg[1] = (intptr_t) p->path; /* char * */
+ iarg[2] = p->flag; /* int */
+ *n_args = 3;
+ break;
+ }
default:
*n_args = 0;
break;
==== //depot/projects/soc2007/rdivacky/linux_at/sys/kern/vfs_syscalls.c#28 (text+ko) ====
@@ -955,7 +955,21 @@
return kern_open(td, uap->path, UIO_USERSPACE, uap->flags, uap->mode);
}
+#ifndef _SYS_SYSPROTO_H_
+struct openat_args {
+ int fd;
+ char *path;
+ int flag;
+ int mode;
+};
+#endif
int
+openat(struct thread *td, struct openat_args *args)
+{
+ return kern_openat(td, args->path, UIO_USERSPACE, args->flag, args->mode, args->fd);
+}
+
+int
kern_open(struct thread *td, char *path, enum uio_seg pathseg, int flags,
int mode)
{
@@ -1200,6 +1214,19 @@
return (kern_mknod(td, uap->path, UIO_USERSPACE, uap->mode, uap->dev));
}
+#ifndef _SYS_SYSPROTO_H_
+struct mknodat_args {
+ char *path;
+ mode_t mode;
+ dev_t dev;
+};
+#endif
+int
+mknodat(struct thread *td, struct mknodat_args *args)
+{
+ return kern_mknodat(td, args->path, UIO_USERSPACE, args->mode, args->dev, args->fd);
+}
+
int
kern_mknod(struct thread *td, char *path, enum uio_seg pathseg, int mode,
int dev)
@@ -1348,6 +1375,19 @@
return (kern_mkfifo(td, uap->path, UIO_USERSPACE, uap->mode));
}
+#ifndef _SYS_SYSPROTO_H_
+struct mkfifoat_args {
+ int fd;
+ char *path;
+ mode_t mode;
+};
+#endif
+int
+mkfifoat(struct thread *td, struct mkfifoat_args *args)
+{
+ return kern_mkfifoat(td, args->path, UIO_USERSPACE, args->mode, args->fd);
+}
+
int
kern_mkfifo(struct thread *td, char *path, enum uio_seg pathseg, int mode)
{
@@ -1453,6 +1493,27 @@
return (error);
}
+#ifndef _SYS_SYSPROTO_H_
+struct linkat_args {
+ int fd1;
+ char *path1;
+ int fd2;
+ char *path2;
+ int flag;
+};
+#endif
+int
+linkat(struct thread *td, struct linkat_args *args)
+{
+ if (args->flag & ~AT_SYMLINK_NOFOLLOW)
+ return (EINVAL);
+
+ if (args->flag & AT_SYMLINK_NOFOLLOW)
+ return kern_linkat(td, args->path1, args->path2, UIO_USERSPACE, args->fd1, args->fd2, 0);
+ else
+ return kern_linkat(td, args->path1, args->path2, UIO_USERSPACE, args->fd1, args->fd2, FOLLOW);
+}
+
static int hardlink_check_uid = 0;
SYSCTL_INT(_security_bsd, OID_AUTO, hardlink_check_uid, CTLFLAG_RW,
&hardlink_check_uid, 0,
@@ -1495,12 +1556,12 @@
int
kern_link(struct thread *td, char *path, char *link, enum uio_seg segflg)
{
- return kern_linkat(td, path, link, segflg, AT_FDCWD, AT_FDCWD);
+ return kern_linkat(td, path, link, segflg, AT_FDCWD, AT_FDCWD, FOLLOW);
}
int
kern_linkat(struct thread *td, char *path, char *link, enum uio_seg segflg,
- int olddirfd, int newdirfd)
+ int olddirfd, int newdirfd, int follow)
{
struct nameidata ndp, ndl;
int error;
@@ -1514,7 +1575,7 @@
if (error && !kern_absolute_path(path, segflg))
return (error);
- NDINIT_AT(&ndp, LOOKUP, ((error) ? ATBADF : 0) | FOLLOW | MPSAFE
+ NDINIT_AT(&ndp, LOOKUP, ((error) ? ATBADF : 0) | follow | MPSAFE
| AUDITVNODE1, segflg, path, td, pdir_vn);
error = kern_get_at(td, newdirfd, &ldir_vn);
@@ -1601,7 +1662,20 @@
return (kern_symlink(td, uap->path, uap->link, UIO_USERSPACE));
}
+#ifndef _SYS_SYSPROTO_H_
+struct symlinkat_args {
+ char *path;
+ int fd;
+ char *path2;
+};
+#endif
int
+symlinkat(struct thread *td, struct symlinkat_args *args)
+{
+ return kern_symlinkat(td, args->path1, args->path2, UIO_USERSPACE, args->fd);
+}
+
+int
kern_symlink(struct thread *td, char *path, char *link, enum uio_seg segflg)
{
return kern_symlinkat(td, path, link, segflg, AT_FDCWD);
@@ -1761,6 +1835,25 @@
return (error);
}
+#ifndef _SYS_SYSPROTO_H_
+struct unlinkat_args {
+ int fd;
+ char *path;
+ int flag;
+};
+#endif
+int
+unlinkat(struct thread *td, struct unlinkat_args *args)
+{
+ if (args->flag & ~AT_REMOVEDIR)
+ return (EINVAL);
+
+ if (args->flag & AT_REMOVEDIR)
+ return kern_rmdirat(td, args->path, UIO_USERSPACE, args->fd);
+ else
+ return kern_unlinkat(td, args->path, UIO_USERSPACE, args->fd);
+}
+
int
kern_unlink(struct thread *td, char *path, enum uio_seg pathseg)
{
@@ -2249,6 +2342,26 @@
return (error);
}
+#ifndef _SYS_SYSPROTO_H_
+struct fstatat_args {
+ int fd;
+ char *path;
+ struct stat *buf;
+ int flag;
+}
+#endif
+int
+fstatat(struct thread *td, struct fstatat_args *args)
+{
+ if (args->flag & ~AT_SYMLINK_NOFOLLOW)
+ return (EINVAL);
+
+ if (args->flag & AT_SYMLINK_NOFOLLOW)
+ return kern_lstatat(td, args->path, UIO_USERSPACE, args->buf, args->fd);
+ else
+ return kern_statat(td, args->path, UIO_USERSPACE, args->buf, args->fd);
+}
+
int
kern_stat(struct thread *td, char *path, enum uio_seg pathseg, struct stat *sbp)
{
@@ -2506,6 +2619,20 @@
return (kern_readlink(td, uap->path, UIO_USERSPACE, uap->buf,
UIO_USERSPACE, uap->count));
}
+#ifndef _SYS_SYSPROTO_H_
+struct readlinkat_args {
+ int fd;
+ char *path;
+ char *buf;
+ size_t bufsize;
+};
+#endif
+ssize_t
+readlinkat(struct thread *td, struct readlinkat_args *args)
+{
+ return kern_readlinkat(td, args->path, UIO_USERSPACE,
+ args->buf, UIO_USERSPACE, args->bufsize, args->fd);
+}
int
kern_readlink(struct thread *td, char *path, enum uio_seg pathseg, char *buf,
@@ -3199,7 +3326,15 @@
UIO_USERSPACE));
}
+#ifndef _SYS_SYSPROTO_H_
+#endif
int
+futimesat(struct thread *td, struct futimesat_args *args)
+{
+ return kern_utimesat(td, args->path, UIO_USERSPACE, args->times, UIO_USERSPACE, args->fd);
+}
+
+int
kern_utimes(struct thread *td, char *path, enum uio_seg pathseg,
struct timeval *tptr, enum uio_seg tptrseg)
{
@@ -3581,6 +3716,20 @@
return (kern_rename(td, uap->from, uap->to, UIO_USERSPACE));
}
+#ifndef _SYS_SYSPROTO_H_
+struct renameat_args {
+ int oldfd;
+ char *old;
+ int newfd;
+ char *new;
+};
+#endif
+int
+renameat(struct thread *td, struct renameat_args *args)
+{
+ return kern_renameat(td, args->old, args->new, UIO_USERSPACE, args->oldfd, args->newfd);
+}
+
int
kern_rename(struct thread *td, char *from, char *to, enum uio_seg pathseg)
{
@@ -3737,6 +3886,19 @@
return (kern_mkdir(td, uap->path, UIO_USERSPACE, uap->mode));
}
+#ifndef _SYS_SYSPROTO_H_
+struct mkdirat_args {
+ int fd;
+ char *path;
+ mode_t mode;
+};
+#endif
+int
+mkdirat(struct thread *td, struct mkdirat_args *args)
+{
+ return kern_mkdirat(td, args->path, UIO_USERSPACE, args->mode, args->fd);
+}
+
int
kern_mkdir(struct thread *td, char *path, enum uio_seg segflg, int mode)
{
==== //depot/projects/soc2007/rdivacky/linux_at/sys/sys/syscall.h#5 (text+ko) ====
@@ -398,4 +398,15 @@
#define SYS_fchmodat 476
#define SYS_fchownat 477
#define SYS_fexecve 478
-#define SYS_MAXSYSCALL 479
+#define SYS_fstatat 479
+#define SYS_futimesat 480
+#define SYS_linkat 481
+#define SYS_mkdirat 482
+#define SYS_mkfifoat 483
+#define SYS_mknodat 484
+#define SYS_openat 485
+#define SYS_readlinkat 486
+#define SYS_renameat 487
+#define SYS_symlinkat 488
+#define SYS_unlinkat 489
+#define SYS_MAXSYSCALL 490
==== //depot/projects/soc2007/rdivacky/linux_at/sys/sys/syscall.mk#5 (text+ko) ====
@@ -339,4 +339,15 @@
faccessat.o \
fchmodat.o \
fchownat.o \
- fexecve.o
+ fexecve.o \
+ fstatat.o \
+ futimesat.o \
+ linkat.o \
+ mkdirat.o \
+ mkfifoat.o \
+ mknodat.o \
+ openat.o \
+ readlinkat.o \
+ renameat.o \
+ symlinkat.o \
+ unlinkat.o
==== //depot/projects/soc2007/rdivacky/linux_at/sys/sys/syscallsubr.h#12 (text+ko) ====
@@ -115,7 +115,7 @@
int kern_link(struct thread *td, char *path, char *link,
enum uio_seg segflg);
int kern_linkat(struct thread *td, char *path, char *link,
- enum uio_seg segflg, int olddfd, int newdfd);
+ enum uio_seg segflg, int olddfd, int newdfd, int follow);
int kern_lstat(struct thread *td, char *path, enum uio_seg pathseg,
struct stat *sbp);
int kern_lstatat(struct thread *td, char *path, enum uio_seg pathseg,
==== //depot/projects/soc2007/rdivacky/linux_at/sys/sys/sysproto.h#5 (text+ko) ====
@@ -1506,6 +1506,68 @@
char argv_l_[PADL_(char **)]; char ** argv; char argv_r_[PADR_(char **)];
char envv_l_[PADL_(char **)]; char ** envv; char envv_r_[PADR_(char **)];
};
+struct fstatat_args {
+ char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+ char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char buf_l_[PADL_(struct stat *)]; struct stat * buf; char buf_r_[PADR_(struct stat *)];
+ char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
+};
+struct futimesat_args {
+ char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+ char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char times_l_[PADL_(struct timeval *)]; struct timeval * times; char times_r_[PADR_(struct timeval *)];
+};
+struct linkat_args {
+ char fd1_l_[PADL_(int)]; int fd1; char fd1_r_[PADR_(int)];
+ char path1_l_[PADL_(char *)]; char * path1; char path1_r_[PADR_(char *)];
+ char fd2_l_[PADL_(int)]; int fd2; char fd2_r_[PADR_(int)];
+ char path2_l_[PADL_(char *)]; char * path2; char path2_r_[PADR_(char *)];
+ char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
+};
+struct mkdirat_args {
+ char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+ char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
+};
+struct mkfifoat_args {
+ char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+ char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
+};
+struct mknodat_args {
+ char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+ char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
+ char dev_l_[PADL_(dev_t)]; dev_t dev; char dev_r_[PADR_(dev_t)];
+};
+struct openat_args {
+ char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+ char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
+ char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
+};
+struct readlinkat_args {
+ char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+ char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)];
+ char bufsize_l_[PADL_(size_t)]; size_t bufsize; char bufsize_r_[PADR_(size_t)];
+};
+struct renameat_args {
+ char oldfd_l_[PADL_(int)]; int oldfd; char oldfd_r_[PADR_(int)];
+ char old_l_[PADL_(char *)]; char * old; char old_r_[PADR_(char *)];
+ char newfd_l_[PADL_(int)]; int newfd; char newfd_r_[PADR_(int)];
+ char new_l_[PADL_(char *)]; char * new; char new_r_[PADR_(char *)];
+};
+struct symlinkat_args {
+ char path1_l_[PADL_(char *)]; char * path1; char path1_r_[PADR_(char *)];
+ char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+ char path2_l_[PADL_(char *)]; char * path2; char path2_r_[PADR_(char *)];
+};
+struct unlinkat_args {
+ char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+ char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char flag_l_[PADL_(int)]; int flag; char flag_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 *);
@@ -1842,6 +1904,17 @@
int fchmodat(struct thread *, struct fchmodat_args *);
int fchownat(struct thread *, struct fchownat_args *);
int fexecve(struct thread *, struct fexecve_args *);
+int fstatat(struct thread *, struct fstatat_args *);
+int futimesat(struct thread *, struct futimesat_args *);
+int linkat(struct thread *, struct linkat_args *);
+int mkdirat(struct thread *, struct mkdirat_args *);
+int mkfifoat(struct thread *, struct mkfifoat_args *);
+int mknodat(struct thread *, struct mknodat_args *);
+int openat(struct thread *, struct openat_args *);
+int readlinkat(struct thread *, struct readlinkat_args *);
+int renameat(struct thread *, struct renameat_args *);
+int symlinkat(struct thread *, struct symlinkat_args *);
+int unlinkat(struct thread *, struct unlinkat_args *);
#ifdef COMPAT_43
@@ -2397,6 +2470,17 @@
#define SYS_AUE_fchmodat AUE_CHMOD
#define SYS_AUE_fchownat AUE_CHOWN
#define SYS_AUE_fexecve AUE_EXECVE
+#define SYS_AUE_fstatat AUE_STAT
+#define SYS_AUE_futimesat AUE_UTIMES
+#define SYS_AUE_linkat AUE_LINK
+#define SYS_AUE_mkdirat AUE_MKDIR
+#define SYS_AUE_mkfifoat AUE_MKFIFO
+#define SYS_AUE_mknodat AUE_MKNOD
+#define SYS_AUE_openat AUE_OPEN_RWTC
+#define SYS_AUE_readlinkat AUE_READLINK
+#define SYS_AUE_renameat AUE_RENAME
+#define SYS_AUE_symlinkat AUE_SYMLINK
+#define SYS_AUE_unlinkat AUE_UNLINK
#undef PAD_
#undef PADL_
More information about the p4-projects
mailing list