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