diff options
| author | Cremno <[email protected]> | 2013-08-07 20:12:27 +0200 |
|---|---|---|
| committer | Cremno <[email protected]> | 2013-08-07 20:35:38 +0200 |
| commit | 29381bc819bdb0602ef4005a7d01daf605310fce (patch) | |
| tree | dd6915ffbe6db006418f04e3f1d6c12b4ab9ba28 /src/parse.y | |
| parent | ba027d7806e00be6b34b2539f42b9f31e218ab91 (diff) | |
| download | mruby-29381bc819bdb0602ef4005a7d01daf605310fce.tar.gz mruby-29381bc819bdb0602ef4005a7d01daf605310fce.zip | |
parse.y: don't use strcat
Diffstat (limited to 'src/parse.y')
| -rw-r--r-- | src/parse.y | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/parse.y b/src/parse.y index 53349ef63..600cdb85c 100644 --- a/src/parse.y +++ b/src/parse.y @@ -3701,7 +3701,9 @@ parse_string(parser_state *p) int f = 0; int c; char *s = strndup(tok(p), toklen(p)); - char flag[4] = { '\0' }; + char flags[3]; + char *flag = flags; + char *dup; newtok(p); while (c = nextc(p), c != -1 && ISALPHA(c)) { @@ -3720,10 +3722,16 @@ parse_string(parser_state *p) toklen(p) > 1 ? "s" : "", tok(p)); yyerror(p, msg); } - if (f & 1) strcat(flag, "i"); - if (f & 2) strcat(flag, "x"); - if (f & 4) strcat(flag, "m"); - yylval.nd = new_regx(p, s, strdup(flag)); + if (f != 0) { + if (f & 1) *flag++ = 'i'; + if (f & 2) *flag++ = 'x'; + if (f & 4) *flag++ = 'm'; + dup = strndup(flags, (size_t)(flag - flags)); + } + else { + dup = NULL; + } + yylval.nd = new_regx(p, s, dup); return tREGEXP; } |
