Re: [RFC/PATCH 1/2] bundle: allowing to read from an unseekable fd

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

 



On Thu, Oct 13, 2011 at 6:32 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote:
> The current code opens a given file with fopen(), reads it until the end
> of the header and runs ftell(), and reopens the same file with open() and
> seeks to skip the header. This structure makes it hard to retarget the
> code to read from input that is not seekable, such as a network socket.
>
> This patch by itself does not reach that goal yet, but I think it is a
> right step in that direction.
>
> Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx>
> ---
>
>  * It would be nice if we can avoid byte-by-byte reading from the file
>   descriptor by over-reading into the strbuf and pass the remainder to
>   the caller of read_bundle_header(), but I suspect that it would require
>   us to carry the "here is the remainder from the previous read" buffer
>   around throughout the transport layer. Parsing of the header wouldn't
>   be performance critical compared to the computation cost of actually
>   reading the rest of the bundle, hopefully, so...
>
>  bundle.c |   99 ++++++++++++++++++++++++++++++++++++++++----------------------
>  1 files changed, 64 insertions(+), 35 deletions(-)
>
> diff --git a/bundle.c b/bundle.c
> index f48fd7d..3aa715c 100644
> --- a/bundle.c
> +++ b/bundle.c
> @@ -23,49 +23,78 @@ static void add_to_ref_list(const unsigned char *sha1, const char *name,
>        list->nr++;
>  }
>
> -/* returns an fd */
> +/* Eventually this should go to strbuf.[ch] */
> +static int strbuf_readline_fd(struct strbuf *sb, int fd)

A size limiter would be useful here.  Since it's readline, maybe the
limit can even be hardcoded.

Without a limit, calling this with something stupid like "/dev/zero"
will consume all memory and never return.


Phil
--
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]