summaryrefslogtreecommitdiffstats
path: root/WWW/Library/Implementation/HTString.h
diff options
context:
space:
mode:
Diffstat (limited to 'WWW/Library/Implementation/HTString.h')
-rw-r--r--WWW/Library/Implementation/HTString.h167
1 files changed, 167 insertions, 0 deletions
diff --git a/WWW/Library/Implementation/HTString.h b/WWW/Library/Implementation/HTString.h
new file mode 100644
index 0000000..82520ad
--- /dev/null
+++ b/WWW/Library/Implementation/HTString.h
@@ -0,0 +1,167 @@
+/*
+ * $LynxId: HTString.h,v 1.41 2021/06/09 19:30:55 tom Exp $
+ * 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 */
+
+#define StrNCat(a,b,c) strncat((a),(b),(size_t)(c))
+#define StrNCpy(a,b,c) strncpy((a),(b),(size_t)(c))
+#define StrNCmp(a,b,c) strncmp((a),(b),(size_t)(c))
+
+#define MemCpy(a,b,c) memcpy((a),(b),(size_t)(c))
+#define MemCmp(a,b,c) memcmp((a),(b),(size_t)(c))
+
+ /*
+ * Workaround for glibc header defect combined with -Wlogical-op warnings
+ */
+#define StrChr (strchr)
+
+ /*
+ * 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(__CYGWIN__)
+#define USE_QUOTED_PARAMETER 2 /* single and double-quoting */
+#elif defined(DOSPATH)
+#define USE_QUOTED_PARAMETER 1 /* double-quoting only */
+#elif (defined(VMS) || defined(__EMX__))
+#define USE_QUOTED_PARAMETER 0 /* no quoting */
+#else
+#define USE_QUOTED_PARAMETER 2 /* single and double-quoting */
+#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 HTSABAlloc(bstring **dest, int len);
+ 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 || BStrData(p) == 0 || BStrLen(p) == 0)
+
+#define BStrAlloc(d,n) HTSABAlloc( &(d), n)
+#define BStrCopy(d,s) HTSABCopy( &(d), BStrData(s), BStrLen(s))
+#define BStrCopy0(d,s) HTSABCopy0( &(d), s)
+#define BStrCopy1(d,s,n) HTSABCopy( &(d), s, n)
+#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 */