Make manifest code do chdir into appropriate directory.
authorRusty Russell <rusty@rustcorp.com.au>
Tue, 19 Jan 2010 10:56:45 +0000 (21:26 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 19 Jan 2010 10:56:45 +0000 (21:26 +1030)
tools/ccanlint/ccanlint.c
tools/ccanlint/ccanlint.h
tools/ccanlint/compulsory_tests/check_depends_built.c
tools/ccanlint/file_analysis.c

index a0fda1a8694f533d047db190262fc8fbd0c70095..968f655e397f2719217bd4d8ed8f49002787175e 100644 (file)
@@ -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();
 
index e019c139d1a1f59deee3bc36000029cc98f5e2d8..99b0eb7cbcc69e03e55ab2ad7a4bd9b758d9263f 100644 (file)
@@ -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;
index 1392be910a3400c04d83744843c109023f1f3e96..b3332a9fc1eba3ccb98154d1c784695fd363f1d1 100644 (file)
@@ -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);
index 3152cd1e16a555e8b19ebca25c2b1836df11aed2..f2ee5d74c005467934c3e738a8f453963e3edb64 100644 (file)
@@ -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;
 }