HTString.h 4.8 KB

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