From: Daiki Ueno Date: Fri, 2 May 2014 19:53:05 +0000 (+0900) Subject: xgettext: Allow mixed_string_buffer_done to return non-UTF-8 string X-Git-Tag: v0.19~60 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=318c7ed21dab81a04534d273ebb737739208a51d;p=thirdparty%2Fgettext.git xgettext: Allow mixed_string_buffer_done to return non-UTF-8 string --- diff --git a/gettext-tools/src/xgettext.c b/gettext-tools/src/xgettext.c index ca957fd47..c30139e71 100644 --- a/gettext-tools/src/xgettext.c +++ b/gettext-tools/src/xgettext.c @@ -3230,22 +3230,40 @@ mixed_string_buffer_append_unicode (struct mixed_string_buffer *bp, int c) char * mixed_string_buffer_done (struct mixed_string_buffer *bp) { - char *utf8_buffer; + if (bp->utf8_buffer || bp->utf16_surr != 0) + { + char *utf8_buffer; - /* Flush all into bp->utf8_buffer. */ - mixed_string_buffer_flush_utf16_surr (bp); - mixed_string_buffer_flush_curr_buffer (bp, bp->line_number); - /* NUL-terminate it. */ - mixed_string_buffer_grow_utf8_buffer (bp, 1); - bp->utf8_buffer[bp->utf8_buflen] = '\0'; + /* Flush all into bp->utf8_buffer. */ + mixed_string_buffer_flush_utf16_surr (bp); + mixed_string_buffer_flush_curr_buffer (bp, bp->line_number); + /* NUL-terminate it. */ + mixed_string_buffer_grow_utf8_buffer (bp, 1); + bp->utf8_buffer[bp->utf8_buflen] = '\0'; + + /* Free curr_buffer and bp itself. */ + utf8_buffer = bp->utf8_buffer; + free (bp->curr_buffer); + free (bp); + + /* Return it. */ + return utf8_buffer; + } + else + { + char *curr_buffer; - /* Free curr_buffer and bp itself. */ - utf8_buffer = bp->utf8_buffer; - free (bp->curr_buffer); - free (bp); + /* NUL-terminate it. */ + mixed_string_buffer_append_to_curr_buffer (bp, '\0'); - /* Return it. */ - return utf8_buffer; + /* Free utf8_buffer and bp itself. */ + curr_buffer = bp->curr_buffer; + free (bp->utf8_buffer); + free (bp); + + /* Return it. */ + return curr_buffer; + } } diff --git a/gettext-tools/src/xgettext.h b/gettext-tools/src/xgettext.h index 81e82667f..706309a1a 100644 --- a/gettext-tools/src/xgettext.h +++ b/gettext-tools/src/xgettext.h @@ -370,8 +370,9 @@ extern void mixed_string_buffer_append_char (struct mixed_string_buffer *bp, extern void mixed_string_buffer_append_unicode (struct mixed_string_buffer *bp, int c); -/* Frees mixed_string_buffer and returns the accumulated string as a - UTF-8 string. */ +/* Frees mixed_string_buffer and returns the accumulated string. If + any Unicode character has been added to BP, the result is in UTF-8. + Otherwise, it doesn't do any conversion. */ extern char * mixed_string_buffer_done (struct mixed_string_buffer *bp);