cs_str.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /**
  2. * cs_str.h
  3. * Copyright (c) 2007-2018 ls
  4. **/
  5. #ifndef _CS_STR_H_INCLUDED_
  6. #define _CS_STR_H_INCLUDED_
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. /*
  11. * converts hex char (0-9, A-Z, a-z) to decimal.
  12. * returns 0xFF on invalid input.
  13. */
  14. #define X2C(x, c) { \
  15. c = (u_char)(x - '0'); if (c > 9) { \
  16. c = (u_char)((c + '0' - 1) | 0x20); \
  17. c = (u_char)(c - 'a' + 11);}}
  18. #define CS_KB 1 << 10
  19. #define CS_MB 1 << 20
  20. #define CS_GB 1 << 30
  21. typedef struct cs_buf_s{
  22. u_char *buf;
  23. size_t used;
  24. size_t size;
  25. } cs_buf_t;
  26. #define cs_buf_str(b) (b)->buf
  27. #define cs_buf_used(b) (b)->used
  28. #define cs_buf_size(b) (b)->size
  29. #define cs_buf_strend(b) *((b)->buf + (b)->used) = '\0'
  30. #define cs_buf_isempty(b) ((b)->size == 0)
  31. #define cs_malloc malloc
  32. #define cs_free free
  33. #define CS_MALLOC(T, n) (T *)cs_malloc(sizeof(T) * (n))
  34. #define cs_bcpy(d, s, n) (u_char *)memcpy(d, s, n)
  35. #define cs_bcmp(d, s, n) memcmp(d, s, n)
  36. #define cs_bchr(s, c, n) (u_char *)memchr(s, c, n)
  37. #define cs_bset(s, v, n) memset(s, v, n)
  38. #define cs_bzero(s, n) memset(s, 0, n)
  39. CS_API size_t cs_strerror(u_char *err, const char *fmt, ...);
  40. CS_API size_t cs_strlen(const u_char *s);
  41. CS_API u_char *cs_tolower(u_char *s);
  42. CS_API u_char *cs_toupper(u_char *s);
  43. CS_API u_char *cs_strcpy(u_char *d, const u_char *s);
  44. CS_API u_char *cs_strncpy(u_char *d, const u_char *s, size_t n);
  45. CS_API u_char *cs_strcat(u_char *d, const u_char *s);
  46. CS_API u_char *cs_strncat(u_char *d, const u_char *s, size_t n);
  47. CS_API int cs_strcmp(const u_char *s1, const u_char *s2);
  48. CS_API int cs_strncmp(const u_char *s1, const u_char *s2, size_t n);
  49. CS_API int cs_strcasecmp(u_char *s1, u_char *s2);
  50. CS_API int cs_strncasecmp(u_char *s1, u_char *s2, size_t n);
  51. CS_API u_char *cs_strchr(const u_char *s, u_char c);
  52. CS_API u_char *cs_strstr(const u_char *s, u_char *d);
  53. CS_API u_char *cs_strrchr(const u_char *s, u_char c);
  54. CS_API size_t cs_strchrcpy(u_char *d, const u_char *s, u_char c);
  55. CS_API u_char *cs_strdup(u_char *s, size_t n);
  56. CS_API cs_buf_t *cs_buf_init(u_char *p, size_t n);
  57. CS_API cs_buf_t *cs_buf_new(size_t n);
  58. CS_API void cs_buf_free(cs_buf_t *buf);
  59. CS_API size_t cs_buf_cat(cs_buf_t *d, cs_buf_t *s);
  60. CS_API u_char *cs_buf_bcpy(cs_buf_t *buf, u_char *s, size_t n);
  61. CS_API u_char *cs_buf_bcat(cs_buf_t *buf, u_char *s, size_t n);
  62. CS_API int cs_buf_cmp(cs_buf_t *d, cs_buf_t *s);
  63. CS_API cs_int_t cs_atoi(u_char *s, size_t n);
  64. CS_API cs_uint_t cs_atou(u_char *s, size_t n);
  65. CS_API cs_int64_t cs_atoi64(u_char *s, size_t n);
  66. CS_API cs_int_t cs_htoi(u_char *s, size_t n);
  67. CS_API cs_uint_t cs_htou(u_char *s, size_t n);
  68. CS_API cs_int_t cs_btoi(u_char *s, size_t n);
  69. CS_API cs_int_t cs_btou(u_char *s, size_t n);
  70. CS_API size_t cs_uri_escape(u_char *d, const u_char *s);
  71. CS_API size_t cs_uri_unescape(u_char *d, const u_char *s);
  72. CS_API size_t cs_json_escape(u_char *d, u_char *s, size_t n);
  73. CS_API size_t cs_hex_dump(u_char *d, u_char *s, size_t n);
  74. CS_API size_t cs_hex_undump(u_char *d, const u_char *s, size_t n);
  75. CS_API void cs_base64_encode(cs_buf_t *d, cs_buf_t *s);
  76. CS_API cs_int_t cs_base64_decode(cs_buf_t *d, cs_buf_t *s);
  77. CS_API cs_uint_t cs_utf8_decode(u_char **s, size_t n);
  78. CS_API size_t cs_utf8_length(u_char *s, size_t n);
  79. CS_API cs_uint_t cs_hash_djb2(const u_char *s);
  80. CS_API cs_uint64_t cs_hash_djb2_64(const u_char *s);
  81. CS_API u_char *cs_md5(u_char *d, const u_char *s, size_t n);
  82. CS_API u_char *cs_sha1(u_char *d, const u_char *s, size_t n);
  83. CS_API cs_uint_t cs_crc32c(const u_char *s, size_t n);
  84. #ifdef __cplusplus
  85. }
  86. #endif /* C++ support */
  87. #endif