PERFORCE change 111746 for review
Roman Divacky
rdivacky at FreeBSD.org
Fri Dec 15 10:04:29 PST 2006
http://perforce.freebsd.org/chv.cgi?CH=111746
Change 111746 by rdivacky at rdivacky_witten on 2006/12/15 18:04:05
Implement linux_utimes syscall.
Submitted by: "Scot Hetzel" <swhetzel at gmail.com>
Affected files ...
.. //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_dummy.c#6 edit
.. //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_proto.h#14 edit
.. //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_syscall.h#14 edit
.. //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_sysent.c#13 edit
.. //depot/projects/linuxolator/src/sys/amd64/linux32/syscalls.master#13 edit
.. //depot/projects/linuxolator/src/sys/compat/linux/linux_misc.c#46 edit
.. //depot/projects/linuxolator/src/sys/i386/linux/linux_dummy.c#6 edit
.. //depot/projects/linuxolator/src/sys/i386/linux/linux_proto.h#14 edit
.. //depot/projects/linuxolator/src/sys/i386/linux/linux_syscall.h#13 edit
.. //depot/projects/linuxolator/src/sys/i386/linux/linux_sysent.c#13 edit
.. //depot/projects/linuxolator/src/sys/i386/linux/syscalls.master#12 edit
Differences ...
==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_dummy.c#6 (text+ko) ====
@@ -75,7 +75,6 @@
DUMMY(timer_getoverrun);
DUMMY(timer_delete);
DUMMY(fstatfs64);
-DUMMY(utimes);
DUMMY(fadvise64_64);
DUMMY(mbind);
DUMMY(get_mempolicy);
==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_proto.h#14 (text+ko) ====
@@ -834,7 +834,8 @@
char sig_l_[PADL_(int)]; int sig; char sig_r_[PADR_(int)];
};
struct linux_utimes_args {
- register_t dummy;
+ char fname_l_[PADL_(char *)]; char * fname; char fname_r_[PADR_(char *)];
+ char tptr_l_[PADL_(struct l_timeval *)]; struct l_timeval * tptr; char tptr_r_[PADR_(struct l_timeval *)];
};
struct linux_fadvise64_64_args {
register_t dummy;
@@ -1400,7 +1401,7 @@
#define LINUX_SYS_AUE_linux_statfs64 AUE_NULL
#define LINUX_SYS_AUE_linux_fstatfs64 AUE_NULL
#define LINUX_SYS_AUE_linux_tgkill AUE_NULL
-#define LINUX_SYS_AUE_linux_utimes AUE_NULL
+#define LINUX_SYS_AUE_linux_utimes AUE_UTIMES
#define LINUX_SYS_AUE_linux_fadvise64_64 AUE_NULL
#define LINUX_SYS_AUE_linux_mbind AUE_NULL
#define LINUX_SYS_AUE_linux_get_mempolicy AUE_NULL
==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_syscall.h#14 (text+ko) ====
==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_sysent.c#13 (text+ko) ====
@@ -291,7 +291,7 @@
{ AS(linux_statfs64_args), (sy_call_t *)linux_statfs64, AUE_NULL, NULL, 0, 0 }, /* 268 = linux_statfs64 */
{ 0, (sy_call_t *)linux_fstatfs64, AUE_NULL, NULL, 0, 0 }, /* 269 = linux_fstatfs64 */
{ AS(linux_tgkill_args), (sy_call_t *)linux_tgkill, AUE_NULL, NULL, 0, 0 }, /* 270 = linux_tgkill */
- { 0, (sy_call_t *)linux_utimes, AUE_NULL, NULL, 0, 0 }, /* 271 = linux_utimes */
+ { AS(linux_utimes_args), (sy_call_t *)linux_utimes, AUE_UTIMES, NULL, 0, 0 }, /* 271 = linux_utimes */
{ 0, (sy_call_t *)linux_fadvise64_64, AUE_NULL, NULL, 0, 0 }, /* 272 = linux_fadvise64_64 */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 273 = */
{ 0, (sy_call_t *)linux_mbind, AUE_NULL, NULL, 0, 0 }, /* 274 = linux_mbind */
==== //depot/projects/linuxolator/src/sys/amd64/linux32/syscalls.master#13 (text+ko) ====
@@ -438,7 +438,8 @@
268 AUE_NULL STD { int linux_statfs64(char *path, struct l_statfs64_buf *buf); }
269 AUE_NULL STD { int linux_fstatfs64(void); }
270 AUE_NULL STD { int linux_tgkill(int tgid, int pid, int sig); }
-271 AUE_NULL STD { int linux_utimes(void); }
+271 AUE_UTIMES STD { int linux_utimes(char *fname, \
+ struct l_timeval *tptr); }
272 AUE_NULL STD { int linux_fadvise64_64(void); }
273 AUE_NULL UNIMPL
274 AUE_NULL STD { int linux_mbind(void); }
==== //depot/projects/linuxolator/src/sys/compat/linux/linux_misc.c#46 (text+ko) ====
@@ -788,6 +788,38 @@
LFREEPATH(fname);
return (error);
}
+
+int
+linux_utimes(struct thread *td, struct linux_utimes_args *args)
+{
+ l_timeval ltv[2];
+ struct timeval tv[2], *tvp = NULL;
+ char *fname;
+ int error;
+
+ LCONVPATHEXIST(td, args->fname, &fname);
+
+#ifdef DEBUG
+ if (ldebug(utimes))
+ printf(ARGS(utimes, "%s, *"), fname);
+#endif
+
+ if (args->tptr != NULL) {
+ if ((error = copyin(args->tptr, ltv, sizeof ltv))) {
+ LFREEPATH(fname);
+ return (error);
+ }
+ tv[0].tv_sec = ltv[0].tv_sec;
+ tv[0].tv_usec = ltv[0].tv_usec;
+ tv[1].tv_sec = ltv[1].tv_sec;
+ tv[1].tv_usec = ltv[1].tv_usec;
+ tvp = tv;
+ }
+
+ error = kern_utimes(td, fname, UIO_SYSSPACE, tvp, UIO_SYSSPACE);
+ LFREEPATH(fname);
+ return (error);
+}
#endif /* __i386__ || __amd64__ */
#define __WCLONE 0x80000000
==== //depot/projects/linuxolator/src/sys/i386/linux/linux_dummy.c#6 (text+ko) ====
@@ -71,7 +71,6 @@
DUMMY(epoll_wait);
DUMMY(remap_file_pages);
DUMMY(fstatfs64);
-DUMMY(utimes);
DUMMY(fadvise64_64);
DUMMY(mbind);
DUMMY(get_mempolicy);
==== //depot/projects/linuxolator/src/sys/i386/linux/linux_proto.h#14 (text+ko) ====
@@ -837,7 +837,8 @@
char sig_l_[PADL_(int)]; int sig; char sig_r_[PADR_(int)];
};
struct linux_utimes_args {
- register_t dummy;
+ char fname_l_[PADL_(char *)]; char * fname; char fname_r_[PADR_(char *)];
+ char tptr_l_[PADL_(struct l_timeval *)]; struct l_timeval * tptr; char tptr_r_[PADR_(struct l_timeval *)];
};
struct linux_fadvise64_64_args {
register_t dummy;
==== //depot/projects/linuxolator/src/sys/i386/linux/linux_syscall.h#13 (text+ko) ====
==== //depot/projects/linuxolator/src/sys/i386/linux/linux_sysent.c#13 (text+ko) ====
@@ -290,7 +290,7 @@
{ AS(linux_statfs64_args), (sy_call_t *)linux_statfs64, AUE_STATFS, NULL, 0, 0 }, /* 268 = linux_statfs64 */
{ 0, (sy_call_t *)linux_fstatfs64, AUE_FSTATFS, NULL, 0, 0 }, /* 269 = linux_fstatfs64 */
{ AS(linux_tgkill_args), (sy_call_t *)linux_tgkill, AUE_NULL, NULL, 0, 0 }, /* 270 = linux_tgkill */
- { 0, (sy_call_t *)linux_utimes, AUE_UTIMES, NULL, 0, 0 }, /* 271 = linux_utimes */
+ { AS(linux_utimes_args), (sy_call_t *)linux_utimes, AUE_UTIMES, NULL, 0, 0 }, /* 271 = linux_utimes */
{ 0, (sy_call_t *)linux_fadvise64_64, AUE_NULL, NULL, 0, 0 }, /* 272 = linux_fadvise64_64 */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 273 = */
{ 0, (sy_call_t *)linux_mbind, AUE_NULL, NULL, 0, 0 }, /* 274 = linux_mbind */
==== //depot/projects/linuxolator/src/sys/i386/linux/syscalls.master#12 (text+ko) ====
@@ -443,7 +443,8 @@
268 AUE_STATFS STD { int linux_statfs64(char *path, struct l_statfs64_buf *buf); }
269 AUE_FSTATFS STD { int linux_fstatfs64(void); }
270 AUE_NULL STD { int linux_tgkill(int tgid, int pid, int sig); }
-271 AUE_UTIMES STD { int linux_utimes(void); }
+271 AUE_UTIMES STD { int linux_utimes(char *fname, \
+ struct l_timeval *tptr); }
272 AUE_NULL STD { int linux_fadvise64_64(void); }
273 AUE_NULL UNIMPL
274 AUE_NULL STD { int linux_mbind(void); }
More information about the p4-projects
mailing list