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 */
|