ccan_dir.c 632 B

12345678910111213141516171819202122232425262728293031
  1. #include <ccan/talloc/talloc.h>
  2. #include "tools.h"
  3. #include <assert.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. /* Walk up to find /ccan/ => ccan directory. */
  7. static unsigned int ccan_dir_prefix(const char *fulldir)
  8. {
  9. unsigned int i;
  10. assert(fulldir[0] == '/');
  11. for (i = strlen(fulldir) - 1; i > 0; i--) {
  12. if (strncmp(fulldir+i, "/ccan", 5) != 0)
  13. continue;
  14. if (fulldir[i+5] != '\0' && fulldir[i+5] != '/')
  15. continue;
  16. return i + 1;
  17. }
  18. return 0;
  19. }
  20. const char *find_ccan_dir(const char *base)
  21. {
  22. unsigned int prefix = ccan_dir_prefix(base);
  23. if (!prefix)
  24. return NULL;
  25. return talloc_strndup(NULL, base, prefix);
  26. }