hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// SPDX-License-Identifier: GPL-2.0
#include <sys/types.h>
#include <sys/socket.h>
 
#ifndef MSG_PROBE
#define MSG_PROBE             0x10
#endif
#ifndef MSG_WAITFORONE
#define MSG_WAITFORONE           0x10000
#endif
#ifndef MSG_SENDPAGE_NOTLAST
#define MSG_SENDPAGE_NOTLAST       0x20000
#endif
#ifndef MSG_FASTOPEN
#define MSG_FASTOPEN        0x20000000
#endif
#ifndef MSG_CMSG_CLOEXEC
# define MSG_CMSG_CLOEXEC    0x40000000
#endif
 
static size_t syscall_arg__scnprintf_msg_flags(char *bf, size_t size,
                          struct syscall_arg *arg)
{
   int printed = 0, flags = arg->val;
 
   if (flags == 0)
       return scnprintf(bf, size, "NONE");
#define    P_MSG_FLAG(n) \
   if (flags & MSG_##n) { \
       printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
       flags &= ~MSG_##n; \
   }
 
   P_MSG_FLAG(OOB);
   P_MSG_FLAG(PEEK);
   P_MSG_FLAG(DONTROUTE);
   P_MSG_FLAG(CTRUNC);
   P_MSG_FLAG(PROBE);
   P_MSG_FLAG(TRUNC);
   P_MSG_FLAG(DONTWAIT);
   P_MSG_FLAG(EOR);
   P_MSG_FLAG(WAITALL);
   P_MSG_FLAG(FIN);
   P_MSG_FLAG(SYN);
   P_MSG_FLAG(CONFIRM);
   P_MSG_FLAG(RST);
   P_MSG_FLAG(ERRQUEUE);
   P_MSG_FLAG(NOSIGNAL);
   P_MSG_FLAG(MORE);
   P_MSG_FLAG(WAITFORONE);
   P_MSG_FLAG(SENDPAGE_NOTLAST);
   P_MSG_FLAG(FASTOPEN);
   P_MSG_FLAG(CMSG_CLOEXEC);
#undef P_MSG_FLAG
 
   if (flags)
       printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags);
 
   return printed;
}
 
#define SCA_MSG_FLAGS syscall_arg__scnprintf_msg_flags