xref: /freebsd/contrib/sendmail/include/sm/string.h (revision 09e8dea79366f1e5b3a73e8a271b26e4b6bf2e6a)
1 /*
2  * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers.
3  *	All rights reserved.
4  *
5  * By using this file, you agree to the terms and conditions set
6  * forth in the LICENSE file which can be found at the top level of
7  * the sendmail distribution.
8  *
9  *	$Id: string.h,v 1.36 2001/06/17 21:31:11 ca Exp $
10  */
11 
12 /*
13 **  libsm string manipulation
14 */
15 
16 #ifndef SM_STRING_H
17 # define SM_STRING_H
18 
19 # include <sm/gen.h>
20 # include <sm/varargs.h>
21 # include <string.h> /* strlc{py,at}, strerror */
22 
23 /* return number of bytes left in a buffer */
24 #define SPACELEFT(buf, ptr)	(sizeof buf - ((ptr) - buf))
25 
26 extern int PRINTFLIKE(3, 4)
27 sm_snprintf __P((
28 	char *,
29 	size_t,
30 	const char *,
31 	...));
32 
33 extern bool
34 sm_match __P((
35 	const char *_str,
36 	const char *_pattern));
37 
38 extern char *
39 sm_strdup __P((
40 	char *));
41 
42 extern char *
43 sm_strndup_x __P((
44 	const char *_str,
45 	size_t _len));
46 
47 /* for "normal" data (free'd before end of process) */
48 # define sm_strdup_x(str) strcpy(sm_malloc_x(strlen(str) + 1), str)
49 
50 /* for data that is supposed to be persistent. */
51 # define sm_pstrdup_x(str) strcpy(sm_pmalloc_x(strlen(str) + 1), str)
52 
53 # define sm_strdup_tagged_x(str, file, line, group) \
54 	strcpy(sm_malloc_tagged_x(strlen(str) + 1, file, line, group), str)
55 
56 extern char *
57 sm_stringf_x __P((
58 	const char *_fmt,
59 	...));
60 
61 extern char *
62 sm_vstringf_x __P((
63 	const char *_fmt,
64 	va_list _ap));
65 
66 extern size_t
67 sm_strlcpy __P((
68 	char *_dst,
69 	const char *_src,
70 	ssize_t _len));
71 
72 extern size_t
73 sm_strlcat __P((
74 	char *_dst,
75 	const char *_src,
76 	ssize_t _len));
77 
78 extern size_t
79 sm_strlcat2 __P((
80 	char *,
81 	const char *,
82 	const char *,
83 	ssize_t));
84 
85 extern size_t
86 #ifdef __STDC__
87 sm_strlcpyn(char *dst, ssize_t len, int n, ...);
88 #else /* __STDC__ */
89 sm_strlcpyn __P((char *,
90 	ssize_t,
91 	int,
92 	va_dcl));
93 #endif /* __STDC__ */
94 
95 # if !HASSTRERROR
96 extern char *
97 strerror __P((
98 	int _errno));
99 # endif /* !HASSTRERROR */
100 
101 extern int
102 sm_strrevcmp __P((
103 	const char *,
104 	const char *));
105 
106 extern int
107 sm_strrevcasecmp __P((
108 	const char *,
109 	const char *));
110 
111 extern int
112 sm_strcasecmp __P((
113 	const char *,
114 	const char *));
115 
116 extern int
117 sm_strncasecmp __P((
118 	const char *,
119 	const char *,
120 	size_t));
121 
122 extern LONGLONG_T
123 sm_strtoll __P((
124 	const char *,
125 	char**, int));
126 
127 extern ULONGLONG_T
128 sm_strtoull __P((
129 	const char *,
130 	char**, int));
131 
132 extern void
133 stripquotes __P((char *));
134 
135 #endif /* SM_STRING_H */
136