Skip to contentSkip to conversation

Support fcntl F_GETLK64, F_SETLK64, F_SETLKW64

PATCH In review Kirill A. Shutemov 1 participant 3 messages Jan 4, 2007

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Support fcntl F_GETLK64, F_SETLK64, F_SETLKW64

In the attachment patch to support three new fcntl. Tested on host x86_64, target arm.

#1 lore raw
Quoted 2 lines · Kirill A. Shutemov

In the attachment patch to support three new fcntl. Tested on host x86_64, target arm.

Attached, sorry.

linux-user/syscall.c +21 -2
@@ -1687,6 +1687,8 @@
 {
     struct flock fl;
     struct target_flock *target_fl;
+    struct flock64 fl64;
+    struct target_flock64 *target_fl64;
     long ret;
 
     switch(cmd) {
@@ -1716,10 +1718,27 @@
         break;
         
     case TARGET_F_GETLK64:
+        ret = fcntl(fd, cmd >> 1, &fl64);
+        if (ret == 0) {
+            lock_user_struct(target_fl64, arg, 0);
+            target_fl64->l_type = tswap16(fl64.l_type) >> 1;
+            target_fl64->l_whence = tswap16(fl64.l_whence);
+            target_fl64->l_start = tswapl(fl64.l_start);
+            target_fl64->l_len = tswapl(fl64.l_len);
+            target_fl64->l_pid = tswapl(fl64.l_pid);
+            unlock_user_struct(target_fl64, arg, 1);
+        }
+		break;
     case TARGET_F_SETLK64:
     case TARGET_F_SETLKW64:
-        ret = -1;
-        errno = EINVAL;
+        lock_user_struct(target_fl64, arg, 1);
+        fl64.l_type = tswap16(target_fl64->l_type) >> 1;
+        fl64.l_whence = tswap16(target_fl64->l_whence);
+        fl64.l_start = tswapl(target_fl64->l_start);
+        fl64.l_len = tswapl(target_fl64->l_len);
+        fl64.l_pid = tswap16(target_fl64->l_pid);
+        unlock_user_struct(target_fl64, arg, 0);
+		ret = fcntl(fd, cmd >> 1, &fl64);
         break;
 
     case F_GETFL:
#2 lore raw
Quoted 5 lines · Kirill A. Shutemov
Quoted 2 lines · Kirill A. Shutemov

In the attachment patch to support three new fcntl. Tested on host x86_64, target arm.

Attached, sorry.

Any comments?