utils.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * Copyright (C) 2013 Felix Fietkau <nbd@openwrt.org>
  3. * Copyright (C) 2013 John Crispin <blogic@openwrt.org>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU Lesser General Public License version 2.1
  7. * as published by the Free Software Foundation
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. */
  14. #ifndef __PROCD_UTILS_H
  15. #define __PROCD_UTILS_H
  16. #include <libubox/avl.h>
  17. #include <libubox/blob.h>
  18. #include <libubox/blobmsg.h>
  19. struct blobmsg_list_node {
  20. struct avl_node avl;
  21. struct blob_attr *data;
  22. };
  23. typedef bool (*blobmsg_list_cmp)(struct blobmsg_list_node *l1, struct blobmsg_list_node *l2);
  24. typedef void (*blobmsg_update_cb)(struct blobmsg_list_node *n);
  25. struct blobmsg_list {
  26. struct avl_tree avl;
  27. int node_offset;
  28. int node_len;
  29. blobmsg_list_cmp cmp;
  30. };
  31. #define blobmsg_list_simple_init(list) \
  32. __blobmsg_list_init(list, 0, sizeof(struct blobmsg_list_node), NULL)
  33. #define blobmsg_list_init(list, type, field, cmp) \
  34. __blobmsg_list_init(list, offsetof(type, field), sizeof(type), cmp)
  35. #define blobmsg_list_for_each(list, element) \
  36. avl_for_each_element(&(list)->avl, element, avl)
  37. void __blobmsg_list_init(struct blobmsg_list *list, int offset, int len, blobmsg_list_cmp cmp);
  38. int blobmsg_list_fill(struct blobmsg_list *list, void *data, int len, bool array);
  39. void blobmsg_list_free(struct blobmsg_list *list);
  40. bool blobmsg_list_equal(struct blobmsg_list *l1, struct blobmsg_list *l2);
  41. void blobmsg_list_move(struct blobmsg_list *list, struct blobmsg_list *src);
  42. #endif