summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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;
}