git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v4] Add utf8_fprintf helper which returns correct columns

From
Torsten Bögershausen <tboegi@web.de>
Date
Feb 8, 2013, 16:19 UTC
Message-ID
<51152575.8090507@web.de>
In-Reply-To
<CANYiYbGZEJXDjzBJa_qbQCgw9tcTMfOChNr6ANwaLvo=fB=bcQ@mail.gmail.com>
On 08.02.13 08:20, Jiang Xin wrote:
Show 46 quoted lines
> 2013/2/8 Torsten Bögershausen <tboegi@web.de>:
>> On 08.02.13 03:10, Jiang Xin wrote:
>>> +     /* If no error occurs, returns columns really required with utf8_strwidth. */
>>> +     if (0 <= columns)
>>> +             columns = utf8_strwidth(buf.buf);
>>> +     strbuf_release(&buf);
>>> +     return columns;
>>> +}
>>> +
>>
>> I don't think we handle the return code from fputs() correctly.
>>
>> Please dee below for specifications on fprintf(),
>> something like the following could do:
>>
>> int utf8_fprintf(FILE *stream, const char *format, ...)
>> {
>>         struct strbuf buf = STRBUF_INIT;
>>         va_list arg;
>>         int columns = 0;
>>
>>         va_start (arg, format);
>>         strbuf_vaddf(&buf, format, arg);
>>         va_end (arg);
>>
>>         if (EOF != fputs(buf.buf, stream))
>>                 columns = utf8_strwidth(buf.buf);
>>         strbuf_release(&buf);
>>         return columns;
>> }
> 
> As fputs() returns a non-negative number (as opposed to 0) on
> successful completion,
> Test fputs() return value as "fputs() >=0" is correct, while "fputs()
> == 0", "fputs() != 0"
> are wrong. I think it's OK, must I send a new re-roll for this?
> 
> EOF is defined as (-1) in stdio.h:
> 
>     #define EOF     (-1)
> 
>> And as a side note: would fprintf_strwidth() be a better name?
> 
> This is a nice candidate.
> 
> 

Doing a slurp(coffe) followed by a re-read, I think we are save with the existng code.

However, I feel that the commit message can be improved, as it fixes problems not only for CJK but e.g. european languages (and all systems using utf-8)

>Since command usages can be translated, they may not align well especially
>when they are translated to CJK. A wrapper utf8_fprintf can help to return
>the correct columns required.
 
Since command usages can be translated, they may include utf-8 encoded strings,
and strlen() is different from strwidth().
A wrapper utf8_fprintf() helps to return the correct columns required.
Thanks for working on this.
Previous: Jiang XinNext: Jiang Xin
Message 18 of 20 in “Get correct column with for options in command usage”
  1. Get correct column with for options in command usageJiang Xin, Feb 5, 2013
  2. Duy NguyenFeb 5, 2013
  3. Duy NguyenFeb 5, 2013
  4. Junio C HamanoFeb 5, 2013
  5. 1/2 Get correct column with for options in command usageJiang Xin, Feb 5, 2013
  6. 2/2 i18n: mark OPTION_NUMBER (-NUM) for translationJiang Xin, Feb 5, 2013
  7. Junio C HamanoFeb 5, 2013
  8. Jiang XinFeb 6, 2013
  9. Junio C HamanoFeb 6, 2013
  10. Jiang XinFeb 6, 2013
  11. Junio C HamanoFeb 6, 2013
  12. Duy NguyenFeb 6, 2013
  13. Junio C HamanoFeb 6, 2013
  14. Add utf8_fprintf helper which returns correct columnsJiang Xin, Feb 8, 2013
  15. Torsten BögershausenFeb 8, 2013
  16. Torsten BögershausenFeb 8, 2013
  17. Jiang XinFeb 8, 2013
  18. Torsten BögershausenFeb 8, 2013
  19. Add utf8_fprintf helper that returns correct columnsJiang Xin, Feb 9, 2013
  20. Add utf8_fprintf helper which returns correct columnsJiang Xin, Feb 6, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.