summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-06-29 07:23:16 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-06-29 07:25:03 +0900
commitac8360003ecfa1ec21295533c9213f17fd8e39bb (patch)
tree4f718525bb86e5f2f3cad58b33a96c677a242e32
parent233cb49903fa17637bd51f4a16b4ca61e0750f24 (diff)
downloadmruby-ac8360003ecfa1ec21295533c9213f17fd8e39bb.tar.gz
mruby-ac8360003ecfa1ec21295533c9213f17fd8e39bb.zip
Fix the bug that `mrbc` generates `a.rb.mrb` instead of `a.mrb`.
The bug was introduced by 9dfe50f1d.
-rw-r--r--mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c b/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c
index 69c1095df..4d984e773 100644
--- a/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c
+++ b/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c
@@ -52,14 +52,27 @@ usage(const char *name)
static char *
get_outfilename(mrb_state *mrb, char *infile, const char *ext)
{
- size_t infilelen;
- size_t flen;
+ size_t ilen, flen, elen;
char *outfile;
+ char *p = NULL;
- infilelen = strlen(infile);
- flen = infilelen + strlen(ext) + 1;
- outfile = (char*)mrb_malloc(mrb, flen);
- snprintf(outfile, flen, "%s%s", infile, ext);
+ ilen = strlen(infile);
+ flen = ilen;
+ if (*ext) {
+ elen = strlen(ext);
+ if ((p = strrchr(infile, '.'))) {
+ ilen = p - infile;
+ }
+ flen += elen;
+ }
+ else {
+ flen = ilen;
+ }
+ outfile = (char*)mrb_malloc(mrb, flen+1);
+ strncpy(outfile, infile, ilen+1);
+ if (p) {
+ strncpy(outfile+ilen, ext, elen+1);
+ }
return outfile;
}