Make CFCUtil_write_file create target directory
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/73832f18 Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/73832f18 Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/73832f18 Branch: refs/heads/master Commit: 73832f18a6d4d562d7700299e7bcca6a128608ea Parents: 978b013 Author: Nick Wellnhofer <[email protected]> Authored: Fri Jul 15 14:08:42 2016 +0200 Committer: Nick Wellnhofer <[email protected]> Committed: Fri Jul 15 22:09:57 2016 +0200 ---------------------------------------------------------------------- compiler/src/CFCBindFile.c | 15 --------------- compiler/src/CFCC.c | 6 ------ compiler/src/CFCCHtml.c | 21 --------------------- compiler/src/CFCHierarchy.c | 15 --------------- compiler/src/CFCPerl.c | 10 ---------- compiler/src/CFCTestHierarchy.c | 4 +--- compiler/src/CFCUtil.c | 9 +++++++++ 7 files changed, 10 insertions(+), 70 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/73832f18/compiler/src/CFCBindFile.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCBindFile.c b/compiler/src/CFCBindFile.c index 26c215c..f7d9e51 100644 --- a/compiler/src/CFCBindFile.c +++ b/compiler/src/CFCBindFile.c @@ -35,22 +35,7 @@ CFCBindFile_write_h(CFCFile *file, const char *dest, const char *header, CFCUTIL_NULL_CHECK(header); CFCUTIL_NULL_CHECK(footer); - // Make directories. char *h_path = CFCFile_h_path(file, dest); - char *h_dir = CFCUtil_strdup(h_path); - for (size_t len = strlen(h_dir); len--;) { - if (h_dir[len] == CHY_DIR_SEP_CHAR) { - h_dir[len] = 0; - break; - } - } - if (!CFCUtil_is_dir(h_dir)) { - CFCUtil_make_path(h_dir); - if (!CFCUtil_is_dir(h_dir)) { - CFCUtil_die("Can't make path %s", h_dir); - } - } - FREEMEM(h_dir); // Create the include-guard strings. const char *include_guard_start = CFCFile_guard_start(file); http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/73832f18/compiler/src/CFCC.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCC.c b/compiler/src/CFCC.c index 698de51..6197e2e 100644 --- a/compiler/src/CFCC.c +++ b/compiler/src/CFCC.c @@ -110,12 +110,6 @@ CFCC_write_man_pages(CFCC *self) { const char *dest = CFCHierarchy_get_dest(hierarchy); char *man3_path = CFCUtil_sprintf("%s" CHY_DIR_SEP "man" CHY_DIR_SEP "man3", dest); - if (!CFCUtil_is_dir(man3_path)) { - CFCUtil_make_path(man3_path); - if (!CFCUtil_is_dir(man3_path)) { - CFCUtil_die("Can't make path %s", man3_path); - } - } // Write out any man pages that have changed. for (size_t i = 0, j = 0; ordered[i] != NULL; i++) { http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/73832f18/compiler/src/CFCCHtml.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCCHtml.c b/compiler/src/CFCCHtml.c index 72e4748..a70f626 100644 --- a/compiler/src/CFCCHtml.c +++ b/compiler/src/CFCCHtml.c @@ -295,30 +295,9 @@ CFCCHtml_write_html_docs(CFCCHtml *self) { char *filename = filenames[i]; char *path = CFCUtil_sprintf("%s" CHY_DIR_SEP "%s", doc_path, filename); - - // Make path. - - char *dir = CFCUtil_strdup(path); - for (size_t j = strlen(dir); j--;) { - if (dir[j] == CHY_DIR_SEP_CHAR) { - do { - dir[j] = '\0'; - } while (j-- && dir[j] == CHY_DIR_SEP_CHAR); - break; - } - } - - if (dir[0] != '\0' && !CFCUtil_is_dir(dir)) { - CFCUtil_make_path(dir); - if (!CFCUtil_is_dir(dir)) { - CFCUtil_die("Can't make path %s", dir); - } - } - char *html_doc = html_docs[i]; CFCUtil_write_if_changed(path, html_doc, strlen(html_doc)); FREEMEM(html_doc); - FREEMEM(dir); FREEMEM(path); FREEMEM(filename); } http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/73832f18/compiler/src/CFCHierarchy.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCHierarchy.c b/compiler/src/CFCHierarchy.c index fa09c5e..68a5d88 100644 --- a/compiler/src/CFCHierarchy.c +++ b/compiler/src/CFCHierarchy.c @@ -67,9 +67,6 @@ typedef struct CFCFindFilesContext { } CFCFindFilesContext; static void -S_do_make_path(const char *path); - -static void S_parse_parcel_files(const char *source_dir, int is_included); static void @@ -139,8 +136,6 @@ CFCHierarchy_init(CFCHierarchy *self, const char *dest) { self->inc_dest = CFCUtil_sprintf("%s" CHY_DIR_SEP "include", self->dest); self->src_dest = CFCUtil_sprintf("%s" CHY_DIR_SEP "source", self->dest); - S_do_make_path(self->inc_dest); - S_do_make_path(self->src_dest); return self; } @@ -169,16 +164,6 @@ CFCHierarchy_destroy(CFCHierarchy *self) { CFCBase_destroy((CFCBase*)self); } -static void -S_do_make_path(const char *path) { - if (!CFCUtil_is_dir(path)) { - CFCUtil_make_path(path); - if (!CFCUtil_is_dir(path)) { - CFCUtil_die("Can't make path %s", path); - } - } -} - void CFCHierarchy_add_source_dir(CFCHierarchy *self, const char *source_dir) { // Don't add directory twice. http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/73832f18/compiler/src/CFCPerl.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCPerl.c b/compiler/src/CFCPerl.c index f038a8c..62a7f48 100644 --- a/compiler/src/CFCPerl.c +++ b/compiler/src/CFCPerl.c @@ -150,15 +150,6 @@ CFCPerl_write_pod(CFCPerl *self) { for (size_t i = 0; pod_files[i].contents; i++) { char *pod = pod_files[i].contents; char *pod_path = pod_files[i].path; - char *pod_dir = CFCUtil_strdup(pod_path); - - char *last_dir_sep = strrchr(pod_dir, CHY_DIR_SEP_CHAR); - if (last_dir_sep) { - *last_dir_sep = '\0'; - if (!CFCUtil_make_path(pod_dir)) { - CFCUtil_die("Can't make path %s", pod_dir); - } - } if (CFCUtil_write_if_changed(pod_path, pod, strlen(pod))) { pod_paths[num_written] = pod_path; @@ -169,7 +160,6 @@ CFCPerl_write_pod(CFCPerl *self) { } FREEMEM(pod); - FREEMEM(pod_dir); } FREEMEM(pod_files); http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/73832f18/compiler/src/CFCTestHierarchy.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCTestHierarchy.c b/compiler/src/CFCTestHierarchy.c index 83f9081..4df8c5f 100644 --- a/compiler/src/CFCTestHierarchy.c +++ b/compiler/src/CFCTestHierarchy.c @@ -55,7 +55,7 @@ S_run_clash_tests(CFCTest *test); const CFCTestBatch CFCTEST_BATCH_HIERARCHY = { "Clownfish::CFC::Model::Hierarchy", - 48, + 47, S_run_tests }; @@ -132,8 +132,6 @@ S_run_basic_tests(CFCTest *test) { AUTOGEN_INCLUDE CHY_DIR_SEP "Animal" CHY_DIR_SEP "Dog.h", AUTOGEN_INCLUDE CHY_DIR_SEP "Animal" CHY_DIR_SEP "Util.h" }; - OK(test, CFCUtil_make_path(AUTOGEN_INCLUDE CHY_DIR_SEP "Animal"), - "make_path"); for (int i = 0; i < 3; ++i) { const char *h_path = h_paths[i]; const char *content = "#include <stdio.h>\n"; http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/73832f18/compiler/src/CFCUtil.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCUtil.c b/compiler/src/CFCUtil.c index f153904..edc9c17 100644 --- a/compiler/src/CFCUtil.c +++ b/compiler/src/CFCUtil.c @@ -380,6 +380,15 @@ CFCUtil_current(const char *orig, const char *dest) { void CFCUtil_write_file(const char *filename, const char *content, size_t len) { + const char *last_sep = strrchr(filename, CHY_DIR_SEP_CHAR); + if (last_sep != NULL && last_sep != filename) { + char *dir = CFCUtil_strndup(filename, last_sep - filename); + if (!CFCUtil_is_dir(dir) && !CFCUtil_make_path(dir)) { + CFCUtil_die("Couldn't create directory '%s'", dir); + } + FREEMEM(dir); + } + FILE *fh = fopen(filename, "w+"); if (fh == NULL) { CFCUtil_die("Couldn't open '%s': %s", filename, strerror(errno));
