| 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| 2 | |
| 3 | #include "qemu/osdep.h" |
| 4 | #include "9p-util.h" |
| 5 | |
| 6 | char *qemu_open_flags_tostr(int flags) |
| 7 | { |
| 8 | int acc = flags & O_ACCMODE; |
| 9 | return g_strconcat( |
| 10 | (acc == O_WRONLY) ? "WRONLY" : (acc == O_RDONLY) ? "RDONLY" : "RDWR", |
| 11 | (flags & O_CREAT) ? "|CREAT" : "", |
| 12 | (flags & O_EXCL) ? "|EXCL" : "", |
| 13 | (flags & O_NOCTTY) ? "|NOCTTY" : "", |
| 14 | (flags & O_TRUNC) ? "|TRUNC" : "", |
| 15 | (flags & O_APPEND) ? "|APPEND" : "", |
| 16 | (flags & O_NONBLOCK) ? "|NONBLOCK" : "", |
| 17 | (flags & O_DSYNC) ? "|DSYNC" : "", |
| 18 | #ifdef O_DIRECT |
| 19 | (flags & O_DIRECT) ? "|DIRECT" : "", |
| 20 | #endif |
| 21 | (flags & O_LARGEFILE) ? "|LARGEFILE" : "", |
| 22 | (flags & O_DIRECTORY) ? "|DIRECTORY" : "", |
| 23 | (flags & O_NOFOLLOW) ? "|NOFOLLOW" : "", |
| 24 | #ifdef O_NOATIME |
| 25 | (flags & O_NOATIME) ? "|NOATIME" : "", |
| 26 | #endif |
| 27 | #ifdef O_CLOEXEC |
| 28 | (flags & O_CLOEXEC) ? "|CLOEXEC" : "", |
| 29 | #endif |
| 30 | #ifdef __O_SYNC |
| 31 | (flags & __O_SYNC) ? "|SYNC" : "", |
| 32 | #else |
| 33 | ((flags & O_SYNC) == O_SYNC) ? "|SYNC" : "", |
| 34 | #endif |
| 35 | #ifdef O_PATH |
| 36 | (flags & O_PATH) ? "|PATH" : "", |
| 37 | #endif |
| 38 | #ifdef __O_TMPFILE |
| 39 | (flags & __O_TMPFILE) ? "|TMPFILE" : "", |
| 40 | #elif defined(O_TMPFILE) |
| 41 | ((flags & O_TMPFILE) == O_TMPFILE) ? "|TMPFILE" : "", |
| 42 | #endif |
| 43 | /* O_NDELAY is usually just an alias of O_NONBLOCK */ |
| 44 | #if defined(O_NDELAY) && O_NDELAY != O_NONBLOCK |
| 45 | (flags & O_NDELAY) ? "|NDELAY" : "", |
| 46 | #endif |
| 47 | NULL /* always last (required NULL termination) */ |
| 48 | ); |
| 49 | } |