]> git.ozlabs.org Git - ccan/blobdiff - tools/ccan_dir.c
tools: explicit find_ccan_dir()
[ccan] / tools / ccan_dir.c
diff --git a/tools/ccan_dir.c b/tools/ccan_dir.c
new file mode 100644 (file)
index 0000000..0bb9b14
--- /dev/null
@@ -0,0 +1,31 @@
+#include <ccan/talloc/talloc.h>
+#include "tools.h"
+#include <assert.h>
+#include <string.h>
+#include <stdlib.h>
+
+/* Walk up to find /ccan/ => ccan directory. */
+static unsigned int ccan_dir_prefix(const char *fulldir)
+{
+       unsigned int i;
+
+       assert(fulldir[0] == '/');
+       for (i = strlen(fulldir) - 1; i > 0; i--) {
+               if (strncmp(fulldir+i, "/ccan", 5) != 0)
+                       continue;
+               if (fulldir[i+5] != '\0' && fulldir[i+5] != '/')
+                       continue;
+               return i + 1;
+       }
+       return 0;
+}
+
+const char *find_ccan_dir(const char *base)
+{
+       unsigned int prefix = ccan_dir_prefix(base);
+
+       if (!prefix)
+               return NULL;
+
+       return talloc_strndup(NULL, base, prefix);
+}