diff options
| -rw-r--r-- | mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c | 25 |
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; } |
