1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
/* String handling for libwww
STRINGS
Case-independent string comparison and allocations with copies etc
*/
#ifndef HTSTRING_H
#define HTSTRING_H
#ifndef HTUTILS_H
#include <HTUtils.h>
#endif /* HTUTILS_H */
#ifdef __cplusplus
extern "C" {
#endif
extern const char *HTLibraryVersion; /* String for help screen etc */
/*
EBCDIC string comparison using ASCII collating sequence
*/
#ifdef NOT_ASCII
extern int AS_casecomp(const char *a, const char *b);
extern int AS_ncmp(const char *a, const char *b, unsigned int n);
#define AS_cmp( a, b ) ( AS_ncmp( ( a ), ( b ), -1 ) )
#else
#define AS_casecomp( a, b ) ( strcasecomp( ( a ), ( b ) ) )
#define AS_ncmp( a, b, c ) ( strncmp( ( a ), ( b ), ( c ) ) )
#define AS_cmp strcmp
#endif /* NOT_ASCII */
/*
Case-insensitive string comparison
The usual routines (comp instead of cmp) had some problem.
*/
extern int strcasecomp(const char *a, const char *b);
extern int strncasecomp(const char *a, const char *b, int n);
extern int strcasecomp8(const char *a, const char *b);
extern int strncasecomp8(const char *a, const char *b, int n);
extern int strcasecomp_asterisk(const char *a, const char *b);
/*
* strcasecomp8 and strncasecomp8 are variants of strcasecomp and
* strncasecomp, but use 8bit upper/lower case information from the
* current display charset
*/
/*
Malloced string manipulation
*/
#define StrAllocCopy(dest, src) HTSACopy (&(dest), src)
#define StrAllocCat(dest, src) HTSACat (&(dest), src)
extern char *HTSACopy(char **dest, const char *src);
extern char *HTSACat(char **dest, const char *src);
/*
optimized for heavily realloc'd strings in temp objects
*/
#define StrAllocCopy_extra(dest, src) HTSACopy_extra (&(dest), src)
#define FREE_extra(x) {if (x != NULL) {HTSAFree_extra(x); x = NULL;}}
#define Clear_extra(x) {if (x != NULL) {*x = '\0';}}
extern char *HTSACopy_extra(char **dest, const char *src);
extern void HTSAFree_extra(char *s);
/*
Next word or quoted string
*/
extern char *HTNextField(char **pstr);
/* A more general parser - kw */
extern char *HTNextTok(char **pstr,
const char *delims, const char *bracks, char *found);
extern char *HTSprintf(char **pstr, const char *fmt,...) GCC_PRINTFLIKE(2,3);
extern char *HTSprintf0(char **pstr, const char *fmt,...) GCC_PRINTFLIKE(2,3);
#if defined(LY_FIND_LEAKS) /* private otherwise */
extern char *StrAllocVsprintf(char **pstr,
size_t len,
const char *fmt,
va_list * ap);
#endif
#if (defined(VMS) || defined(DOSPATH) || defined(__EMX__)) && !defined(__CYGWIN__)
#define USE_QUOTED_PARAMETER 0
#else
#define USE_QUOTED_PARAMETER 1
#endif
#if USE_QUOTED_PARAMETER
extern char *HTQuoteParameter(const char *parameter);
extern void HTAddXpand(char **result, const char *command, int number, const char *parameter);
#else
#define HTQuoteParameter(parameter) parameter /* simplify ifdef'ing */
#define HTAddXpand(result,command,number,parameter) HTAddParam(result,command,number,parameter)
#endif
extern int HTCountCommandArgs(const char *command);
extern void HTAddToCmd(char **result, const char *command, int number, const char *string);
extern void HTAddParam(char **result, const char *command, int number, const char *parameter);
extern void HTEndParam(char **result, const char *command, int number);
/* Force an option, with leading blanks, to be appended without quoting them */
#define HTOptParam(result, command, number, parameter) HTSACat(result, parameter)
/* Binary copy and concat */
typedef struct {
char *str;
int len;
} bstring;
extern void HTSABCopy(bstring **dest, const char *src, int len);
extern void HTSABCopy0(bstring **dest, const char *src);
extern void HTSABCat(bstring **dest, const char *src, int len);
extern void HTSABCat0(bstring **dest, const char *src);
extern BOOL HTSABEql(bstring *a, bstring *b);
extern void HTSABFree(bstring **ptr);
#define BStrLen(s) (((s) != 0) ? (s)->len : 0)
#define BStrData(s) (((s) != 0) ? (s)->str : 0)
#define BINEQ(a,b) (HTSABEql(a,b)) /* like STREQ() */
#define isBEmpty(p) ((p) == 0 || BStrLen(p) == 0)
#define BStrCopy(d,s) HTSABCopy( &(d), BStrData(s), BStrLen(s))
#define BStrCopy0(d,s) HTSABCopy0( &(d), s)
#define BStrCat(d,s) HTSABCat( &(d), BStrData(s), BStrLen(s))
#define BStrCat0(d,s) HTSABCat0( &(d), s)
#define BStrFree(d) HTSABFree( &(d))
extern bstring *HTBprintf(bstring **pstr, const char *fmt,...) GCC_PRINTFLIKE(2,3);
extern void trace_bstring(bstring *data);
extern void trace_bstring2(const char *text, int size);
#ifdef __cplusplus
}
#endif
#endif /* HTSTRING_H */
|