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

Re: [PATCH v2 1/2] pkt-line: add packet_writel() and packet_read_line_gently()

From
Torsten Bögershausen <tboegi@web.de>
Date
Mar 30, 2017, 14:04 UTC
Message-ID
<a5e259bd-d994-6ddb-9dae-43531ee2e875@web.de>
In-Reply-To
<BL2PR03MB3233616BE57BB7D911B1AAEF4330@BL2PR03MB323.namprd03.prod.outlook.com>
[snip]
Show 55 quoted lines
>> Would packet_write_lines make more sense ?
>>
>
> Just goes to prove that there are two hard things in computer science: cache invalidation, naming things, and off-by-one errors. :)  The feedback on V1 was:
>
> "I am hesitant to take a function that does not take any "list"
> type argument and yet calls itself "write_list".  IOW, I'd expect something like these
>
> 	write_list(int fd, const char **lines);
> 	write_list(int fd, struct string_list *lines);
>
> given that name, and not "varargs, each of which is a line".  I am tempted to suggest
>
> 	packet_writel(int fd, const char *line, ...);"
>
>>> +{
>>> +	va_list args;
>>> +	int err;
>>> +	va_start(args, line);
>>> +	for (;;) {
>>> +		if (!line)
>>> +			break;
>>> +		if (strlen(line) > LARGE_PACKET_DATA_MAX)
>>> +			return -1;
>>> +		err = packet_write_fmt_gently(fd, "%s\n", line);
>>> +		if (err)
>>> +			return err;
>>> +		line = va_arg(args, const char*);
>>> +	}
>>> +	va_end(args);
>>> +	return packet_flush_gently(fd);
>>> +}
>>> +
>> I don't think that this va_start() is needed, even if it works.
>>
>> int packet_write_line(int fd, const char *lines[])
>> |
>> 	const char *line = *lines;
>> 	int err;
>> 	while (line) {
>> 		if (strlen(line) > LARGE_PACKET_DATA_MAX)
>> 			return -1;
>> 		err = packet_write_fmt_gently(fd, "%s\n", line);
>> 		if (err)
>> 			return err;
>> 		lines++;
>> 		line = *lines;
>> 	}
>> 	return packet_flush_gently(fd);
>> ]
>>
>
> This is a helper function to simply the common pattern of writing out a variable number of lines followed by a flush.  The usage of the function as currently implemented is:
>
> packet_writel(fd, "line one", "line two", "line n");

Does this work ? I would have expected packet_writel(fd, "line one", "line two", "line n"), NULL;

>
> which requires the use of variable number of arguments.  With your proposal that convenience is lost as you have to create an array of strings and pass that instead.  The usage just isn't as simple as the current model.
>
What is wrong with

int packet_write_fmt_gently(int fd, const char *fmt, ...) and we use it like this: if packet_write_fmt_gently(fd, "%s%s%s", "line one", "line two", "line n")

(Or do we need another one like) int packet_write_fmt_gently_flush(int fd, const char *fmt, ...)

Sorry if I am lost here
Previous: Ben PeartNext: Ben Peart
Message 13 of 15 in “Refactor the filter process code into a reusable module”
  1. 0/2 Refactor the filter process code into a reusable moduleBen Peart, Mar 24, 2017
  2. 2/2 sub-process: refactor the filter process code into a reusable moduleBen Peart, Mar 24, 2017
  3. Jonathan TanMar 27, 2017
  4. Ben PeartMar 27, 2017
  5. 1/4 t7800: remove whitespace before redirectBen Peart, Mar 24, 2017
  6. Ben PeartMar 24, 2017
  7. 2/4 t7800: cleanup cruft left behind by testsBen Peart, Mar 24, 2017
  8. 3/4 difftool: handle modified symlinks in dir-diff modeBen Peart, Mar 24, 2017
  9. 4/4 Git 2.12.1Ben Peart, Mar 24, 2017
  10. 1/2 pkt-line: add packet_writel() and packet_read_line_gently()Ben Peart, Mar 24, 2017
  11. Torsten BögershausenMar 25, 2017
  12. Ben PeartMar 27, 2017
  13. Torsten BögershausenMar 30, 2017
  14. Ben PeartMar 30, 2017
  15. Torsten BögershausenMar 30, 2017

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.