diff options
author | xhe <xw897002528@gmail.com> | 2017-05-30 14:18:03 +0800 |
---|---|---|
committer | xhe <xw897002528@gmail.com> | 2017-05-30 14:18:03 +0800 |
commit | b775f1e66c5b888a1bc0e94e82046f5cc7457b8b (patch) | |
tree | db2737ec239651a2f4cb337228c640757fb40b2f | |
parent | 6164461b7ee850da5b577b96b120e2a4b1b05a09 (diff) | |
download | gettext-tiny-b775f1e66c5b888a1bc0e94e82046f5cc7457b8b.tar.gz |
fix: the invalid was not deleted
since i reconstructed the code last time(switch to writemsg()/writelstr()), it wont delete the invalid msgid/str anymore, the original code doesnt make sense. here's the new code, which could work well with writemsg()/writestr().
-rw-r--r-- | src/msgfmt.c | 40 |
1 files changed, 19 insertions, 21 deletions
diff --git a/src/msgfmt.c b/src/msgfmt.c index df5ed39..4673d67 100644 --- a/src/msgfmt.c +++ b/src/msgfmt.c @@ -248,22 +248,18 @@ static inline void writemsg(struct callbackdata *d) { static inline void writestr(struct callbackdata *d, struct po_info *info) { // msgid xx; msgstr ""; is widely happened, it's invalid - if(d->curr[pe_msgstr] - // we do not check the 1st msgid/str - && ((d->curr[pe_msgid] - d->curr[pe_msgstr]) == 0) - // in case curr[id] - curr[str] = 2(when sysdeps), .len == 0 is always true - && d->translist[d->curr[pe_msgstr]-1].len == 0) { - // str empty, invalid, set back everything, so they will be overrided - - d->len[pe_msgid] -= d->strlist[d->curr[pe_msgstr]-1].str.len + 1; - d->strlist[d->curr[pe_msgstr]-1].str.len=0; + if(d->curr[pe_msgstr] + // we do not check the 1st msgid/str + && ((d->curr[pe_msgid] - d->curr[pe_msgstr]) == 1) + && !d->msc) { + d->curr[pe_msgid]--; + d->stroff[pe_msgid] -= d->strlist[d->curr[pe_msgid]].str.len; + d->strlist[d->curr[pe_msgid]].str.off = 0; + d->strlist[d->curr[pe_msgid]].str.len = 0; d->len[pe_msgstr]--; - d->stroff[pe_msgid] = d->strlist[d->curr[pe_msgstr]-1].str.off; - d->stroff[pe_msgstr] = d->translist[d->curr[pe_msgstr]-1].off; + d->len[pe_msgid]--; d->num[pe_msgid]--; - d->curr[pe_msgid]--; d->num[pe_msgstr]--; - d->curr[pe_msgstr]--; d->mslen1=d->mslen2=d->msc=0; return; } @@ -350,14 +346,16 @@ int process_line_callback(struct po_info* info, void* user) { } else { writemsg(d); // just copy, it's written down when writestr() - if(i==0) { - memcpy(&d->msgstrbuf1[d->mslen1], sysdeps[i], l+1); - d->mslen1 += l+1; - d->msc++; - } else { - // sysdeps exist - memcpy(&d->msgstrbuf2[d->mslen2], sysdeps[i], l+1); - d->mslen2 += l+1; + if(l) { + if(i==0) { + memcpy(&d->msgstrbuf1[d->mslen1], sysdeps[i], l+1); + d->mslen1 += l+1; + d->msc++; + } else { + // sysdeps exist + memcpy(&d->msgstrbuf2[d->mslen2], sysdeps[i], l+1); + d->mslen2 += l+1; + } } } } |