From: Rusty Russell Date: Tue, 19 Jan 2010 10:56:45 +0000 (+1030) Subject: Make manifest code do chdir into appropriate directory. X-Git-Url: http://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=32a31d9e4fb1f312a47ae8c237ac30d6c1567ccd;hp=d1d6625caf6e9897a4a0479c0e04fee27de5b20e Make manifest code do chdir into appropriate directory. --- diff --git a/tools/ccanlint/ccanlint.c b/tools/ccanlint/ccanlint.c index a0fda1a8..968f655e 100644 --- a/tools/ccanlint/ccanlint.c +++ b/tools/ccanlint/ccanlint.c @@ -244,13 +244,14 @@ int main(int argc, char *argv[]) unsigned int score = 0, total_score = 0; struct manifest *m; struct ccanlint *i; - const char *prefix = ""; + const char *prefix = "", *dir = "."; /* I'd love to use long options, but that's not standard. */ /* FIXME: getopt_long ccan package? */ while ((c = getopt(argc, argv, "sd:vn")) != -1) { switch (c) { case 'd': + dir = optarg; prefix = talloc_append_string(talloc_basename(NULL, optarg), ": "); @@ -274,7 +275,7 @@ int main(int argc, char *argv[]) if (optind < argc) usage(argv[0]); - m = get_manifest(talloc_autofree_context()); + m = get_manifest(talloc_autofree_context(), dir); init_tests(); diff --git a/tools/ccanlint/ccanlint.h b/tools/ccanlint/ccanlint.h index e019c139..99b0eb7c 100644 --- a/tools/ccanlint/ccanlint.h +++ b/tools/ccanlint/ccanlint.h @@ -34,7 +34,7 @@ struct manifest { struct list_head dep_objs; }; -struct manifest *get_manifest(const void *ctx); +struct manifest *get_manifest(const void *ctx, const char *dir); struct ccanlint { struct list_node list; diff --git a/tools/ccanlint/compulsory_tests/check_depends_built.c b/tools/ccanlint/compulsory_tests/check_depends_built.c index 1392be91..b3332a9f 100644 --- a/tools/ccanlint/compulsory_tests/check_depends_built.c +++ b/tools/ccanlint/compulsory_tests/check_depends_built.c @@ -24,22 +24,10 @@ static const char *can_build(struct manifest *m) /* FIXME: recursive ccanlint if they ask for it. */ static bool expect_obj_file(const char *dir) { - char *olddir; struct manifest *dep_man; bool has_c_files; - olddir = talloc_getcwd(dir); - if (!olddir) - err(1, "Getting current directory"); - - /* We will fail below if this doesn't exist. */ - if (chdir(dir) != 0) - return false; - - dep_man = get_manifest(dir); - if (chdir(olddir) != 0) - err(1, "Returning to original directory '%s'", olddir); - talloc_free(olddir); + dep_man = get_manifest(dir, dir); /* If it has C files, we expect an object file built from them. */ has_c_files = !list_empty(&dep_man->c_files); diff --git a/tools/ccanlint/file_analysis.c b/tools/ccanlint/file_analysis.c index 3152cd1e..f2ee5d74 100644 --- a/tools/ccanlint/file_analysis.c +++ b/tools/ccanlint/file_analysis.c @@ -151,9 +151,10 @@ char *report_on_lines(struct list_head *files, return sofar; } -struct manifest *get_manifest(const void *ctx) +struct manifest *get_manifest(const void *ctx, const char *dir) { struct manifest *m = talloc(ctx, struct manifest); + char *olddir; unsigned int len; m->info_file = NULL; @@ -169,6 +170,13 @@ struct manifest *get_manifest(const void *ctx) list_head_init(&m->dep_dirs); list_head_init(&m->dep_objs); + olddir = talloc_getcwd(NULL); + if (!olddir) + err(1, "Getting current directory"); + + if (chdir(dir) != 0) + err(1, "Failed to chdir to %s", dir); + m->basename = talloc_getcwd(m); if (!m->basename) err(1, "Getting current directory"); @@ -182,6 +190,11 @@ struct manifest *get_manifest(const void *ctx) m->basename++; add_files(m, ""); + + if (chdir(olddir) != 0) + err(1, "Returning to original directory '%s'", olddir); + talloc_free(olddir); + return m; }