Date: Sun, 24 Jun 2007 08:57:55 GMT From: Roman Divacky <rdivacky@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 122222 for review Message-ID: <200706240857.l5O8vtqx099085@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=122222 Change 122222 by rdivacky@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_
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200706240857.l5O8vtqx099085>