diff options
author | xhe <xw897002528@gmail.com> | 2018-12-07 11:57:44 +0800 |
---|---|---|
committer | rofl0r <retnyg@gmx.net> | 2019-01-16 02:38:18 +0000 |
commit | 567885c51345725bae9aaf2cfa675b75f6aef30c (patch) | |
tree | 183a5e6a274ef452c01c05fc27d35dcc11e96f95 | |
parent | 445d2550c74b1dea3f621e160d364484448da0bc (diff) | |
download | gettext-tiny-567885c51345725bae9aaf2cfa675b75f6aef30c.tar.gz |
poparser: optimize by saving strlen() results
-rw-r--r-- | src/poparser.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/poparser.c b/src/poparser.c index e4eff3c..feeaca5 100644 --- a/src/poparser.c +++ b/src/poparser.c @@ -354,6 +354,7 @@ enum po_error poparser_finish(struct po_parser *p) { size_t poparser_sysdep(const char *in, char *out, int cnt[]) { const char *x, *y, *outs; + size_t m; int n; outs = out; x = in; @@ -362,24 +363,27 @@ size_t poparser_sysdep(const char *in, char *out, int cnt[]) { y++; for (n=0; n < st_max; n++) { - if (!strncmp(y, sysdep_str[n], strlen(sysdep_str[n]))) { + m = strlen(sysdep_str[n]); + if (!strncmp(y, sysdep_str[n], m)) { if (outs) memcpy(out, x, y-x); out += y-x; - x = y + strlen(sysdep_str[n]); + x = y + m; y = sysdep_repl[n][cnt[n]+1]; + m = strlen(y); if (outs) - memcpy(out, y, strlen(y)); - out += strlen(y); + memcpy(out, y, m); + out += m; break; } } } + m = strlen(x); if (outs) - memcpy(out, x, strlen(x) + 1); - out += strlen(x) + 1; + memcpy(out, x, m+1); + out += m + 1; return out - outs; } |