diff --git a/adsbus/opts.c b/adsbus/opts.c index 3a833e9..e805809 100644 --- a/adsbus/opts.c +++ b/adsbus/opts.c @@ -98,17 +98,5 @@ bool opts_add_stdout(char *arg) { if (!serializer) { return false; } - int fd = dup(1); - { - // TODO: move into standard location for non-socket fd handling - struct buf buf = BUF_INIT, *buf_ptr = &buf; - send_hello(&buf_ptr, serializer); - if (buf_ptr->length) { - if (write(fd, buf_at(buf_ptr, 0), buf_ptr->length) != (ssize_t) buf_ptr->length) { - return false; - } - } - } - send_new(fd, serializer, NULL); - return true; + return send_new_hello(dup(1), serializer, NULL); } diff --git a/adsbus/send.c b/adsbus/send.c index 551cc0d..073c7e4 100644 --- a/adsbus/send.c +++ b/adsbus/send.c @@ -136,6 +136,18 @@ void send_new_wrapper(int fd, void *passthrough, struct peer *on_close) { send_new(fd, (struct serializer *) passthrough, on_close); } +bool send_new_hello(int fd, struct serializer *serializer, struct peer *on_close) { + struct buf buf = BUF_INIT, *buf_ptr = &buf; + send_hello(&buf_ptr, serializer); + if (buf_ptr->length) { + if (write(fd, buf_at(buf_ptr, 0), buf_ptr->length) != (ssize_t) buf_ptr->length) { + return false; + } + } + send_new(fd, serializer, on_close); + return true; +} + void send_hello(struct buf **buf_pp, void *passthrough) { struct serializer *serializer = (struct serializer *) passthrough; if (serializer->hello) { diff --git a/adsbus/send.h b/adsbus/send.h index fdc3d67..a50fa3f 100644 --- a/adsbus/send.h +++ b/adsbus/send.h @@ -9,6 +9,7 @@ void send_cleanup(void); struct serializer *send_get_serializer(char *); void send_new(int, struct serializer *, struct peer *); void send_new_wrapper(int, void *, struct peer *); +bool send_new_hello(int, struct serializer *, struct peer *); void send_hello(struct buf **, void *); void send_write(struct packet *); void send_print_usage(void);