Simplify CFCFile_*_path
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/2452a905 Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/2452a905 Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/2452a905 Branch: refs/heads/master Commit: 2452a905f905a3a69d598bf293dfd7bbc1b115ee Parents: e9641a0 Author: Nick Wellnhofer <[email protected]> Authored: Wed Dec 26 21:45:27 2012 +0100 Committer: Nick Wellnhofer <[email protected]> Committed: Fri Dec 28 22:23:10 2012 +0100 ---------------------------------------------------------------------- clownfish/compiler/perl/lib/Clownfish/CFC.xs | 14 ++--- clownfish/compiler/src/CFCBindFile.c | 6 +-- clownfish/compiler/src/CFCFile.c | 55 ++++++--------------- clownfish/compiler/src/CFCFile.h | 21 ++------ clownfish/compiler/src/CFCHierarchy.c | 8 +-- 5 files changed, 32 insertions(+), 72 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/2452a905/clownfish/compiler/perl/lib/Clownfish/CFC.xs ---------------------------------------------------------------------- diff --git a/clownfish/compiler/perl/lib/Clownfish/CFC.xs b/clownfish/compiler/perl/lib/Clownfish/CFC.xs index 058f3b9..3a23bd7 100644 --- a/clownfish/compiler/perl/lib/Clownfish/CFC.xs +++ b/clownfish/compiler/perl/lib/Clownfish/CFC.xs @@ -591,24 +591,22 @@ ALIAS: cfh_path = 3 CODE: { - size_t buf_size = CFCFile_path_buf_size(self, base_dir); - RETVAL = newSV(buf_size); - SvPOK_on(RETVAL); - char *buf = SvPVX(RETVAL); + char *buf; switch (ix) { case 1: - CFCFile_c_path(self, buf, buf_size, base_dir); + buf = CFCFile_c_path(self, base_dir); break; case 2: - CFCFile_h_path(self, buf, buf_size, base_dir); + buf = CFCFile_h_path(self, base_dir); break; case 3: - CFCFile_cfh_path(self, buf, buf_size, base_dir); + buf = CFCFile_cfh_path(self, base_dir); break; default: croak("unexpected ix value: %d", (int)ix); } - SvCUR_set(RETVAL, strlen(buf)); + RETVAL = newSVpvn(buf, strlen(buf)); + FREEMEM(buf); } OUTPUT: RETVAL http://git-wip-us.apache.org/repos/asf/lucy/blob/2452a905/clownfish/compiler/src/CFCBindFile.c ---------------------------------------------------------------------- diff --git a/clownfish/compiler/src/CFCBindFile.c b/clownfish/compiler/src/CFCBindFile.c index 914c1f5..ad98bb3 100644 --- a/clownfish/compiler/src/CFCBindFile.c +++ b/clownfish/compiler/src/CFCBindFile.c @@ -33,10 +33,8 @@ CFCBindFile_write_h(CFCFile *file, const char *dest, const char *header, CFCUTIL_NULL_CHECK(footer); // Make directories. - size_t h_path_buf_size = CFCFile_path_buf_size(file, dest); - char *h_path = (char*)MALLOCATE(h_path_buf_size); - CFCFile_h_path(file, h_path, h_path_buf_size, dest); - char *h_dir = CFCUtil_strdup(h_path); + 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] == CFCUTIL_PATH_SEP_CHAR) { h_dir[len] = 0; http://git-wip-us.apache.org/repos/asf/lucy/blob/2452a905/clownfish/compiler/src/CFCFile.c ---------------------------------------------------------------------- diff --git a/clownfish/compiler/src/CFCFile.c b/clownfish/compiler/src/CFCFile.c index 6e827d5..6daec86 100644 --- a/clownfish/compiler/src/CFCFile.c +++ b/clownfish/compiler/src/CFCFile.c @@ -142,24 +142,16 @@ CFCFile_add_block(CFCFile *self, CFCBase *block) { } } -static void -S_some_path(CFCFile *self, char *buf, size_t buf_size, const char *base_dir, - const char *ext) { - size_t needed = CFCFile_path_buf_size(self, base_dir); - if (strlen(ext) > 4) { - CFCUtil_die("ext cannot be more than 4 characters."); - } - if (needed > buf_size) { - CFCUtil_die("Need buf_size of %lu, but got %lu", - (unsigned long)needed, (unsigned long)buf_size); - } +static char* +S_some_path(CFCFile *self, const char *base_dir, const char *ext) { const char *path_part = CFCFileSpec_get_path_part(self->spec); + char *buf; if (base_dir) { - sprintf(buf, "%s" CFCUTIL_PATH_SEP "%s%s", base_dir, path_part, - ext); + buf = CFCUtil_sprintf("%s" CFCUTIL_PATH_SEP "%s%s", base_dir, + path_part, ext); } else { - sprintf(buf, "%s%s", path_part, ext); + buf = CFCUtil_sprintf("%s%s", path_part, ext); } for (size_t i = 0; buf[i] != '\0'; i++) { #ifdef _WIN32 @@ -168,37 +160,22 @@ S_some_path(CFCFile *self, char *buf, size_t buf_size, const char *base_dir, if (buf[i] == '\\') { buf[i] = '/'; } #endif } + return buf; } -size_t -CFCFile_path_buf_size(CFCFile *self, const char *base_dir) { - const char *path_part = CFCFileSpec_get_path_part(self->spec); - size_t size = strlen(path_part); - size += 4; // Max extension length. - size += 1; // NULL-termination. - if (base_dir) { - size += strlen(base_dir); - size += strlen(CFCUTIL_PATH_SEP); - } - return size; -} - -void -CFCFile_c_path(CFCFile *self, char *buf, size_t buf_size, - const char *base_dir) { - S_some_path(self, buf, buf_size, base_dir, ".c"); +char* +CFCFile_c_path(CFCFile *self, const char *base_dir) { + return S_some_path(self, base_dir, ".c"); } -void -CFCFile_h_path(CFCFile *self, char *buf, size_t buf_size, - const char *base_dir) { - S_some_path(self, buf, buf_size, base_dir, ".h"); +char* +CFCFile_h_path(CFCFile *self, const char *base_dir) { + return S_some_path(self, base_dir, ".h"); } -void -CFCFile_cfh_path(CFCFile *self, char *buf, size_t buf_size, - const char *base_dir) { - S_some_path(self, buf, buf_size, base_dir, ".cfh"); +char* +CFCFile_cfh_path(CFCFile *self, const char *base_dir) { + return S_some_path(self, base_dir, ".cfh"); } CFCBase** http://git-wip-us.apache.org/repos/asf/lucy/blob/2452a905/clownfish/compiler/src/CFCFile.h ---------------------------------------------------------------------- diff --git a/clownfish/compiler/src/CFCFile.h b/clownfish/compiler/src/CFCFile.h index 25ea0f1..e360605 100644 --- a/clownfish/compiler/src/CFCFile.h +++ b/clownfish/compiler/src/CFCFile.h @@ -51,30 +51,21 @@ CFCFile_destroy(CFCFile *self); void CFCFile_add_block(CFCFile *self, CFCBase *block); -/** Calculate the size of the buffer needed for a call to c_path(), h_path(), - * or cfh_path(). - */ -size_t -CFCFile_path_buf_size(CFCFile *self, const char *base_dir); - /** Given a base directory, return a path name derived from the File's * path_part with a ".c" extension. */ -void -CFCFile_c_path(CFCFile *self, char *buf, size_t buf_size, - const char *base_dir); +char* +CFCFile_c_path(CFCFile *self, const char *base_dir); /** As c_path, but with a ".h" extension. */ -void -CFCFile_h_path(CFCFile *self, char *buf, size_t buf_size, - const char *base_dir); +char* +CFCFile_h_path(CFCFile *self, const char *base_dir); /** As c_path, but with a ".cfh" extension. */ -void -CFCFile_cfh_path(CFCFile *self, char *buf, size_t buf_size, - const char *base_dir); +char* +CFCFile_cfh_path(CFCFile *self, const char *base_dir); /** Return all blocks as an array. */ http://git-wip-us.apache.org/repos/asf/lucy/blob/2452a905/clownfish/compiler/src/CFCHierarchy.c ---------------------------------------------------------------------- diff --git a/clownfish/compiler/src/CFCHierarchy.c b/clownfish/compiler/src/CFCHierarchy.c index 949bd67..e98a258 100644 --- a/clownfish/compiler/src/CFCHierarchy.c +++ b/clownfish/compiler/src/CFCHierarchy.c @@ -388,12 +388,8 @@ S_do_propagate_modified(CFCHierarchy *self, CFCClass *klass, int modified) { CFCUTIL_NULL_CHECK(file); const char *source_dir = CFCFile_get_source_dir(file); CFCUTIL_NULL_CHECK(source_dir); - size_t cfh_buf_size = CFCFile_path_buf_size(file, source_dir); - char *source_path = (char*)MALLOCATE(cfh_buf_size); - CFCFile_cfh_path(file, source_path, cfh_buf_size, source_dir); - size_t h_buf_size = CFCFile_path_buf_size(file, self->dest); - char *h_path = (char*)MALLOCATE(h_buf_size); - CFCFile_h_path(file, h_path, h_buf_size, self->dest); + char *source_path = CFCFile_cfh_path(file, source_dir); + char *h_path = CFCFile_h_path(file, self->dest); if (!CFCUtil_current(source_path, h_path)) { modified = true;
