Blame WWW/Library/Implementation/HTString.h

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