xref: /netbsd-src/external/ibm-public/postfix/dist/src/global/quote_flags.c (revision 33881f779a77dce6440bdc44610d94de75bebefe)
1 /*	$NetBSD: quote_flags.c,v 1.2 2020/03/18 19:05:16 christos Exp $	*/
2 
3 /*++
4 /* NAME
5 /*	quote_flags 3
6 /* SUMMARY
7 /*	quote rfc 821/822 local part
8 /* SYNOPSIS
9 /*	#include <quote_flags.h>
10 /*
11 /*	int	quote_flags_from_string(const char *string)
12 /*
13 /*	const char *quote_flags_to_string(VSTRING *res_buf, int mask)
14 /* DESCRIPTION
15 /*	quote_flags_from_string() converts symbolic flag names into
16 /*	the corresponding internal bitmask. This logs a warning and
17 /*	returns zero if an unknown symbolic name is specified.
18 /*
19 /*	quote_flags_to_string() converts from internal bitmask to
20 /*	the corresponding symbolic names. This logs a warning and
21 /*	returns a null pointer if an unknown bitmask is specified.
22 /*
23 /*	Arguments:
24 /* .IP string
25 /*	Symbolic representation of a quote_flags bitmask, for
26 /*	example: \fB8bitclean | bare_localpart\fR. The conversion
27 /*	is case-insensitive.
28 /* .IP res_buf
29 /*	Storage for the quote_flags_to_string() result, which has
30 /*	the same form as the string argument. If a null pointer is
31 /*	specified, quote_flags_to_string() uses storage that is
32 /*	overwritten with each call.
33 /* .IP mask
34 /*	Binary representation of quote_flags.
35 /* DIAGNOSTICS
36 /*	Fatal error: out of memory; or unknown bitmask name or value.
37 /* LICENSE
38 /* .ad
39 /* .fi
40 /*	The Secure Mailer license must be distributed with this software.
41 /* AUTHOR(S)
42 /*	Wietse Venema
43 /*	Google, Inc.
44 /*	111 8th Avenue
45 /*	New York, NY 10011, USA
46 /*--*/
47 
48  /*
49   * System library.
50   */
51 #include <sys_defs.h>
52 
53  /*
54   * Utility library.
55   */
56 #include <name_mask.h>
57 
58  /*
59   * Global library.
60   */
61 #include <quote_flags.h>
62 
63 static const NAME_MASK quote_flags_table[] = {
64     "8bitclean", QUOTE_FLAG_8BITCLEAN,
65     "expose_at", QUOTE_FLAG_EXPOSE_AT,
66     "append", QUOTE_FLAG_APPEND,
67     "bare_localpart", QUOTE_FLAG_BARE_LOCALPART,
68     0,
69 };
70 
71 /* quote_flags_from_string - symbolic quote flags to internal form */
72 
quote_flags_from_string(const char * quote_flags_string)73 int     quote_flags_from_string(const char *quote_flags_string)
74 {
75     return (name_mask_delim_opt("quote_flags_from_string", quote_flags_table,
76 				quote_flags_string, "|",
77 				NAME_MASK_WARN | NAME_MASK_ANY_CASE));
78 }
79 
80 /* quote_flags_to_string - internal form to symbolic quote flags */
81 
quote_flags_to_string(VSTRING * res_buf,int quote_flags_mask)82 const char *quote_flags_to_string(VSTRING *res_buf, int quote_flags_mask)
83 {
84     static VSTRING *my_buf;
85 
86     if (res_buf == 0 && (res_buf = my_buf) == 0)
87 	res_buf = my_buf = vstring_alloc(20);
88     return (str_name_mask_opt(res_buf, "quote_flags_to_string",
89 			      quote_flags_table, quote_flags_mask,
90 			      NAME_MASK_WARN | NAME_MASK_PIPE));
91 }
92