utils.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. #define CMDLINE_SIZE 2048
  20. struct blobmsg_list_node {
  21. struct avl_node avl;
  22. struct blob_attr *data;
  23. };
  24. typedef bool (*blobmsg_list_cmp)(struct blobmsg_list_node *l1, struct blobmsg_list_node *l2);
  25. typedef void (*blobmsg_update_cb)(struct blobmsg_list_node *n);
  26. struct blobmsg_list {
  27. struct avl_tree avl;
  28. int node_offset;
  29. int node_len;
  30. blobmsg_list_cmp cmp;
  31. };
  32. #define blobmsg_list_simple_init(list) \
  33. __blobmsg_list_init(list, 0, sizeof(struct blobmsg_list_node), NULL)
  34. #define blobmsg_list_init(list, type, field, cmp) \
  35. __blobmsg_list_init(list, offsetof(type, field), sizeof(type), cmp)
  36. #define blobmsg_list_for_each(list, element) \
  37. avl_for_each_element(&(list)->avl, element, avl)
  38. void __blobmsg_list_init(struct blobmsg_list *list, int offset, int len, blobmsg_list_cmp cmp);
  39. int blobmsg_list_fill(struct blobmsg_list *list, void *data, int len, bool array);
  40. void blobmsg_list_free(struct blobmsg_list *list);
  41. bool blobmsg_list_equal(struct blobmsg_list *l1, struct blobmsg_list *l2);
  42. void blobmsg_list_move(struct blobmsg_list *list, struct blobmsg_list *src);
  43. char* get_cmdline_val(const char* name, char* out, int len);
  44. int patch_fd(const char *device, int fd, int flags);
  45. int patch_stdio(const char *device);
  46. #endif