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

Re: [PATCH v2 05/10] archive-tar: allow to accumulate writes before writing 512-byte blocks

From
Nguyen Thai Ngoc Duy <pclouds@gmail.com>
Date
May 2, 2012, 14:43 UTC
Message-ID
<CACsJy8D5P9EESqwJLqa3Ragixr-TFJby4h4FgqOxm1jC8L9aHg@mail.gmail.com>
In-Reply-To
<4FA14497.5090203@lsrfire.ath.cx>

On Wed, May 2, 2012 at 9:28 PM, René Scharfe <rene.scharfe@lsrfire.ath.cx> wrote:

Show 19 quoted lines
> Am 02.05.2012 15:25, schrieb Nguyễn Thái Ngọc Duy:
>> This allows to split single write_blocked(buf, 123) call into multiple
>> calls
>>
>> write_blocked(buf, 100, 1);
>> write_blocked(buf,  23, 1);
>> write_blocked(buf,   0, 0);
>>
>> No call sites do this yet though.
>>
>> Signed-off-by: Nguyễn Thái Ngọc Duy<pclouds@gmail.com>
>> ---
>>   archive-tar.c |   16 +++++++++-------
>>   1 files changed, 9 insertions(+), 7 deletions(-)
>
> Hmm, I'm not a fan of adding binary parameters to distinguish between two
> modes of a function.  It's usually better to split it up at that point.
> E.g. the patch below does that and still provides the old interface, i.e.
> the existing callers don't need to be changed.
Good point. Then this can be merged to the next patch too.
Show 45 quoted lines
>  archive-tar.c |   15 +++++++++++++--
>  1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/archive-tar.c b/archive-tar.c
> index 20af005..a2babe1 100644
> --- a/archive-tar.c
> +++ b/archive-tar.c
> @@ -30,10 +30,9 @@ static void write_if_needed(void)
>  * queues up writes, so that all our write(2) calls write exactly one
>  * full block; pads writes to RECORDSIZE
>  */
> -static void write_blocked(const void *data, unsigned long size)
> +static void do_write_blocked(const void *data, unsigned long size)
>  {
>        const char *buf = data;
> -       unsigned long tail;
>
>        if (offset) {
>                unsigned long chunk = BLOCKSIZE - offset;
> @@ -54,6 +53,12 @@ static void write_blocked(const void *data, unsigned long size)
>                memcpy(block + offset, buf, size);
>                offset += size;
>        }
> +}
> +
> +static void finish_record(void)
> +{
> +       unsigned long tail;
> +
>        tail = offset % RECORDSIZE;
>        if (tail)  {
>                memset(block + offset, 0, RECORDSIZE - tail);
> @@ -62,6 +67,12 @@ static void write_blocked(const void *data, unsigned long size)
>        write_if_needed();
>  }
>
> +static void write_blocked(const void *data, unsigned long size)
> +{
> +       do_write_blocked(data, size);
> +       finish_record();
> +}
> +
>  /*
>  * The end of tar archives is marked by 2*512 nul bytes and after that
>  * follows the rest of the block (if any).
-- 
Duy
Previous: René ScharfeNext: Nguyễn Thái Ngọc Duy
Message 8 of 14 in “Large file support for git-archive”
  1. 00/10 Large file support for git-archiveNguyễn Thái Ngọc Duy, May 2, 2012
  2. 01/10 streaming: void pointer instead of char pointerNguyễn Thái Ngọc Duy, May 2, 2012
  3. 02/10 archive-tar: turn write_tar_entry into blob-writing onlyNguyễn Thái Ngọc Duy, May 2, 2012
  4. 03/10 archive-tar: unindent write_tar_entry by one levelNguyễn Thái Ngọc Duy, May 2, 2012
  5. 04/10 archive: delegate blob reading to backendNguyễn Thái Ngọc Duy, May 2, 2012
  6. 05/10 archive-tar: allow to accumulate writes before writing 512-byte blocksNguyễn Thái Ngọc Duy, May 2, 2012
  7. René ScharfeMay 2, 2012
  8. Nguyen Thai Ngoc DuyMay 2, 2012
  9. 06/10 archive-tar: stream large blobs to tar fileNguyễn Thái Ngọc Duy, May 2, 2012
  10. René ScharfeMay 2, 2012
  11. 07/10 archive-zip: remove uncompressed_sizeNguyễn Thái Ngọc Duy, May 2, 2012
  12. 08/10 archive-zip: factor out helpers for writing sizes and CRCNguyễn Thái Ngọc Duy, May 2, 2012
  13. 09/10 archive-zip: streaming for stored filesNguyễn Thái Ngọc Duy, May 2, 2012
  14. 10/10 archive-zip: streaming for deflated filesNguyễn Thái Ngọc Duy, May 2, 2012

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.