commit f024663dea0dea05a0d4c17d2314f38f73e85bc6 from: Stefan Sperling date: Sun Sep 05 13:50:39 2021 UTC move pkt code used by got-fetch-pack and got-send-pack to a common file The Git protocol uses a simple packet framing format. The got-fetch-pack and got-send-pack programs contained identical copies of functions to support this format. Move related functions to new file lib/pkt.c and link both programs against this common implementation. No functional change. commit - f3bc9f1df29f91c63ed334a1a9c8929209f93fdc commit + f024663dea0dea05a0d4c17d2314f38f73e85bc6 blob - /dev/null blob + 63ad53665bec47053190034f7eb81cac0421e217 (mode 644) --- /dev/null +++ lib/got_lib_pkt.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2019 Ori Bernstein + * Copyright (c) 2021 Stefan Sperling + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +const struct got_error *got_pkt_readn(ssize_t *off, int fd, void *buf, + size_t n); +const struct got_error *got_pkt_flushpkt(int fd, int chattygot); +const struct got_error *got_pkt_readhdr(int *datalen, int fd, int chattygot); +const struct got_error *got_pkt_readpkt(int *outlen, int fd, char *buf, + int buflen, int chattygot); +const struct got_error *got_pkt_writepkt(int fd, char *buf, int nbuf, + int chattygot); blob - /dev/null blob + b9ef91ba3083180edcfef203a56a0a06f4273b2b (mode 644) --- /dev/null +++ lib/pkt.c @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2019 Ori Bernstein + * Copyright (c) 2021 Stefan Sperling + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include +#include +#include +#include +#include + +#include "got_error.h" + +const struct got_error * +got_pkt_readn(ssize_t *off, int fd, void *buf, size_t n) +{ + ssize_t r; + + *off = 0; + while (*off != n) { + r = read(fd, buf + *off, n - *off); + if (r == -1) + return got_error_from_errno("read"); + if (r == 0) + return NULL; + *off += r; + } + return NULL; +} + +const struct got_error * +got_pkt_flushpkt(int fd, int chattygot) +{ + ssize_t w; + + if (chattygot > 1) + fprintf(stderr, "%s: writepkt: 0000\n", getprogname()); + + w = write(fd, "0000", 4); + if (w == -1) + return got_error_from_errno("write"); + if (w != 4) + return got_error(GOT_ERR_IO); + return NULL; +} + +/* + * Packet header contains a 4-byte hexstring which specifies the length + * of data which follows. + */ +const struct got_error * +got_pkt_readhdr(int *datalen, int fd, int chattygot) +{ + static const struct got_error *err = NULL; + char lenstr[5]; + long len; + char *e; + int n, i; + ssize_t r; + + *datalen = 0; + + err = got_pkt_readn(&r, fd, lenstr, 4); + if (err) + return err; + if (r == 0) { + /* implicit "0000" */ + if (chattygot > 1) + fprintf(stderr, "%s: readpkt: 0000\n", getprogname()); + return NULL; + } + if (r != 4) + return got_error_msg(GOT_ERR_BAD_PACKET, + "wrong packet header length"); + + lenstr[4] = '\0'; + for (i = 0; i < 4; i++) { + if (!isprint((unsigned char)lenstr[i])) + return got_error_msg(GOT_ERR_BAD_PACKET, + "unprintable character in packet length field"); + } + for (i = 0; i < 4; i++) { + if (!isxdigit((unsigned char)lenstr[i])) { + if (chattygot) + fprintf(stderr, "%s: bad length: '%s'\n", + getprogname(), lenstr); + return got_error_msg(GOT_ERR_BAD_PACKET, + "packet length not specified in hex"); + } + } + errno = 0; + len = strtol(lenstr, &e, 16); + if (lenstr[0] == '\0' || *e != '\0') + return got_error(GOT_ERR_BAD_PACKET); + if (errno == ERANGE && (len == LONG_MAX || len == LONG_MIN)) + return got_error_msg(GOT_ERR_BAD_PACKET, "bad packet length"); + if (len > INT_MAX || len < INT_MIN) + return got_error_msg(GOT_ERR_BAD_PACKET, "bad packet length"); + n = len; + if (n == 0) + return NULL; + if (n <= 4) + return got_error_msg(GOT_ERR_BAD_PACKET, "packet too short"); + n -= 4; + + *datalen = n; + return NULL; +} + +const struct got_error * +got_pkt_readpkt(int *outlen, int fd, char *buf, int buflen, int chattygot) +{ + const struct got_error *err = NULL; + int datalen, i; + ssize_t n; + + err = got_pkt_readhdr(&datalen, fd, chattygot); + if (err) + return err; + + if (datalen > buflen) + return got_error(GOT_ERR_NO_SPACE); + + err = got_pkt_readn(&n, fd, buf, datalen); + if (err) + return err; + if (n != datalen) + return got_error_msg(GOT_ERR_BAD_PACKET, "short packet"); + + if (chattygot > 1) { + fprintf(stderr, "%s: readpkt: %zd:\t", getprogname(), n); + for (i = 0; i < n; i++) { + if (isprint(buf[i])) + fputc(buf[i], stderr); + else + fprintf(stderr, "[0x%.2x]", buf[i]); + } + fputc('\n', stderr); + } + + *outlen = n; + return NULL; +} + +const struct got_error * +got_pkt_writepkt(int fd, char *buf, int nbuf, int chattygot) +{ + char len[5]; + int i; + ssize_t w; + + if (snprintf(len, sizeof(len), "%04x", nbuf + 4) >= sizeof(len)) + return got_error(GOT_ERR_NO_SPACE); + w = write(fd, len, 4); + if (w == -1) + return got_error_from_errno("write"); + if (w != 4) + return got_error(GOT_ERR_IO); + w = write(fd, buf, nbuf); + if (w == -1) + return got_error_from_errno("write"); + if (w != nbuf) + return got_error(GOT_ERR_IO); + if (chattygot > 1) { + fprintf(stderr, "%s: writepkt: %s:\t", getprogname(), len); + for (i = 0; i < nbuf; i++) { + if (isprint(buf[i])) + fputc(buf[i], stderr); + else + fprintf(stderr, "[0x%.2x]", buf[i]); + } + fputc('\n', stderr); + } + return NULL; +} blob - 7823de67fa57fb34bafd9fa68b43a821a157c101 blob + 322eb5182bf517fe519edba355c7eb691286ed23 --- libexec/got-fetch-pack/Makefile +++ libexec/got-fetch-pack/Makefile @@ -4,7 +4,7 @@ PROG= got-fetch-pack SRCS= got-fetch-pack.c error.c inflate.c object_parse.c \ - path.c privsep.c sha1.c + path.c privsep.c sha1.c pkt.c CPPFLAGS = -I${.CURDIR}/../../include -I${.CURDIR}/../../lib LDADD = -lutil -lz blob - 7666d8a45ed09a018f2f8aa871943aa38616db3c blob + 1b1a71e4dc4357b0153e9ebfa2b776af69bf006b --- libexec/got-fetch-pack/got-fetch-pack.c +++ libexec/got-fetch-pack/got-fetch-pack.c @@ -48,6 +48,7 @@ #include "got_lib_object_parse.h" #include "got_lib_privsep.h" #include "got_lib_pack.h" +#include "got_lib_pkt.h" #ifndef nitems #define nitems(_a) (sizeof((_a)) / sizeof((_a)[0])) @@ -56,169 +57,6 @@ struct got_object *indexed; static int chattygot; static struct got_object_id zhash = {.sha1={0}}; - -static const struct got_error * -readn(ssize_t *off, int fd, void *buf, size_t n) -{ - ssize_t r; - - *off = 0; - while (*off != n) { - r = read(fd, buf + *off, n - *off); - if (r == -1) - return got_error_from_errno("read"); - if (r == 0) - return NULL; - *off += r; - } - return NULL; -} - -static const struct got_error * -flushpkt(int fd) -{ - ssize_t w; - - if (chattygot > 1) - fprintf(stderr, "%s: writepkt: 0000\n", getprogname()); - - w = write(fd, "0000", 4); - if (w == -1) - return got_error_from_errno("write"); - if (w != 4) - return got_error(GOT_ERR_IO); - return NULL; -} - -/* - * Packet header contains a 4-byte hexstring which specifies the length - * of data which follows. - */ -static const struct got_error * -read_pkthdr(int *datalen, int fd) -{ - static const struct got_error *err = NULL; - char lenstr[5]; - long len; - char *e; - int n, i; - ssize_t r; - - *datalen = 0; - - err = readn(&r, fd, lenstr, 4); - if (err) - return err; - if (r == 0) { - /* implicit "0000" */ - if (chattygot > 1) - fprintf(stderr, "%s: readpkt: 0000\n", getprogname()); - return NULL; - } - if (r != 4) - return got_error_msg(GOT_ERR_BAD_PACKET, - "wrong packet header length"); - - lenstr[4] = '\0'; - for (i = 0; i < 4; i++) { - if (!isprint((unsigned char)lenstr[i])) - return got_error_msg(GOT_ERR_BAD_PACKET, - "unprintable character in packet length field"); - } - for (i = 0; i < 4; i++) { - if (!isxdigit((unsigned char)lenstr[i])) { - if (chattygot) - fprintf(stderr, "%s: bad length: '%s'\n", - getprogname(), lenstr); - return got_error_msg(GOT_ERR_BAD_PACKET, - "packet length not specified in hex"); - } - } - errno = 0; - len = strtol(lenstr, &e, 16); - if (lenstr[0] == '\0' || *e != '\0') - return got_error(GOT_ERR_BAD_PACKET); - if (errno == ERANGE && (len == LONG_MAX || len == LONG_MIN)) - return got_error_msg(GOT_ERR_BAD_PACKET, "bad packet length"); - if (len > INT_MAX || len < INT_MIN) - return got_error_msg(GOT_ERR_BAD_PACKET, "bad packet length"); - n = len; - if (n == 0) - return NULL; - if (n <= 4) - return got_error_msg(GOT_ERR_BAD_PACKET, "packet too short"); - n -= 4; - - *datalen = n; - return NULL; -} - -static const struct got_error * -readpkt(int *outlen, int fd, char *buf, int buflen) -{ - const struct got_error *err = NULL; - int datalen, i; - ssize_t n; - - err = read_pkthdr(&datalen, fd); - if (err) - return err; - - if (datalen > buflen) - return got_error(GOT_ERR_NO_SPACE); - - err = readn(&n, fd, buf, datalen); - if (err) - return err; - if (n != datalen) - return got_error_msg(GOT_ERR_BAD_PACKET, "short packet"); - - if (chattygot > 1) { - fprintf(stderr, "%s: readpkt: %zd:\t", getprogname(), n); - for (i = 0; i < n; i++) { - if (isprint(buf[i])) - fputc(buf[i], stderr); - else - fprintf(stderr, "[0x%.2x]", buf[i]); - } - fputc('\n', stderr); - } - - *outlen = n; - return NULL; -} - -static const struct got_error * -writepkt(int fd, char *buf, int nbuf) -{ - char len[5]; - int i; - ssize_t w; - - if (snprintf(len, sizeof(len), "%04x", nbuf + 4) >= sizeof(len)) - return got_error(GOT_ERR_NO_SPACE); - w = write(fd, len, 4); - if (w == -1) - return got_error_from_errno("write"); - if (w != 4) - return got_error(GOT_ERR_IO); - w = write(fd, buf, nbuf); - if (w == -1) - return got_error_from_errno("write"); - if (w != nbuf) - return got_error(GOT_ERR_IO); - if (chattygot > 1) { - fprintf(stderr, "%s: writepkt: %s:\t", getprogname(), len); - for (i = 0; i < nbuf; i++) { - if (isprint(buf[i])) - fputc(buf[i], stderr); - else - fprintf(stderr, "[0x%.2x]", buf[i]); - } - fputc('\n', stderr); - } - return NULL; -} static void match_remote_ref(struct got_pathlist_head *have_refs, @@ -687,7 +525,7 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1, goto done; } while (1) { - err = readpkt(&n, fd, buf, sizeof(buf)); + err = got_pkt_readpkt(&n, fd, buf, sizeof(buf), chattygot); if (err) goto done; if (n == 0) @@ -851,13 +689,13 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1, err = got_error(GOT_ERR_NO_SPACE); goto done; } - err = writepkt(fd, buf, n); + err = got_pkt_writepkt(fd, buf, n, chattygot); if (err) goto done; sent_my_capabilites = 1; nwant++; } - err = flushpkt(fd); + err = got_pkt_flushpkt(fd, chattygot); if (err) goto done; @@ -873,7 +711,7 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1, err = got_error(GOT_ERR_NO_SPACE); goto done; } - err = writepkt(fd, buf, n); + err = got_pkt_writepkt(fd, buf, n, chattygot); if (err) goto done; nhave++; @@ -883,7 +721,7 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1, struct got_object_id common_id; /* The server should ACK the object IDs we need. */ - err = readpkt(&n, fd, buf, sizeof(buf)); + err = got_pkt_readpkt(&n, fd, buf, sizeof(buf), chattygot); if (err) goto done; if (n >= 4 && strncmp(buf, "ERR ", 4) == 0) { @@ -909,12 +747,12 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1, } n = snprintf(buf, sizeof(buf), "done\n"); - err = writepkt(fd, buf, n); + err = got_pkt_writepkt(fd, buf, n, chattygot); if (err) goto done; if (nhave == 0) { - err = readpkt(&n, fd, buf, sizeof(buf)); + err = got_pkt_readpkt(&n, fd, buf, sizeof(buf), chattygot); if (err) goto done; if (n != 4 || strncmp(buf, "NAK\n", n) != 0) { @@ -936,7 +774,7 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1, int datalen = -1; if (have_sidebands) { - err = read_pkthdr(&datalen, fd); + err = got_pkt_readhdr(&datalen, fd, chattygot); if (err) goto done; if (datalen <= 0) @@ -961,7 +799,7 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1, datalen--; /* sideband ID has been read */ if (buf[0] == GOT_SIDEBAND_PACKFILE_DATA) { /* Read packfile data. */ - err = readn(&r, fd, buf, datalen); + err = got_pkt_readn(&r, fd, buf, datalen); if (err) goto done; if (r != datalen) { @@ -970,7 +808,7 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1, goto done; } } else if (buf[0] == GOT_SIDEBAND_PROGRESS_INFO) { - err = readn(&r, fd, buf, datalen); + err = got_pkt_readn(&r, fd, buf, datalen); if (err) goto done; if (r != datalen) { @@ -983,7 +821,7 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1, goto done; continue; } else if (buf[0] == GOT_SIDEBAND_ERROR_INFO) { - err = readn(&r, fd, buf, datalen); + err = got_pkt_readn(&r, fd, buf, datalen); if (err) goto done; if (r != datalen) { @@ -994,7 +832,7 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1, err = fetch_error(buf, r); goto done; } else if (buf[0] == 'A') { - err = readn(&r, fd, buf, datalen); + err = got_pkt_readn(&r, fd, buf, datalen); if (err) goto done; if (r != datalen) { @@ -1019,7 +857,7 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1, } } else { /* No sideband channel. Every byte is packfile data. */ - err = readn(&r, fd, buf, sizeof buf); + err = got_pkt_readn(&r, fd, buf, sizeof buf); if (err) goto done; if (r <= 0) blob - ae3ef0f8e50b2387fd389b1553182be4454aecd9 blob + ddc73e59aea2891c17b777b954fffa3a0bec90c6 --- libexec/got-send-pack/Makefile +++ libexec/got-send-pack/Makefile @@ -4,7 +4,7 @@ PROG= got-send-pack SRCS= got-send-pack.c error.c inflate.c object_parse.c \ - path.c privsep.c sha1.c + path.c privsep.c sha1.c pkt.c CPPFLAGS = -I${.CURDIR}/../../include -I${.CURDIR}/../../lib LDADD = -lutil -lz blob - 2a886f297fcabe6e08a1841e95f3913286f75c86 blob + 059def3f0aaec687446cd952534fdb52768ea4d8 --- libexec/got-send-pack/got-send-pack.c +++ libexec/got-send-pack/got-send-pack.c @@ -49,6 +49,7 @@ #include "got_lib_object_parse.h" #include "got_lib_privsep.h" #include "got_lib_pack.h" +#include "got_lib_pkt.h" #ifndef nitems #define nitems(_a) (sizeof((_a)) / sizeof((_a)[0])) @@ -56,171 +57,8 @@ struct got_object *indexed; static int chattygot; - -static const struct got_error * -readn(ssize_t *off, int fd, void *buf, size_t n) -{ - ssize_t r; - - *off = 0; - while (*off != n) { - r = read(fd, buf + *off, n - *off); - if (r == -1) - return got_error_from_errno("read"); - if (r == 0) - return NULL; - *off += r; - } - return NULL; -} - -static const struct got_error * -flushpkt(int fd) -{ - ssize_t w; - - if (chattygot > 1) - fprintf(stderr, "%s: writepkt: 0000\n", getprogname()); - - w = write(fd, "0000", 4); - if (w == -1) - return got_error_from_errno("write"); - if (w != 4) - return got_error(GOT_ERR_IO); - return NULL; -} - -/* - * Packet header contains a 4-byte hexstring which specifies the length - * of data which follows. - */ -static const struct got_error * -read_pkthdr(int *datalen, int fd) -{ - static const struct got_error *err = NULL; - char lenstr[5]; - long len; - char *e; - int n, i; - ssize_t r; - - *datalen = 0; - - err = readn(&r, fd, lenstr, 4); - if (err) - return err; - if (r == 0) { - /* implicit "0000" */ - if (chattygot > 1) - fprintf(stderr, "%s: readpkt: 0000\n", getprogname()); - return NULL; - } - if (r != 4) - return got_error_msg(GOT_ERR_BAD_PACKET, - "wrong packet header length"); - - lenstr[4] = '\0'; - for (i = 0; i < 4; i++) { - if (!isprint((unsigned char)lenstr[i])) - return got_error_msg(GOT_ERR_BAD_PACKET, - "unprintable character in packet length field"); - } - for (i = 0; i < 4; i++) { - if (!isxdigit((unsigned char)lenstr[i])) { - if (chattygot) - fprintf(stderr, "%s: bad length: '%s'\n", - getprogname(), lenstr); - return got_error_msg(GOT_ERR_BAD_PACKET, - "packet length not specified in hex"); - } - } - errno = 0; - len = strtol(lenstr, &e, 16); - if (lenstr[0] == '\0' || *e != '\0') - return got_error(GOT_ERR_BAD_PACKET); - if (errno == ERANGE && (len == LONG_MAX || len == LONG_MIN)) - return got_error_msg(GOT_ERR_BAD_PACKET, "bad packet length"); - if (len > INT_MAX || len < INT_MIN) - return got_error_msg(GOT_ERR_BAD_PACKET, "bad packet length"); - n = len; - if (n == 0) - return NULL; - if (n <= 4) - return got_error_msg(GOT_ERR_BAD_PACKET, "packet too short"); - n -= 4; - *datalen = n; - return NULL; -} - static const struct got_error * -readpkt(int *outlen, int fd, char *buf, int buflen) -{ - const struct got_error *err = NULL; - int datalen, i; - ssize_t n; - - err = read_pkthdr(&datalen, fd); - if (err) - return err; - - if (datalen > buflen) - return got_error(GOT_ERR_NO_SPACE); - - err = readn(&n, fd, buf, datalen); - if (err) - return err; - if (n != datalen) - return got_error_msg(GOT_ERR_BAD_PACKET, "short packet"); - - if (chattygot > 1) { - fprintf(stderr, "%s: readpkt: %zd:\t", getprogname(), n); - for (i = 0; i < n; i++) { - if (isprint(buf[i])) - fputc(buf[i], stderr); - else - fprintf(stderr, "[0x%.2x]", buf[i]); - } - fputc('\n', stderr); - } - - *outlen = n; - return NULL; -} - -static const struct got_error * -writepkt(int fd, char *buf, int nbuf) -{ - char len[5]; - int i; - ssize_t w; - - if (snprintf(len, sizeof(len), "%04x", nbuf + 4) >= sizeof(len)) - return got_error(GOT_ERR_NO_SPACE); - w = write(fd, len, 4); - if (w == -1) - return got_error_from_errno("write"); - if (w != 4) - return got_error(GOT_ERR_IO); - w = write(fd, buf, nbuf); - if (w == -1) - return got_error_from_errno("write"); - if (w != nbuf) - return got_error(GOT_ERR_IO); - if (chattygot > 1) { - fprintf(stderr, "%s: writepkt: %s:\t", getprogname(), len); - for (i = 0; i < nbuf; i++) { - if (isprint(buf[i])) - fputc(buf[i], stderr); - else - fprintf(stderr, "[0x%.2x]", buf[i]); - } - fputc('\n', stderr); - } - return NULL; -} - -static const struct got_error * tokenize_refline(char **tokens, char *line, int len, int maxtokens) { const struct got_error *err = NULL; @@ -653,7 +491,7 @@ send_pack(int fd, struct got_pathlist_head *refs, return got_error(GOT_ERR_SEND_EMPTY); while (1) { - err = readpkt(&n, fd, buf, sizeof(buf)); + err = got_pkt_readpkt(&n, fd, buf, sizeof(buf), chattygot); if (err) goto done; if (n == 0) @@ -747,7 +585,7 @@ send_pack(int fd, struct got_pathlist_head *refs, old_hashstr, new_hashstr); if (err) goto done; - err = writepkt(fd, buf, n); + err = got_pkt_writepkt(fd, buf, n, chattygot); if (err) goto done; if (chattygot) { @@ -793,7 +631,7 @@ send_pack(int fd, struct got_pathlist_head *refs, old_hashstr, new_hashstr); if (err) goto done; - err = writepkt(fd, buf, n); + err = got_pkt_writepkt(fd, buf, n, chattygot); if (err) goto done; if (chattygot) { @@ -808,7 +646,7 @@ send_pack(int fd, struct got_pathlist_head *refs, } nsent++; } - err = flushpkt(fd); + err = got_pkt_flushpkt(fd, chattygot); if (err) goto done; @@ -826,7 +664,7 @@ send_pack(int fd, struct got_pathlist_head *refs, goto done; } - err = readpkt(&n, fd, buf, sizeof(buf)); + err = got_pkt_readpkt(&n, fd, buf, sizeof(buf), chattygot); if (err) goto done; if (n >= 4 && strncmp(buf, "ERR ", 4) == 0) { @@ -839,7 +677,7 @@ send_pack(int fd, struct got_pathlist_head *refs, } while (nsent > 0) { - err = readpkt(&n, fd, buf, sizeof(buf)); + err = got_pkt_readpkt(&n, fd, buf, sizeof(buf), chattygot); if (err) goto done; if (n < 3) {