|
Packit |
f574b8 |
/*
|
|
Packit |
f574b8 |
* $LynxId: HTString.h,v 1.39 2018/05/11 22:36:34 tom Exp $
|
|
Packit |
f574b8 |
* String handling for libwww
|
|
Packit |
f574b8 |
* STRINGS
|
|
Packit |
f574b8 |
*
|
|
Packit |
f574b8 |
* Case-independent string comparison and allocations with copies etc
|
|
Packit |
f574b8 |
*/
|
|
Packit |
f574b8 |
#ifndef HTSTRING_H
|
|
Packit |
f574b8 |
#define HTSTRING_H
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#ifndef HTUTILS_H
|
|
Packit |
f574b8 |
#include <HTUtils.h>
|
|
Packit |
f574b8 |
#endif /* HTUTILS_H */
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#ifdef __cplusplus
|
|
Packit |
f574b8 |
extern "C" {
|
|
Packit |
f574b8 |
#endif
|
|
Packit |
f574b8 |
extern const char *HTLibraryVersion; /* String for help screen etc */
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
/*
|
|
Packit |
f574b8 |
* EBCDIC string comparison using ASCII collating sequence
|
|
Packit |
f574b8 |
*/
|
|
Packit |
f574b8 |
#ifdef NOT_ASCII
|
|
Packit |
f574b8 |
extern int AS_casecomp(const char *a, const char *b);
|
|
Packit |
f574b8 |
extern int AS_ncmp(const char *a, const char *b, unsigned int n);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#define AS_cmp( a, b ) ( AS_ncmp( ( a ), ( b ), -1 ) )
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#else
|
|
Packit |
f574b8 |
#define AS_casecomp( a, b ) ( strcasecomp( ( a ), ( b ) ) )
|
|
Packit |
f574b8 |
#define AS_ncmp( a, b, c ) ( StrNCmp( ( a ), ( b ), ( c ) ) )
|
|
Packit |
f574b8 |
#define AS_cmp strcmp
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#endif /* NOT_ASCII */
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#define StrNCat(a,b,c) strncat((a),(b),(size_t)(c))
|
|
Packit |
f574b8 |
#define StrNCpy(a,b,c) strncpy((a),(b),(size_t)(c))
|
|
Packit |
f574b8 |
#define StrNCmp(a,b,c) strncmp((a),(b),(size_t)(c))
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#define MemCpy(a,b,c) memcpy((a),(b),(size_t)(c))
|
|
Packit |
f574b8 |
#define MemCmp(a,b,c) memcmp((a),(b),(size_t)(c))
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
/*
|
|
Packit |
f574b8 |
* Workaround for glibc header defect combined with -Wlogical-op warnings
|
|
Packit |
f574b8 |
*/
|
|
Packit |
f574b8 |
#define StrChr (strchr)
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
/*
|
|
Packit |
f574b8 |
* Case-insensitive string comparison
|
|
Packit |
f574b8 |
*
|
|
Packit |
f574b8 |
* The usual routines (comp instead of cmp) had some problem.
|
|
Packit |
f574b8 |
*/
|
|
Packit |
f574b8 |
extern int strcasecomp(const char *a, const char *b);
|
|
Packit |
f574b8 |
extern int strncasecomp(const char *a, const char *b, int n);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
extern int strcasecomp8(const char *a, const char *b);
|
|
Packit |
f574b8 |
extern int strncasecomp8(const char *a, const char *b, int n);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
extern int strcasecomp_asterisk(const char *a, const char *b);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
/*
|
|
Packit |
f574b8 |
* strcasecomp8 and strncasecomp8 are variants of strcasecomp and
|
|
Packit |
f574b8 |
* strncasecomp, but use 8bit upper/lower case information from the
|
|
Packit |
f574b8 |
* current display charset
|
|
Packit |
f574b8 |
*/
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
/*
|
|
Packit |
f574b8 |
* Malloced string manipulation
|
|
Packit |
f574b8 |
*/
|
|
Packit |
f574b8 |
#define StrAllocCopy(dest, src) HTSACopy (&(dest), src)
|
|
Packit |
f574b8 |
#define StrAllocCat(dest, src) HTSACat (&(dest), src)
|
|
Packit |
f574b8 |
extern char *HTSACopy(char **dest, const char *src);
|
|
Packit |
f574b8 |
extern char *HTSACat(char **dest, const char *src);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
/*
|
|
Packit |
f574b8 |
* optimized for heavily realloc'd strings in temp objects
|
|
Packit |
f574b8 |
*/
|
|
Packit |
f574b8 |
#define StrAllocCopy_extra(dest, src) HTSACopy_extra (&(dest), src)
|
|
Packit |
f574b8 |
#define FREE_extra(x) {if (x != NULL) {HTSAFree_extra(x); x = NULL;}}
|
|
Packit |
f574b8 |
#define Clear_extra(x) {if (x != NULL) {*x = '\0';}}
|
|
Packit |
f574b8 |
extern char *HTSACopy_extra(char **dest, const char *src);
|
|
Packit |
f574b8 |
extern void HTSAFree_extra(char *s);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
/*
|
|
Packit |
f574b8 |
* Next word or quoted string
|
|
Packit |
f574b8 |
*/
|
|
Packit |
f574b8 |
extern char *HTNextField(char **pstr);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
/* A more general parser - kw */
|
|
Packit |
f574b8 |
extern char *HTNextTok(char **pstr,
|
|
Packit |
f574b8 |
const char *delims, const char *bracks, char *found);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
extern char *HTSprintf(char **pstr, const char *fmt,...) GCC_PRINTFLIKE(2,3);
|
|
Packit |
f574b8 |
extern char *HTSprintf0(char **pstr, const char *fmt,...) GCC_PRINTFLIKE(2,3);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#if defined(LY_FIND_LEAKS) /* private otherwise */
|
|
Packit |
f574b8 |
extern char *StrAllocVsprintf(char **pstr,
|
|
Packit |
f574b8 |
size_t len,
|
|
Packit |
f574b8 |
const char *fmt,
|
|
Packit |
f574b8 |
va_list * ap);
|
|
Packit |
f574b8 |
#endif
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#if defined(__CYGWIN__)
|
|
Packit |
f574b8 |
#define USE_QUOTED_PARAMETER 2 /* single and double-quoting */
|
|
Packit |
f574b8 |
#elif defined(DOSPATH)
|
|
Packit |
f574b8 |
#define USE_QUOTED_PARAMETER 1 /* double-quoting only */
|
|
Packit |
f574b8 |
#elif (defined(VMS) || defined(__EMX__))
|
|
Packit |
f574b8 |
#define USE_QUOTED_PARAMETER 0 /* no quoting */
|
|
Packit |
f574b8 |
#else
|
|
Packit |
f574b8 |
#define USE_QUOTED_PARAMETER 2 /* single and double-quoting */
|
|
Packit |
f574b8 |
#endif
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#if USE_QUOTED_PARAMETER
|
|
Packit |
f574b8 |
extern char *HTQuoteParameter(const char *parameter);
|
|
Packit |
f574b8 |
extern void HTAddXpand(char **result, const char *command, int number, const char *parameter);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#else
|
|
Packit |
f574b8 |
#define HTQuoteParameter(parameter) parameter /* simplify ifdef'ing */
|
|
Packit |
f574b8 |
#define HTAddXpand(result,command,number,parameter) HTAddParam(result,command,number,parameter)
|
|
Packit |
f574b8 |
#endif
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
extern int HTCountCommandArgs(const char *command);
|
|
Packit |
f574b8 |
extern void HTAddToCmd(char **result, const char *command, int number, const char *string);
|
|
Packit |
f574b8 |
extern void HTAddParam(char **result, const char *command, int number, const char *parameter);
|
|
Packit |
f574b8 |
extern void HTEndParam(char **result, const char *command, int number);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
/* Force an option, with leading blanks, to be appended without quoting them */
|
|
Packit |
f574b8 |
#define HTOptParam(result, command, number, parameter) HTSACat(result, parameter)
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
/* Binary copy and concat */
|
|
Packit |
f574b8 |
typedef struct {
|
|
Packit |
f574b8 |
char *str;
|
|
Packit |
f574b8 |
int len;
|
|
Packit |
f574b8 |
} bstring;
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
extern void HTSABAlloc(bstring **dest, int len);
|
|
Packit |
f574b8 |
extern void HTSABCopy(bstring **dest, const char *src, int len);
|
|
Packit |
f574b8 |
extern void HTSABCopy0(bstring **dest, const char *src);
|
|
Packit |
f574b8 |
extern void HTSABCat(bstring **dest, const char *src, int len);
|
|
Packit |
f574b8 |
extern void HTSABCat0(bstring **dest, const char *src);
|
|
Packit |
f574b8 |
extern BOOL HTSABEql(bstring *a, bstring *b);
|
|
Packit |
f574b8 |
extern void HTSABFree(bstring **ptr);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#define BStrLen(s) (((s) != 0) ? (s)->len : 0)
|
|
Packit |
f574b8 |
#define BStrData(s) (((s) != 0) ? (s)->str : 0)
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#define BINEQ(a,b) (HTSABEql(a,b)) /* like STREQ() */
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#define isBEmpty(p) ((p) == 0 || BStrData(p) == 0 || BStrLen(p) == 0)
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#define BStrAlloc(d,n) HTSABAlloc( &(d), n)
|
|
Packit |
f574b8 |
#define BStrCopy(d,s) HTSABCopy( &(d), BStrData(s), BStrLen(s))
|
|
Packit |
f574b8 |
#define BStrCopy0(d,s) HTSABCopy0( &(d), s)
|
|
Packit |
f574b8 |
#define BStrCopy1(d,s,n) HTSABCopy( &(d), s, n)
|
|
Packit |
f574b8 |
#define BStrCat(d,s) HTSABCat( &(d), BStrData(s), BStrLen(s))
|
|
Packit |
f574b8 |
#define BStrCat0(d,s) HTSABCat0( &(d), s)
|
|
Packit |
f574b8 |
#define BStrFree(d) HTSABFree( &(d))
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
extern bstring *HTBprintf(bstring **pstr, const char *fmt,...) GCC_PRINTFLIKE(2,3);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
extern void trace_bstring(bstring *data);
|
|
Packit |
f574b8 |
extern void trace_bstring2(const char *text, int size);
|
|
Packit |
f574b8 |
|
|
Packit |
f574b8 |
#ifdef __cplusplus
|
|
Packit |
f574b8 |
}
|
|
Packit |
f574b8 |
#endif
|
|
Packit |
f574b8 |
#endif /* HTSTRING_H */
|