123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /**
- * cs_str.h
- * Copyright (c) 2007-2018 ls
- **/
- #ifndef _CS_STR_H_INCLUDED_
- #define _CS_STR_H_INCLUDED_
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * converts hex char (0-9, A-Z, a-z) to decimal.
- * returns 0xFF on invalid input.
- */
- #define X2C(x, c) { \
- c = (u_char)(x - '0'); if (c > 9) { \
- c = (u_char)((c + '0' - 1) | 0x20); \
- c = (u_char)(c - 'a' + 11);}}
- #define CS_KB 1 << 10
- #define CS_MB 1 << 20
- #define CS_GB 1 << 30
- typedef struct cs_buf_s{
- u_char *buf;
- size_t used;
- size_t size;
- } cs_buf_t;
- #define cs_buf_str(b) (b)->buf
- #define cs_buf_used(b) (b)->used
- #define cs_buf_size(b) (b)->size
- #define cs_buf_strend(b) *((b)->buf + (b)->used) = '\0'
- #define cs_buf_isempty(b) ((b)->size == 0)
- #define cs_malloc malloc
- #define cs_free free
- #define CS_MALLOC(T, n) (T *)cs_malloc(sizeof(T) * (n))
- #define cs_bcpy(d, s, n) (u_char *)memcpy(d, s, n)
- #define cs_bcmp(d, s, n) memcmp(d, s, n)
- #define cs_bchr(s, c, n) (u_char *)memchr(s, c, n)
- #define cs_bset(s, v, n) memset(s, v, n)
- #define cs_bzero(s, n) memset(s, 0, n)
- CS_API size_t cs_strerror(u_char *err, const char *fmt, ...);
- CS_API size_t cs_strlen(const u_char *s);
- CS_API u_char *cs_tolower(u_char *s);
- CS_API u_char *cs_toupper(u_char *s);
- CS_API u_char *cs_strcpy(u_char *d, const u_char *s);
- CS_API u_char *cs_strncpy(u_char *d, const u_char *s, size_t n);
- CS_API u_char *cs_strcat(u_char *d, const u_char *s);
- CS_API u_char *cs_strncat(u_char *d, const u_char *s, size_t n);
- CS_API int cs_strcmp(const u_char *s1, const u_char *s2);
- CS_API int cs_strncmp(const u_char *s1, const u_char *s2, size_t n);
- CS_API int cs_strcasecmp(u_char *s1, u_char *s2);
- CS_API int cs_strncasecmp(u_char *s1, u_char *s2, size_t n);
- CS_API u_char *cs_strchr(const u_char *s, u_char c);
- CS_API u_char *cs_strstr(const u_char *s, u_char *d);
- CS_API u_char *cs_strrchr(const u_char *s, u_char c);
- CS_API size_t cs_strchrcpy(u_char *d, const u_char *s, u_char c);
- CS_API u_char *cs_strdup(u_char *s, size_t n);
- CS_API cs_buf_t *cs_buf_init(u_char *p, size_t n);
- CS_API cs_buf_t *cs_buf_new(size_t n);
- CS_API void cs_buf_free(cs_buf_t *buf);
- CS_API size_t cs_buf_cat(cs_buf_t *d, cs_buf_t *s);
- CS_API u_char *cs_buf_bcpy(cs_buf_t *buf, u_char *s, size_t n);
- CS_API u_char *cs_buf_bcat(cs_buf_t *buf, u_char *s, size_t n);
- CS_API int cs_buf_cmp(cs_buf_t *d, cs_buf_t *s);
- CS_API cs_int_t cs_atoi(u_char *s, size_t n);
- CS_API cs_uint_t cs_atou(u_char *s, size_t n);
- CS_API cs_int64_t cs_atoi64(u_char *s, size_t n);
- CS_API cs_int_t cs_htoi(u_char *s, size_t n);
- CS_API cs_uint_t cs_htou(u_char *s, size_t n);
- CS_API cs_int_t cs_btoi(u_char *s, size_t n);
- CS_API cs_int_t cs_btou(u_char *s, size_t n);
- CS_API size_t cs_uri_escape(u_char *d, const u_char *s);
- CS_API size_t cs_uri_unescape(u_char *d, const u_char *s);
- CS_API size_t cs_json_escape(u_char *d, u_char *s, size_t n);
- CS_API size_t cs_hex_dump(u_char *d, u_char *s, size_t n);
- CS_API size_t cs_hex_undump(u_char *d, const u_char *s, size_t n);
- CS_API void cs_base64_encode(cs_buf_t *d, cs_buf_t *s);
- CS_API cs_int_t cs_base64_decode(cs_buf_t *d, cs_buf_t *s);
- CS_API cs_uint_t cs_utf8_decode(u_char **s, size_t n);
- CS_API size_t cs_utf8_length(u_char *s, size_t n);
- CS_API cs_uint_t cs_hash_djb2(const u_char *s);
- CS_API cs_uint64_t cs_hash_djb2_64(const u_char *s);
- CS_API u_char *cs_md5(u_char *d, const u_char *s, size_t n);
- CS_API u_char *cs_sha1(u_char *d, const u_char *s, size_t n);
- CS_API cs_uint_t cs_crc32c(const u_char *s, size_t n);
- #ifdef __cplusplus
- }
- #endif /* C++ support */
- #endif
|