summaryrefslogtreecommitdiff
path: root/src/msgfmt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/msgfmt.c')
-rw-r--r--src/msgfmt.c70
1 files changed, 31 insertions, 39 deletions
diff --git a/src/msgfmt.c b/src/msgfmt.c
index c32d075..58fd855 100644
--- a/src/msgfmt.c
+++ b/src/msgfmt.c
@@ -77,36 +77,48 @@ int process_line_callback(po_message_t msg, void* user) {
struct callbackdata *d = (struct callbackdata *) user;
struct strtbl *str, *trans;
size_t m;
- int cnt[st_max] = {0};
- int i, k;
+ int i, j, k;
if (msg->flags & PO_FUZZY) return 0;
if (msg->strlen[0] == 0) return 0;
- switch(d->stage) {
- case ps_size:
+ // PO_SYSDEP_PRIUMAX == 0, it has no effects to our codes
+ switch (msg->sysdep_flag) {
+ case PO_SYSDEP_PRIU32:
+ case PO_SYSDEP_PRIU64:
+ k = 2;
+ break;
+ case PO_SYSDEP_PRIU32|PO_SYSDEP_PRIU64:
+ k = 3;
+ break;
+ default:
k = 1;
- for (i=0; i < st_max; i++)
- if (msg->sysdep[i])
- k *= msg->sysdep[i];
+ break;
+ }
- d->len[0] += (msg->id_len + 1)*k;
+ switch(d->stage) {
+ case ps_size:
+ m = 0;
+ m += msg->id_len + 1;
if (msg->plural_len)
- d->len[0] += (msg->plural_len + 1)*k;
+ m = msg->plural_len + 1;
if (msg->ctxt_len)
- d->len[0] += (msg->ctxt_len + 1)*k;
+ m += msg->ctxt_len + 1;
- for (i=0; msg->strlen[i]; i++)
- d->len[1] += (msg->strlen[i] + 1)*k;
+ d->len[0] += m * k;
+
+ m = 0;
+ for (i=0; msg->strlen[i]; i++) {
+ m += msg->strlen[i] + 1;
+ }
+ d->len[1] += m * k;
d->cnt += k;
break;
case ps_parse:
- for (k=1; k; d->cnt++) {
- k = 0;
-
+ for (j=0; j < k; j++) {
str = &d->list[d->cnt].str;
trans = &d->list[d->cnt].trans;
@@ -114,18 +126,18 @@ int process_line_callback(po_message_t msg, void* user) {
str->len = 0;
if (msg->ctxt_len) {
- m = poparser_sysdep(msg->ctxt, &d->buf[0][d->len[0]], cnt);
+ m = poparser_sysdep(msg->ctxt, &d->buf[0][d->len[0]], j);
str->len += m;
d->buf[0][d->len[0]+m-1] = 0x4;
d->len[0] += m;
}
- m = poparser_sysdep(msg->id, &d->buf[0][d->len[0]], cnt);
+ m = poparser_sysdep(msg->id, &d->buf[0][d->len[0]], j);
str->len += m;
d->len[0] += m;
if (msg->plural_len) {
- m = poparser_sysdep(msg->plural, &d->buf[0][d->len[0]], cnt);
+ m = poparser_sysdep(msg->plural, &d->buf[0][d->len[0]], j);
str->len += m;
d->len[0] += m;
}
@@ -133,30 +145,10 @@ int process_line_callback(po_message_t msg, void* user) {
trans->off = d->len[1];
trans->len = 0;
for (i=0; msg->strlen[i]; i++) {
- m = poparser_sysdep(msg->str[i], &d->buf[1][d->len[1]], cnt);
+ m = poparser_sysdep(msg->str[i], &d->buf[1][d->len[1]], j);
trans->len += m;
d->len[1] += m;
}
-
- for (i=0; i < st_max; i++) {
- if (cnt[i] < msg->sysdep[i]) {
- cnt[i]++;
-
- // we have a carry
- if (cnt[i] == msg->sysdep[i]) {
- cnt[i] = 0;
- continue;
- }
-
- if (cnt[0] == 1 && cnt[1] == 0) {
- i--;
- continue;
- }
-
- k = 1;
- break;
- }
- }
}
break;