Merge pull request #1546 from elicn/fix-enum

Fix open files flags
This commit is contained in:
xwings
2025-03-19 11:05:40 +08:00
committed by GitHub
2 changed files with 26 additions and 24 deletions
+23 -21
View File
@@ -459,6 +459,8 @@ class QlPrettyFlag(Flag):
# open flags #
################################
FLAG_UNSUPPORTED = -1
class macos_x86_open_flags(QlPrettyFlag):
O_RDONLY = 0x000000
O_WRONLY = 0x000001
@@ -473,8 +475,8 @@ class macos_x86_open_flags(QlPrettyFlag):
O_EXCL = 0x000800
O_NOCTTY = 0x020000
O_DIRECTORY = 0x100000
O_BINARY = 0x000000
O_LARGEFILE = 0x000000
O_BINARY = FLAG_UNSUPPORTED
O_LARGEFILE = FLAG_UNSUPPORTED
class linux_x86_open_flags(QlPrettyFlag):
@@ -491,8 +493,8 @@ class linux_x86_open_flags(QlPrettyFlag):
O_EXCL = 0x000080
O_NOCTTY = 0x000100
O_DIRECTORY = 0x010000
O_BINARY = 0x000000
O_LARGEFILE = 0x000000
O_BINARY = FLAG_UNSUPPORTED
O_LARGEFILE = FLAG_UNSUPPORTED
class linux_arm_open_flags(QlPrettyFlag):
@@ -509,7 +511,7 @@ class linux_arm_open_flags(QlPrettyFlag):
O_EXCL = 0x000080
O_NOCTTY = 0x000100
O_DIRECTORY = 0x004000
O_BINARY = 0x000000
O_BINARY = FLAG_UNSUPPORTED
O_LARGEFILE = 0x020000
@@ -527,7 +529,7 @@ class linux_mips_open_flags(QlPrettyFlag):
O_EXCL = 0x000400
O_NOCTTY = 0x000800
O_DIRECTORY = 0x010000
O_BINARY = 0x000000
O_BINARY = FLAG_UNSUPPORTED
O_LARGEFILE = 0x002000
@@ -545,8 +547,8 @@ class linux_riscv_open_flags(QlPrettyFlag):
O_EXCL = 0x000080
O_NOCTTY = 0x000100
O_DIRECTORY = 0x010000
O_BINARY = 0x000000
O_LARGEFILE = 0x000000
O_BINARY = FLAG_UNSUPPORTED
O_LARGEFILE = FLAG_UNSUPPORTED
class linux_ppc_open_flags(QlPrettyFlag):
@@ -563,7 +565,7 @@ class linux_ppc_open_flags(QlPrettyFlag):
O_EXCL = 0x000080
O_NOCTTY = 0x000100
O_DIRECTORY = 0x004000
O_BINARY = 0x000000
O_BINARY = FLAG_UNSUPPORTED
O_LARGEFILE = 0x010000
@@ -581,26 +583,26 @@ class freebsd_x86_open_flags(QlPrettyFlag):
O_EXCL = 0x000800
O_NOCTTY = 0x008000
O_DIRECTORY = 0x20000
O_BINARY = 0x000000
O_LARGEFILE = 0x000000
O_BINARY = FLAG_UNSUPPORTED
O_LARGEFILE = FLAG_UNSUPPORTED
class windows_x86_open_flags(QlPrettyFlag):
O_RDONLY = 0x000000
O_WRONLY = 0x000001
O_RDWR = 0x000002
O_NONBLOCK = 0x000000
O_NONBLOCK = FLAG_UNSUPPORTED
O_APPEND = 0x000008
O_ASYNC = 0x000000
O_SYNC = 0x000000
O_NOFOLLOW = 0x000000
O_ASYNC = FLAG_UNSUPPORTED
O_SYNC = FLAG_UNSUPPORTED
O_NOFOLLOW = FLAG_UNSUPPORTED
O_CREAT = 0x000100
O_TRUNC = 0x000200
O_EXCL = 0x000400
O_NOCTTY = 0x000000
O_DIRECTORY = 0x000000
O_NOCTTY = FLAG_UNSUPPORTED
O_DIRECTORY = FLAG_UNSUPPORTED
O_BINARY = 0x008000
O_LARGEFILE = 0x000000
O_LARGEFILE = FLAG_UNSUPPORTED
class qnx_arm_open_flags(QlPrettyFlag):
@@ -611,13 +613,13 @@ class qnx_arm_open_flags(QlPrettyFlag):
O_APPEND = 0x00008
O_ASYNC = 0x10000
O_SYNC = 0x00020
O_NOFOLLOW = 0x000000
O_NOFOLLOW = FLAG_UNSUPPORTED
O_CREAT = 0x00100
O_TRUNC = 0x00200
O_EXCL = 0x00400
O_NOCTTY = 0x00800
O_DIRECTORY = 0x000000
O_BINARY = 0x000000
O_DIRECTORY = FLAG_UNSUPPORTED
O_BINARY = FLAG_UNSUPPORTED
O_LARGEFILE = 0x08000
+3 -3
View File
@@ -114,12 +114,12 @@ def ql_open_flag_mapping(ql: Qiling, flags: int) -> int:
# convert emulated os flags to hosting os flags.
# flags names are consistent across all classes, even if they are not supported, to maintain compatibility
for ef in emul_flags:
# test whether flag i set, excluding unsupported flags and 0 values
if ef and flags & ef.value:
# test whether flag is set, excluding unsupported flags
if (ef != FLAG_UNSUPPORTED) and (flags & ef.value):
hf = host_flags[ef.name or '']
# if flag is also supported on the host, set it
if hf:
if hf != FLAG_UNSUPPORTED:
ret |= hf.value
# NOTE: not sure why this one is needed