From: Bruno Haible Date: Tue, 27 May 2008 00:09:10 +0000 (+0000) Subject: Fix recognition of header fields. X-Git-Tag: v0.18~408 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c049f8597eac8b19c5f316c925154ea1fd623fe6;p=thirdparty%2Fgettext.git Fix recognition of header fields. --- diff --git a/gettext-tools/libgettextpo/ChangeLog b/gettext-tools/libgettextpo/ChangeLog index c76bb164f..2470de9f4 100644 --- a/gettext-tools/libgettextpo/ChangeLog +++ b/gettext-tools/libgettextpo/ChangeLog @@ -1,3 +1,9 @@ +2008-05-26 Bruno Haible + + * gettext-po.c (po_header_field, po_header_set_field): Recognize a + field also if there is no space after the ':'. + Reported by Nacho . + 2007-11-07 Bruno Haible * gettext-0.17 released. diff --git a/gettext-tools/libgettextpo/gettext-po.c b/gettext-tools/libgettextpo/gettext-po.c index cb5091b35..d4610c2e3 100644 --- a/gettext-tools/libgettextpo/gettext-po.c +++ b/gettext-tools/libgettextpo/gettext-po.c @@ -1,5 +1,5 @@ /* Public API for GNU gettext PO files. - Copyright (C) 2003-2007 Free Software Foundation, Inc. + Copyright (C) 2003-2008 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software: you can redistribute it and/or modify @@ -341,14 +341,15 @@ po_header_field (const char *header, const char *field) for (line = header;;) { - if (strncmp (line, field, field_len) == 0 - && line[field_len] == ':' && line[field_len + 1] == ' ') + if (strncmp (line, field, field_len) == 0 && line[field_len] == ':') { const char *value_start; const char *value_end; char *value; - value_start = line + field_len + 2; + value_start = line + field_len + 1; + if (*value_start == ' ') + value_start++; value_end = strchr (value_start, '\n'); if (value_end == NULL) value_end = value_start + strlen (value_start); @@ -387,8 +388,7 @@ po_header_set_field (const char *header, const char *field, const char *value) for (line = header;;) { - if (strncmp (line, field, field_len) == 0 - && line[field_len] == ':' && line[field_len + 1] == ' ') + if (strncmp (line, field, field_len) == 0 && line[field_len] == ':') { const char *oldvalue_start; const char *oldvalue_end; @@ -398,7 +398,9 @@ po_header_set_field (const char *header, const char *field, const char *value) size_t result_len; char *result; - oldvalue_start = line + field_len + 2; + oldvalue_start = line + field_len + 1; + if (*oldvalue_start == ' ') + oldvalue_start++; oldvalue_end = strchr (oldvalue_start, '\n'); if (oldvalue_end == NULL) oldvalue_end = oldvalue_start + strlen (oldvalue_start); diff --git a/gettext-tools/src/ChangeLog b/gettext-tools/src/ChangeLog index 5be1915b3..0a26be40d 100644 --- a/gettext-tools/src/ChangeLog +++ b/gettext-tools/src/ChangeLog @@ -1,6 +1,12 @@ +2008-05-26 Bruno Haible + + * msginit.c (get_field, put_field): Recognize a field also if there is + no space after the ':'. + Reported by Nacho . + 2008-05-16 Bruno Haible - * gettext-tools/src/msgl-iconv.c (iconvable_prev_msgid): Fix typo. + * msgl-iconv.c (iconvable_prev_msgid): Fix typo. Reported by Karl Eichwalder via Philipp Thomas at . diff --git a/gettext-tools/src/msginit.c b/gettext-tools/src/msginit.c index 2589e78a6..6e211badc 100644 --- a/gettext-tools/src/msginit.c +++ b/gettext-tools/src/msginit.c @@ -1323,14 +1323,15 @@ get_field (const char *header, const char *field) for (line = header;;) { - if (strncmp (line, field, len) == 0 - && line[len] == ':' && line[len + 1] == ' ') + if (strncmp (line, field, len) == 0 && line[len] == ':') { const char *value_start; const char *value_end; char *value; - value_start = line + len + 2; + value_start = line + len + 1; + if (*value_start == ' ') + value_start++; value_end = strchr (value_start, '\n'); if (value_end == NULL) value_end = value_start + strlen (value_start); @@ -1363,13 +1364,14 @@ put_field (const char *old_header, const char *field, const char *value) for (line = old_header;;) { - if (strncmp (line, field, len) == 0 - && line[len] == ':' && line[len + 1] == ' ') + if (strncmp (line, field, len) == 0 && line[len] == ':') { const char *value_start; const char *value_end; - value_start = line + len + 2; + value_start = line + len + 1; + if (*value_start == ' ') + value_start++; value_end = strchr (value_start, '\n'); if (value_end == NULL) value_end = value_start + strlen (value_start);