From: Vladimir Sementsov-Ogievskiy Date: Thu, 10 Jun 2021 10:07:35 +0000 (+0300) Subject: qemu-sockets: introduce socket_address_parse_named_fd() X-Git-Tag: v6.1.0-rc0~68^2~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c5423704184c43cadd7b3c5ff0aea3925c5509bc;p=thirdparty%2Fqemu.git qemu-sockets: introduce socket_address_parse_named_fd() Add function that transforms named fd inside SocketAddress structure into number representation. This way it may be then used in a context where current monitor is not available. Signed-off-by: Vladimir Sementsov-Ogievskiy Message-Id: <20210610100802.5888-6-vsementsov@virtuozzo.com> Reviewed-by: Eric Blake [eblake: comment tweak] Signed-off-by: Eric Blake --- diff --git a/include/qemu/sockets.h b/include/qemu/sockets.h index 7d1f8135767..0c34bf23987 100644 --- a/include/qemu/sockets.h +++ b/include/qemu/sockets.h @@ -111,4 +111,15 @@ SocketAddress *socket_remote_address(int fd, Error **errp); */ SocketAddress *socket_address_flatten(SocketAddressLegacy *addr); +/** + * socket_address_parse_named_fd: + * + * Modify @addr, replacing a named fd by its corresponding number. + * Needed for callers that plan to pass @addr to a context where the + * current monitor is not available. + * + * Return 0 on success. + */ +int socket_address_parse_named_fd(SocketAddress *addr, Error **errp); + #endif /* QEMU_SOCKETS_H */ diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index c415c342c12..080a240b74e 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -1164,6 +1164,25 @@ static int socket_get_fd(const char *fdstr, Error **errp) return fd; } +int socket_address_parse_named_fd(SocketAddress *addr, Error **errp) +{ + int fd; + + if (addr->type != SOCKET_ADDRESS_TYPE_FD) { + return 0; + } + + fd = socket_get_fd(addr->u.fd.str, errp); + if (fd < 0) { + return fd; + } + + g_free(addr->u.fd.str); + addr->u.fd.str = g_strdup_printf("%d", fd); + + return 0; +} + int socket_connect(SocketAddress *addr, Error **errp) { int fd;