utimes() support


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1164 c046a42c-6fe2-441c-8c8c-71466251a162
diff --git a/linux-user/arm/syscall_nr.h b/linux-user/arm/syscall_nr.h
index 13a9ee1..195e459 100644
--- a/linux-user/arm/syscall_nr.h
+++ b/linux-user/arm/syscall_nr.h
@@ -259,3 +259,4 @@
 					/* 254 for set_thread_area */
 					/* 255 for get_thread_area */
 					/* 256 for set_tid_address */
+#define TARGET_NR_utimes		        (269)
diff --git a/linux-user/i386/syscall_nr.h b/linux-user/i386/syscall_nr.h
index c994381..9fa6be9 100644
--- a/linux-user/i386/syscall_nr.h
+++ b/linux-user/i386/syscall_nr.h
@@ -271,3 +271,4 @@
 #define TARGET_NR_clock_getres	(TARGET_NR_timer_create+7)
 #define TARGET_NR_clock_nanosleep	(TARGET_NR_timer_create+8)
 
+#define TARGET_NR_utimes		271
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index b2965bb..2407400 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -1742,6 +1742,20 @@
             ret = get_errno(utime((const char *)arg1, tbuf1));
         }
         break;
+    case TARGET_NR_utimes:
+        {
+            struct target_timeval *target_tvp = (struct target_timeval *)arg2;
+            struct timeval *tvp, tv[2];
+            if (target_tvp) {
+                target_to_host_timeval(&tv[0], &target_tvp[0]);
+                target_to_host_timeval(&tv[1], &target_tvp[1]);
+                tvp = tv;
+            } else {
+                tvp = NULL;
+            }
+            ret = get_errno(utimes((const char *)arg1, tvp));
+        }
+        break;
 #ifdef TARGET_NR_stty
     case TARGET_NR_stty:
         goto unimplemented;