aos_string.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "aos_string.h"
  2. typedef int (*aos_is_char_pt)(char c);
  3. static void aos_strip_str_func(aos_string_t *str, aos_is_char_pt func);
  4. char *aos_pstrdup(aos_pool_t *p, const aos_string_t *s)
  5. {
  6. return apr_pstrndup(p, s->data, s->len);
  7. }
  8. static void aos_strip_str_func(aos_string_t *str, aos_is_char_pt func)
  9. {
  10. char *data = str->data;
  11. int len = str->len;
  12. int offset = 0;
  13. if (len == 0) return;
  14. while (len > 0 && func(data[len - 1])) {
  15. --len;
  16. }
  17. for (; offset < len && func(data[offset]); ++offset) {
  18. // empty;
  19. }
  20. str->data = data + offset;
  21. str->len = len - offset;
  22. }
  23. void aos_unquote_str(aos_string_t *str)
  24. {
  25. aos_strip_str_func(str, aos_is_quote);
  26. }
  27. void aos_strip_space(aos_string_t *str)
  28. {
  29. aos_strip_str_func(str, aos_is_space);
  30. }
  31. void aos_trip_space_and_cntrl(aos_string_t *str)
  32. {
  33. aos_strip_str_func(str, aos_is_space_or_cntrl);
  34. }
  35. int aos_ends_with(const aos_string_t *str, const aos_string_t *suffix)
  36. {
  37. if (!str || !suffix) {
  38. return 0;
  39. }
  40. return (str->len >= suffix->len) && strncmp(str->data + str->len - suffix->len, suffix->data, suffix->len) == 0;
  41. }