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