]> git.ozlabs.org Git - ccan/blobdiff - tools/manifest.c
base64: fix for unsigned chars (e.g. ARM).
[ccan] / tools / manifest.c
index 762550ea4122549c00d7363b413ea657d91ae53e..82668acfed05fd43eab6b59c7d61dba4f258652f 100644 (file)
@@ -3,6 +3,7 @@
 #include "tools.h"
 #include <ccan/str/str.h>
 #include <ccan/tal/link/link.h>
+#include <ccan/tal/grab_file/grab_file.h>
 #include <ccan/tal/path/path.h>
 #include <ccan/hash/hash.h>
 #include <ccan/htable/htable_type.h>
@@ -43,10 +44,10 @@ static struct htable_manifest *manifests;
 const char *get_ccan_file_contents(struct ccan_file *f)
 {
        if (!f->contents) {
-               f->contents = tal_grab_file(f, f->fullname,
-                                              &f->contents_size);
+               f->contents = grab_file(f, f->fullname);
                if (!f->contents)
                        err(1, "Reading file %s", f->fullname);
+               f->contents_size = tal_count(f->contents) - 1;
        }
        return f->contents;
 }
@@ -78,6 +79,8 @@ struct ccan_file *new_ccan_file(const void *ctx, const char *dir,
        f->fullname = path_join(f, dir, f->name);
        f->contents = NULL;
        f->simplified = NULL;
+       f->idempotent_cond = NULL;
+
        return f;
 }
 
@@ -109,8 +112,8 @@ static void add_files(struct manifest *m, const char *base, const char *subdir)
                f = new_ccan_file(m, m->dir,
                                  subdir ? path_join(m, subdir, ent->d_name)
                                  : ent->d_name);
-               if (lstat(f->fullname, &st) != 0)
-                       err(1, "lstat %s", f->fullname);
+               if (stat(f->fullname, &st) != 0)
+                       err(1, "stat %s", f->fullname);
 
                if (S_ISDIR(st.st_mode)) {
                        size_t len = tal_count(subs);
@@ -164,16 +167,23 @@ static void add_files(struct manifest *m, const char *base, const char *subdir)
                if (!m->info_file
                    && list_empty(&m->c_files)
                    && list_empty(&m->h_files))
-                       errx(1, "No _info, C or H files found here!");
-
-               for (i = 0; i < tal_count(subs); i++)
-                       add_files(m, base, subs[i]);
+                       errx(1, "No _info, C or H files found in %s", thisdir);
+
+               /* Don't enter subdirs with _info: they're separate modules. */
+               for (i = 0; i < tal_count(subs); i++) {
+                       struct stat st;
+                       char *subinfo = path_join(subs, base,
+                                                 path_join(subs, subs[i],
+                                                           "_info"));
+                       if (lstat(subinfo, &st) != 0)
+                               add_files(m, base, subs[i]);
+               }
        }
        tal_free(subs);
 }
 
 static int cmp_names(struct ccan_file *const *a, struct ccan_file *const *b,
-                    void *unused)
+                    void *unused UNNEEDED)
 {
        return strcmp((*a)->name, (*b)->name);
 }