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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, May 2, 2012 at 9:28 PM, René Scharfe
<rene.scharfe@xxxxxxxxxxxxxx> wrote:
> 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@xxxxxxxxx>
>> ---
>>   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.

>  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
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]