From a69e542989d0aa1576a4b6820454b9b0d2636796 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Mon, 22 Jan 2007 21:55:18 -0800 Subject: Refactor the pack header reading function out of receive-pack.c Signed-off-by: Junio C Hamano --- sha1_file.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'sha1_file.c') diff --git a/sha1_file.c b/sha1_file.c index 43ff40238..498665e50 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -2048,3 +2048,24 @@ int index_path(unsigned char *sha1, const char *path, struct stat *st, int write } return 0; } + +int read_pack_header(int fd, struct pack_header *header) +{ + char *c = (char*)header; + ssize_t remaining = sizeof(struct pack_header); + do { + ssize_t r = xread(fd, c, remaining); + if (r <= 0) + /* "eof before pack header was fully read" */ + return PH_ERROR_EOF; + remaining -= r; + c += r; + } while (remaining > 0); + if (header->hdr_signature != htonl(PACK_SIGNATURE)) + /* "protocol error (pack signature mismatch detected)" */ + return PH_ERROR_PACK_SIGNATURE; + if (!pack_version_ok(header->hdr_version)) + /* "protocol error (pack version unsupported)" */ + return PH_ERROR_PROTOCOL; + return 0; +} -- cgit v1.2.1