1 #ifndef _LIBHX_STRING_H
2 #define _LIBHX_STRING_H 1
3 
4 #ifdef __cplusplus
5 #	include <cstddef>
6 #	include <cstdio>
7 #	include <cstdlib>
8 #	include <cstring>
9 #else
10 #	include <stddef.h>
11 #	include <stdio.h>
12 #	include <stdlib.h>
13 #	include <string.h>
14 #endif
15 #include <sys/types.h>
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 enum {
22 	HXQUOTE_SQUOTE = 1,
23 	HXQUOTE_DQUOTE,
24 	HXQUOTE_HTML,
25 	HXQUOTE_LDAPFLT,
26 	HXQUOTE_LDAPRDN,
27 	HXQUOTE_BASE64,
28 	HXQUOTE_URIENC,
29 	HXQUOTE_SQLSQUOTE,
30 	HXQUOTE_SQLBQUOTE,
31 	_HXQUOTE_MAX,
32 };
33 
34 #ifndef __libhx_internal_hxmc_t_defined
35 #define __libhx_internal_hxmc_t_defined 1
36 typedef char hxmc_t;
37 #endif
38 
39 /*
40  *	MC.C
41  */
42 extern hxmc_t *HXmc_strinit(const char *);
43 extern hxmc_t *HXmc_meminit(const void *, size_t);
44 extern hxmc_t *HXmc_strcpy(hxmc_t **, const char *);
45 extern hxmc_t *HXmc_memcpy(hxmc_t **, const void *, size_t);
46 extern size_t HXmc_length(const hxmc_t *);
47 extern hxmc_t *HXmc_setlen(hxmc_t **, size_t);
48 extern hxmc_t *HXmc_trunc(hxmc_t **, size_t);
49 extern hxmc_t *HXmc_strcat(hxmc_t **, const char *);
50 extern hxmc_t *HXmc_memcat(hxmc_t **, const void *, size_t);
51 extern hxmc_t *HXmc_strpcat(hxmc_t **, const char *);
52 extern hxmc_t *HXmc_mempcat(hxmc_t **, const void *, size_t);
53 extern hxmc_t *HXmc_strins(hxmc_t **, size_t, const char *);
54 extern hxmc_t *HXmc_memins(hxmc_t **, size_t, const void *, size_t);
55 extern hxmc_t *HXmc_memdel(hxmc_t *, size_t, size_t);
56 extern void HXmc_free(hxmc_t *);
57 extern void HXmc_zvecfree(hxmc_t **);
58 
59 /*
60  *	STRING.C
61  */
62 extern char *HX_basename(const char *);
63 extern char *HX_basename_exact(const char *);
64 extern char *HX_chomp(char *);
65 extern char *HX_dirname(const char *);
66 extern hxmc_t *HX_getl(hxmc_t **, FILE *);
67 extern void *HX_memmem(const void *, size_t, const void *, size_t);
68 extern char **HX_split(const char *, const char *, int *, int);
69 extern int HX_split_fixed(char *, const char *, int, char **);
70 extern char **HX_split_inplace(char *, const char *, int *, int);
71 #define HX_split4(a, b, c, d) HX_split_inplace((a), (b), (c), (d))
72 #define HX_split5(a, b, c, d) HX_split_fixed((a), (b), (c), (d))
73 extern char *HX_strbchr(const char *, const char *, char);
74 extern char *HX_strchr2(const char *, const char *);
75 extern char *HX_strclone(char **, const char *);
76 extern char *HX_strdup(const char *);
77 extern char *HX_strlcat(char *, const char *, size_t);
78 extern char *HX_strlcpy(char *, const char *, size_t);
79 extern char *HX_strlncat(char *, const char *, size_t, size_t);
80 extern char *HX_strlower(char *);
81 extern size_t HX_strltrim(char *);
82 extern char *HX_stpltrim(const char *);
83 extern char *HX_strmid(const char *, long, long);
84 extern char *HX_strndup(const char *, size_t);
85 extern size_t HX_strnlen(const char *, size_t);
86 extern char *HX_strquote(const char *, unsigned int, char **);
87 extern size_t HX_strrcspn(const char *, const char *);
88 extern char *HX_strrev(char *);
89 extern size_t HX_strrtrim(char *);
90 extern char *HX_strsep(char **, const char *);
91 extern char *HX_strsep2(char **, const char *);
92 extern char *HX_strupper(char *);
93 
HX_memdup(const void * buf,size_t len)94 static __inline__ void *HX_memdup(const void *buf, size_t len)
95 {
96 	void *ret;
97 	if ((ret = malloc(len)) == NULL)
98 		return NULL;
99 	return memcpy(ret, buf, len);
100 }
101 
102 #ifdef __cplusplus
103 } /* extern "C" */
104 #endif
105 
106 #ifdef __cplusplus
107 extern "C++" {
108 
109 template<typename type> static __inline__ type
HX_memdup(const void * data,size_t n)110 HX_memdup(const void *data, size_t n)
111 {
112 	return reinterpret_cast<type>(HX_memdup(data, n));
113 }
114 
115 } /* extern "C++" */
116 #endif
117 
118 #endif /* _LIBHX_STRING_H */
119