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

Re: [PATCH v5 04/15] pkt-line: add packet_write_gently()

From
Lars Schneider <larsxschneider@gmail.com>
Date
Aug 10, 2016, 13:36 UTC
Message-ID
<434CB5D7-3FC0-4398-9028-135701121E55@gmail.com>
In-Reply-To
<20160810132814.gqnipsdwyzjmuqjy@sigill.intra.peff.net>
Show 20 quoted lines
> On 10 Aug 2016, at 15:28, Jeff King <peff@peff.net> wrote:
> 
> On Wed, Aug 10, 2016 at 03:04:00PM +0200, larsxschneider@gmail.com wrote:
> 
>> From: Lars Schneider <larsxschneider@gmail.com>
>> 
>> packet_write() has two shortcomings. First, it uses format_packet() which
>> lets the caller only send string data via "%s". That means it cannot be
>> used for arbitrary data that may contain NULs. Second, it will always
>> die on error.
>> 
>> Add packet_write_gently() which writes arbitrary data and returns `0` for
>> success and `-1` for an error.
> 
> So now we have packet_write() and packet_write_gently(), but they differ
> in more than just whether they are gentle. That seems like a weird
> interface.
> 
> Should we either be picking a new name (e.g., packet_write_mem() or
> something), or migrating packet_write() to packet_write_fmt()?
Done in "[PATCH v5 08/15] pkt-line: rename packet_write() to packet_write_fmt()"
Show 12 quoted lines
>> diff --git a/pkt-line.c b/pkt-line.c
>> index e6b8410..4f25748 100644
>> --- a/pkt-line.c
>> +++ b/pkt-line.c
>> @@ -3,6 +3,7 @@
>> #include "run-command.h"
>> 
>> char packet_buffer[LARGE_PACKET_MAX];
>> +char packet_write_buffer[LARGE_PACKET_MAX];
> 
> Should this be static? I.e., are random other bits of the code allowed
> to write into it (I guess not because it's not declared in pkt-line.h).
static is better!
Show 25 quoted lines
>> +int packet_write_gently(const int fd_out, const char *buf, size_t size)
>> +{
>> +	if (size > PKTLINE_DATA_MAXLEN)
>> +		return -1;
>> +	packet_trace(buf, size, 1);
>> +	memmove(packet_write_buffer + 4, buf, size);
> 
> It looks like this iteration drops the idea of callers using a
> LARGE_PACKET_MAX buffer and only filling it at "buf+4" with
> PKTLINE_DATA_MAXLEN bytes (which is fine).
> 
> I wonder if we still need PKTLINE_DATA_MAXLEN, or of it is just
> obscuring things. The magic number "4" still appears separately here,
> and it actually makes it harder to see that things are correct.  I.e.,
> doing:
> 
>  if (size > sizeof(packet_write_buffer) - 4)
> 	return -1;
>  memmove(packet_write_buffer + 4, buf, size);
> 
> is more obviously correct, because you do not have to wonder about the
> relationship between the size of your buffer and the macro.
> 
> It might still be worth having PKTLINE_DATA_MAXLEN public, though, if
> callers use it to size their input to packet_write_gently().

I agree. In a later patch I am using PKTLINE_DATA_MAXLEN inside pkt-line.c, too. I will change it to your suggestion.

For now I would remove PKTLINE_DATA_MAXLEN because it should be an implementation detail of pkt-line.c (plus it is not used by anyone).

Thanks, Lars

Previous: Jeff KingNext: Jeff King
Message 32 of 50 in “Git filter protocol”
  1. 00/15 Git filter protocollarsxschneider@gmail.com, Aug 10, 2016
  2. 14/15 convert: add filter.<driver>.process optionlarsxschneider@gmail.com, Aug 10, 2016
  3. Stefan BellerAug 12, 2016
  4. Jeff KingAug 12, 2016
  5. Stefan BellerAug 12, 2016
  6. Lars SchneiderAug 12, 2016
  7. Junio C HamanoAug 12, 2016
  8. Lars SchneiderAug 12, 2016
  9. Junio C HamanoAug 12, 2016
  10. Lars SchneiderAug 12, 2016
  11. Stefan BellerAug 12, 2016
  12. Lars SchneiderAug 12, 2016
  13. 08/15 pkt-line: rename packet_write() to packet_write_fmt()larsxschneider@gmail.com, Aug 10, 2016
  14. 05/15 pkt-line: add packet_write_gently_fmt()larsxschneider@gmail.com, Aug 10, 2016
  15. Jeff KingAug 10, 2016
  16. Junio C HamanoAug 10, 2016
  17. Lars SchneiderAug 10, 2016
  18. Junio C HamanoAug 10, 2016
  19. Lars SchneiderAug 10, 2016
  20. Jeff KingAug 10, 2016
  21. 15/15 read-cache: make sure file handles are not inherited by child processeslarsxschneider@gmail.com, Aug 10, 2016
  22. Johannes SchindelinAug 18, 2016
  23. 01/15 pkt-line: extract set_packet_header()larsxschneider@gmail.com, Aug 10, 2016
  24. 09/15 pack-protocol: fix maximum pkt-line sizelarsxschneider@gmail.com, Aug 10, 2016
  25. 06/15 pkt-line: add packet_flush_gently()larsxschneider@gmail.com, Aug 10, 2016
  26. 10/15 convert: quote filter names in error messageslarsxschneider@gmail.com, Aug 10, 2016
  27. 07/15 pkt-line: add functions to read/write flush terminated packet streamslarsxschneider@gmail.com, Aug 10, 2016
  28. 12/15 convert: generate large test files only oncelarsxschneider@gmail.com, Aug 10, 2016
  29. 11/15 convert: modernize testslarsxschneider@gmail.com, Aug 10, 2016
  30. 04/15 pkt-line: add packet_write_gently()larsxschneider@gmail.com, Aug 10, 2016
  31. Jeff KingAug 10, 2016
  32. Lars SchneiderAug 10, 2016
  33. Jeff KingAug 10, 2016
  34. Junio C HamanoAug 10, 2016
  35. Lars SchneiderAug 10, 2016
  36. Junio C HamanoAug 10, 2016
  37. Lars SchneiderAug 10, 2016
  38. 02/15 pkt-line: call packet_trace() only if a packet is actually sendlarsxschneider@gmail.com, Aug 10, 2016
  39. Jeff KingAug 10, 2016
  40. Lars SchneiderAug 10, 2016
  41. Jeff KingAug 10, 2016
  42. Lars SchneiderAug 10, 2016
  43. Jeff KingAug 10, 2016
  44. 13/15 convert: make apply_filter() adhere to standard Git error handlinglarsxschneider@gmail.com, Aug 10, 2016
  45. 03/15 pkt-line: add `gentle` parameter to format_packet()larsxschneider@gmail.com, Aug 10, 2016
  46. Jeff KingAug 10, 2016
  47. Lars SchneiderAug 10, 2016
  48. Jeff KingAug 10, 2016
  49. Lars SchneiderAug 10, 2016
  50. Jeff KingAug 10, 2016

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.