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