summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxhe <xw897002528@gmail.com>2018-12-07 11:57:44 +0800
committerrofl0r <retnyg@gmx.net>2019-01-16 02:38:18 +0000
commit567885c51345725bae9aaf2cfa675b75f6aef30c (patch)
tree183a5e6a274ef452c01c05fc27d35dcc11e96f95
parent445d2550c74b1dea3f621e160d364484448da0bc (diff)
downloadgettext-tiny-567885c51345725bae9aaf2cfa675b75f6aef30c.tar.gz
poparser: optimize by saving strlen() results
-rw-r--r--src/poparser.c16
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;
}