line_splitter.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #include "../libnetdata.h"
  3. bool line_splitter_reconstruct_line(BUFFER *wb, void *ptr) {
  4. struct line_splitter *spl = ptr;
  5. if(!spl) return false;
  6. size_t added = 0;
  7. for(size_t i = 0; i < spl->num_words ;i++) {
  8. if(i) buffer_fast_strcat(wb, " ", 1);
  9. buffer_fast_strcat(wb, "'", 1);
  10. const char *s = get_word(spl->words, spl->num_words, i);
  11. buffer_strcat(wb, s?s:"");
  12. buffer_fast_strcat(wb, "'", 1);
  13. added++;
  14. }
  15. return added > 0;
  16. }
  17. inline int pluginsd_isspace(char c) {
  18. switch(c) {
  19. case ' ':
  20. case '\t':
  21. case '\r':
  22. case '\n':
  23. case '=':
  24. return 1;
  25. default:
  26. return 0;
  27. }
  28. }
  29. inline int config_isspace(char c) {
  30. switch (c) {
  31. case ' ':
  32. case '\t':
  33. case '\r':
  34. case '\n':
  35. case ',':
  36. return 1;
  37. default:
  38. return 0;
  39. }
  40. }
  41. inline int group_by_label_isspace(char c) {
  42. if(c == ',' || c == '|')
  43. return 1;
  44. return 0;
  45. }
  46. bool isspace_map_pluginsd[256] = {};
  47. bool isspace_map_config[256] = {};
  48. bool isspace_map_group_by_label[256] = {};
  49. __attribute__((constructor)) void initialize_is_space_arrays(void) {
  50. for(int c = 0; c < 256 ; c++) {
  51. isspace_map_pluginsd[c] = pluginsd_isspace((char) c);
  52. isspace_map_config[c] = config_isspace((char) c);
  53. isspace_map_group_by_label[c] = group_by_label_isspace((char) c);
  54. }
  55. }