Postfix3.3.1
attr.h
[詳解]
1 #ifndef _ATTR_H_INCLUDED_
2 #define _ATTR_H_INCLUDED_
3 
4 /*++
5 /* NAME
6 /* attr 3h
7 /* SUMMARY
8 /* attribute list manipulations
9 /* SYNOPSIS
10 /* #include "attr.h"
11  DESCRIPTION
12  .nf
13 
14  /*
15  * System library.
16  */
17 #include <stdarg.h>
18 
19  /*
20  * Utility library.
21  */
22 #include <vstream.h>
23 #include <vstring.h>
24 #include <htable.h>
25 #include <nvtable.h>
26 #include <check_arg.h>
27 
28  /*
29  * Delegation for better data abstraction.
30  */
31 typedef int (*ATTR_SCAN_MASTER_FN) (VSTREAM *, int,...);
33 typedef int (*ATTR_PRINT_MASTER_FN) (VSTREAM *, int,...);
35 
36  /*
37  * Attribute types. See attr_scan(3) for documentation.
38  */
39 #define ATTR_TYPE_END 0 /* end of data */
40 #define ATTR_TYPE_INT 1 /* Unsigned integer */
41 #define ATTR_TYPE_NUM ATTR_TYPE_INT
42 #define ATTR_TYPE_STR 2 /* Character string */
43 #define ATTR_TYPE_HASH 3 /* Hash table */
44 #define ATTR_TYPE_NV 3 /* Name-value table */
45 #define ATTR_TYPE_LONG 4 /* Unsigned long */
46 #define ATTR_TYPE_DATA 5 /* Binary data */
47 #define ATTR_TYPE_FUNC 6 /* Function pointer */
48 
49  /*
50  * Optional sender-specified grouping for hash or nameval tables.
51  */
52 #define ATTR_TYPE_OPEN '{'
53 #define ATTR_TYPE_CLOSE '}'
54 #define ATTR_NAME_OPEN "{"
55 #define ATTR_NAME_CLOSE "}"
56 
57 #define ATTR_HASH_LIMIT 1024 /* Size of hash table */
58 
59  /*
60  * Typechecking support for variadic function arguments. See check_arg(3h)
61  * for documentation.
62  */
63 #define SEND_ATTR_INT(name, val) ATTR_TYPE_INT, CHECK_CPTR(ATTR, char, (name)), CHECK_VAL(ATTR, int, (val))
64 #define SEND_ATTR_STR(name, val) ATTR_TYPE_STR, CHECK_CPTR(ATTR, char, (name)), CHECK_CPTR(ATTR, char, (val))
65 #define SEND_ATTR_HASH(val) ATTR_TYPE_HASH, CHECK_CPTR(ATTR, HTABLE, (val))
66 #define SEND_ATTR_NV(val) ATTR_TYPE_NV, CHECK_CPTR(ATTR, NVTABLE, (val))
67 #define SEND_ATTR_LONG(name, val) ATTR_TYPE_LONG, CHECK_CPTR(ATTR, char, (name)), CHECK_VAL(ATTR, long, (val))
68 #define SEND_ATTR_DATA(name, len, val) ATTR_TYPE_DATA, CHECK_CPTR(ATTR, char, (name)), CHECK_VAL(ATTR, ssize_t, (len)), CHECK_CPTR(ATTR, void, (val))
69 #define SEND_ATTR_FUNC(func, val) ATTR_TYPE_FUNC, CHECK_VAL(ATTR, ATTR_PRINT_SLAVE_FN, (func)), CHECK_CPTR(ATTR, void, (val))
70 
71 #define RECV_ATTR_INT(name, val) ATTR_TYPE_INT, CHECK_CPTR(ATTR, char, (name)), CHECK_PTR(ATTR, int, (val))
72 #define RECV_ATTR_STR(name, val) ATTR_TYPE_STR, CHECK_CPTR(ATTR, char, (name)), CHECK_PTR(ATTR, VSTRING, (val))
73 #define RECV_ATTR_HASH(val) ATTR_TYPE_HASH, CHECK_PTR(ATTR, HTABLE, (val))
74 #define RECV_ATTR_NV(val) ATTR_TYPE_NV, CHECK_PTR(ATTR, NVTABLE, (val))
75 #define RECV_ATTR_LONG(name, val) ATTR_TYPE_LONG, CHECK_CPTR(ATTR, char, (name)), CHECK_PTR(ATTR, long, (val))
76 #define RECV_ATTR_DATA(name, val) ATTR_TYPE_DATA, CHECK_CPTR(ATTR, char, (name)), CHECK_PTR(ATTR, VSTRING, (val))
77 #define RECV_ATTR_FUNC(func, val) ATTR_TYPE_FUNC, CHECK_VAL(ATTR, ATTR_SCAN_SLAVE_FN, (func)), CHECK_PTR(ATTR, void, (val))
78 
79 CHECK_VAL_HELPER_DCL(ATTR, ssize_t);
80 CHECK_VAL_HELPER_DCL(ATTR, long);
81 CHECK_VAL_HELPER_DCL(ATTR, int);
82 CHECK_PTR_HELPER_DCL(ATTR, void);
83 CHECK_PTR_HELPER_DCL(ATTR, long);
84 CHECK_PTR_HELPER_DCL(ATTR, int);
88 CHECK_CPTR_HELPER_DCL(ATTR, void);
89 CHECK_CPTR_HELPER_DCL(ATTR, char);
94 
95  /*
96  * Flags that control processing. See attr_scan(3) for documentation.
97  */
98 #define ATTR_FLAG_NONE 0
99 #define ATTR_FLAG_MISSING (1<<0) /* Flag missing attribute */
100 #define ATTR_FLAG_EXTRA (1<<1) /* Flag spurious attribute */
101 #define ATTR_FLAG_MORE (1<<2) /* Don't skip or terminate */
102 
103 #define ATTR_FLAG_STRICT (ATTR_FLAG_MISSING | ATTR_FLAG_EXTRA)
104 #define ATTR_FLAG_ALL (07)
105 
106  /*
107  * Default to null-terminated, as opposed to base64-encoded.
108  */
109 #define attr_print attr_print0
110 #define attr_vprint attr_vprint0
111 #define attr_scan attr_scan0
112 #define attr_vscan attr_vscan0
113 #define attr_scan_more attr_scan_more0
114 
115  /*
116  * attr_print64.c.
117  */
118 extern int attr_print64(VSTREAM *, int,...);
119 extern int attr_vprint64(VSTREAM *, int, va_list);
120 
121  /*
122  * attr_scan64.c.
123  */
124 extern int WARN_UNUSED_RESULT attr_scan64(VSTREAM *, int,...);
125 extern int WARN_UNUSED_RESULT attr_vscan64(VSTREAM *, int, va_list);
127 
128  /*
129  * attr_print0.c.
130  */
131 extern int attr_print0(VSTREAM *, int,...);
132 extern int attr_vprint0(VSTREAM *, int, va_list);
133 
134  /*
135  * attr_scan0.c.
136  */
137 extern int WARN_UNUSED_RESULT attr_scan0(VSTREAM *, int,...);
138 extern int WARN_UNUSED_RESULT attr_vscan0(VSTREAM *, int, va_list);
140 
141  /*
142  * attr_scan_plain.c.
143  */
144 extern int attr_print_plain(VSTREAM *, int,...);
145 extern int attr_vprint_plain(VSTREAM *, int, va_list);
146 extern int attr_scan_more_plain(VSTREAM *);
147 
148  /*
149  * attr_print_plain.c.
150  */
151 extern int WARN_UNUSED_RESULT attr_scan_plain(VSTREAM *, int,...);
152 extern int WARN_UNUSED_RESULT attr_vscan_plain(VSTREAM *, int, va_list);
153 
154  /*
155  * Attribute names for testing the compatibility of the read and write
156  * routines.
157  */
158 #ifdef TEST
159 #define ATTR_NAME_INT "number"
160 #define ATTR_NAME_STR "string"
161 #define ATTR_NAME_LONG "long_number"
162 #define ATTR_NAME_DATA "data"
163 #endif
164 
165 /* LICENSE
166 /* .ad
167 /* .fi
168 /* The Secure Mailer license must be distributed with this software.
169 /* AUTHOR(S)
170 /* Wietse Venema
171 /* IBM T.J. Watson Research
172 /* P.O. Box 704
173 /* Yorktown Heights, NY 10598, USA
174 /*
175 /* Wietse Venema
176 /* Google, Inc.
177 /* 111 8th Avenue
178 /* New York, NY 10011, USA
179 /*--*/
180 
181 #endif
int(* ATTR_PRINT_MASTER_FN)(VSTREAM *, int,...)
Definition: attr.h:33
int attr_print64(VSTREAM *, int,...)
Definition: attr_print64.c:244
CHECK_VAL_HELPER_DCL(ATTR, ssize_t)
int WARN_UNUSED_RESULT attr_vscan_plain(VSTREAM *, int, va_list)
int(* ATTR_PRINT_SLAVE_FN)(ATTR_PRINT_MASTER_FN, VSTREAM *, int, void *)
Definition: attr.h:34
Definition: htable.h:25
int attr_vprint64(VSTREAM *, int, va_list)
Definition: attr_print64.c:145
int WARN_UNUSED_RESULT attr_vscan64(VSTREAM *, int, va_list)
Definition: attr_scan64.c:269
int attr_vprint0(VSTREAM *, int, va_list)
Definition: attr_print0.c:110
int(* ATTR_SCAN_MASTER_FN)(VSTREAM *, int,...)
Definition: attr.h:31
#define WARN_UNUSED_RESULT
Definition: sys_defs.h:1662
CHECK_CPTR_HELPER_DCL(ATTR, void)
int WARN_UNUSED_RESULT attr_scan64(VSTREAM *, int,...)
Definition: attr_scan64.c:514
int WARN_UNUSED_RESULT attr_scan0(VSTREAM *, int,...)
Definition: attr_scan0.c:455
int attr_print0(VSTREAM *, int,...)
Definition: attr_print0.c:203
int attr_print_plain(VSTREAM *, int,...)
int WARN_UNUSED_RESULT attr_scan_more0(VSTREAM *)
Definition: attr_scan0.c:468
int int
Definition: smtpd_proxy.h:21
int WARN_UNUSED_RESULT attr_vscan0(VSTREAM *, int, va_list)
Definition: attr_scan0.c:266
int attr_scan_more_plain(VSTREAM *)
int WARN_UNUSED_RESULT attr_scan_plain(VSTREAM *, int,...)
CHECK_PTR_HELPER_DCL(ATTR, void)
int(* ATTR_SCAN_SLAVE_FN)(ATTR_SCAN_MASTER_FN, VSTREAM *, int, void *)
Definition: attr.h:32
int WARN_UNUSED_RESULT attr_scan_more64(VSTREAM *)
Definition: attr_scan64.c:527
int attr_vprint_plain(VSTREAM *, int, va_list)