summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/ccanlint/ccanlint.c5
-rw-r--r--tools/ccanlint/ccanlint.h2
-rw-r--r--tools/ccanlint/compulsory_tests/check_depends_built.c14
-rw-r--r--tools/ccanlint/file_analysis.c15
4 files changed, 19 insertions, 17 deletions
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;
}