diff options
author | Jonathan Tan <jonathantanmy@google.com> | 2019-01-16 11:28:13 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-01-17 11:25:07 -0800 |
commit | fbd76cd450e6675cbd5d48da3c53fa446b776475 (patch) | |
tree | 61be5a085f296813ac98dc99353057140bbefd0f /pkt-line.c | |
parent | bc2e795cea607e444a9f985b0dbed5a4d25921c8 (diff) | |
download | git-fbd76cd450e6675cbd5d48da3c53fa446b776475.tar.gz |
sideband: reverse its dependency on pkt-line
A subsequent patch will teach struct packet_reader a new field that, if
set, instructs it to interpret read data as multiplexed. This will
create a dependency from pkt-line to sideband.
To avoid a circular dependency, split recv_sideband() into 2 parts: the
reading loop (left in recv_sideband()) and the processing of the
contents (in demultiplex_sideband()), and move the former into pkt-line.
This reverses the direction of dependency: sideband no longer depends on
pkt-line, and pkt-line now depends on sideband.
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'pkt-line.c')
-rw-r--r-- | pkt-line.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/pkt-line.c b/pkt-line.c index 9d3e402d41..321ff632a5 100644 --- a/pkt-line.c +++ b/pkt-line.c @@ -439,6 +439,29 @@ ssize_t read_packetized_to_strbuf(int fd_in, struct strbuf *sb_out) return sb_out->len - orig_len; } +int recv_sideband(const char *me, int in_stream, int out) +{ + char buf[LARGE_PACKET_MAX + 1]; + int len; + struct strbuf scratch = STRBUF_INIT; + enum sideband_type sideband_type; + + while (1) { + len = packet_read(in_stream, NULL, NULL, buf, LARGE_PACKET_MAX, + 0); + if (!demultiplex_sideband(me, buf, len, &scratch, + &sideband_type)) + continue; + switch (sideband_type) { + case SIDEBAND_PRIMARY: + write_or_die(out, buf + 1, len - 1); + break; + default: /* errors: message already written */ + return sideband_type; + } + } +} + /* Packet Reader Functions */ void packet_reader_init(struct packet_reader *reader, int fd, char *src_buffer, size_t src_len, |