Merge branch 'tizen_qemu_2.0' into tizen
[sdk/emulator/qemu.git] / hw / 9pfs / virtio-9p-posix-acl.c
index 803d9d9..9bbcfb5 100644 (file)
@@ -30,7 +30,11 @@ static ssize_t mp_pacl_getxattr(FsContext *ctx, const char *path,
     ssize_t ret;
 
     buffer = rpath(ctx, path);
+#ifdef CONFIG_LINUX
     ret = lgetxattr(buffer, MAP_ACL_ACCESS, value, size);
+#else
+    ret = getxattr(buffer, MAP_ACL_ACCESS, value, size, 0, XATTR_NOFOLLOW);
+#endif
     g_free(buffer);
     return ret;
 }
@@ -62,6 +66,13 @@ static int mp_pacl_setxattr(FsContext *ctx, const char *path, const char *name,
 
     buffer = rpath(ctx, path);
     ret = lsetxattr(buffer, MAP_ACL_ACCESS, value, size, flags);
+
+#ifdef CONFIG_LINUX
+    ret = lsetxattr(buffer, MAP_ACL_ACCESS, value, size, flags);
+#else
+    ret = setxattr(buffer, MAP_ACL_ACCESS, value, size, 0, flags | XATTR_NOFOLLOW);
+#endif
+
     g_free(buffer);
     return ret;
 }
@@ -73,7 +84,12 @@ static int mp_pacl_removexattr(FsContext *ctx,
     char *buffer;
 
     buffer = rpath(ctx, path);
+
+#ifdef CONFIG_LINUX
     ret  = lremovexattr(buffer, MAP_ACL_ACCESS);
+#else
+    ret  = removexattr(buffer, MAP_ACL_ACCESS, XATTR_NOFOLLOW);
+#endif
     if (ret == -1 && errno == ENODATA) {
         /*
          * We don't get ENODATA error when trying to remove a
@@ -94,7 +110,11 @@ static ssize_t mp_dacl_getxattr(FsContext *ctx, const char *path,
     ssize_t ret;
 
     buffer = rpath(ctx, path);
+#ifdef CONFIG_LINUX
     ret = lgetxattr(buffer, MAP_ACL_DEFAULT, value, size);
+#else
+    ret = getxattr(buffer, MAP_ACL_DEFAULT, value, size, 0, XATTR_NOFOLLOW);
+#endif
     g_free(buffer);
     return ret;
 }
@@ -125,7 +145,13 @@ static int mp_dacl_setxattr(FsContext *ctx, const char *path, const char *name,
     int ret;
 
     buffer = rpath(ctx, path);
-    ret = lsetxattr(buffer, MAP_ACL_DEFAULT, value, size, flags);
+#ifdef CONFIG_LINUX
+    return lsetxattr(buffer, MAP_ACL_DEFAULT, value,
+            size, flags);
+#else
+    return setxattr(buffer, MAP_ACL_DEFAULT, value,
+            size, 0, flags | XATTR_NOFOLLOW);
+#endif
     g_free(buffer);
     return ret;
 }
@@ -137,7 +163,11 @@ static int mp_dacl_removexattr(FsContext *ctx,
     char *buffer;
 
     buffer = rpath(ctx, path);
+#ifdef CONFIG_LINUX
     ret  = lremovexattr(buffer, MAP_ACL_DEFAULT);
+#else
+    ret  = removexattr(buffer, MAP_ACL_DEFAULT, XATTR_NOFOLLOW);
+#endif
     if (ret == -1 && errno == ENODATA) {
         /*
          * We don't get ENODATA error when trying to remove a