diff mbox series

[09/11] char-socket: Fix qemu_chr_socket_address() for abstract sockets

Message ID 20201029133833.3450220-10-armbru@redhat.com
State New
Headers show
Series sockets: Attempt to drain the abstract socket swamp | expand

Commit Message

Markus Armbruster Oct. 29, 2020, 1:38 p.m. UTC
Commit 776b97d360 "qemu-sockets: add abstract UNIX domain socket
support" neglected to update qemu_chr_socket_address().  It shows
shows neither @abstract nor @tight.  Fix that.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 chardev/char-socket.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

Comments

Eric Blake Oct. 29, 2020, 7:41 p.m. UTC | #1
On 10/29/20 8:38 AM, Markus Armbruster wrote:
> Commit 776b97d360 "qemu-sockets: add abstract UNIX domain socket

> support" neglected to update qemu_chr_socket_address().  It shows

> shows neither @abstract nor @tight.  Fix that.

> 

> Signed-off-by: Markus Armbruster <armbru@redhat.com>

> ---

>  chardev/char-socket.c | 10 +++++++++-

>  1 file changed, 9 insertions(+), 1 deletion(-)

> 


> +++ b/chardev/char-socket.c

> @@ -443,10 +443,18 @@ static char *qemu_chr_socket_address(SocketChardev *s, const char *prefix)

>                                 s->is_listen ? ",server" : "");

>          break;

>      case SOCKET_ADDRESS_TYPE_UNIX:

> -        return g_strdup_printf("%sunix:%s%s", prefix,

> +    {

> +        UnixSocketAddress *sa = &s->addr->u.q_unix;

> +

> +        return g_strdup_printf("%sunix:%s%s%s%s", prefix,

>                                 s->addr->u.q_unix.path,

> +                               sa->has_abstract && sa->abstract

> +                               ? ",abstract" : "",

> +                               sa->has_tight && sa->tight

> +                               ? ",tight" : "",


Why are we appending ',tight' when it is not abstract?  tight only makes
a difference for abstract sockets, so omitting it for normal sockets
makes more sense.

Or put another way, why are we using 2 bools to represent three sensible
states, instead of a single 3-state enum?

>                                 s->is_listen ? ",server" : "");

>          break;

> +    }

>      case SOCKET_ADDRESS_TYPE_FD:

>          return g_strdup_printf("%sfd:%s%s", prefix, s->addr->u.fd.str,

>                                 s->is_listen ? ",server" : "");

> 


-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org
Markus Armbruster Oct. 30, 2020, 9:09 a.m. UTC | #2
Eric Blake <eblake@redhat.com> writes:

> On 10/29/20 8:38 AM, Markus Armbruster wrote:

>> Commit 776b97d360 "qemu-sockets: add abstract UNIX domain socket

>> support" neglected to update qemu_chr_socket_address().  It shows

>> shows neither @abstract nor @tight.  Fix that.

>> 

>> Signed-off-by: Markus Armbruster <armbru@redhat.com>

>> ---

>>  chardev/char-socket.c | 10 +++++++++-

>>  1 file changed, 9 insertions(+), 1 deletion(-)

>> 

>

>> +++ b/chardev/char-socket.c

>> @@ -443,10 +443,18 @@ static char *qemu_chr_socket_address(SocketChardev *s, const char *prefix)

>>                                 s->is_listen ? ",server" : "");

>>          break;

>>      case SOCKET_ADDRESS_TYPE_UNIX:

>> -        return g_strdup_printf("%sunix:%s%s", prefix,

>> +    {

>> +        UnixSocketAddress *sa = &s->addr->u.q_unix;

>> +

>> +        return g_strdup_printf("%sunix:%s%s%s%s", prefix,

>>                                 s->addr->u.q_unix.path,

>> +                               sa->has_abstract && sa->abstract

>> +                               ? ",abstract" : "",

>> +                               sa->has_tight && sa->tight

>> +                               ? ",tight" : "",

>

> Why are we appending ',tight' when it is not abstract?  tight only makes

> a difference for abstract sockets, so omitting it for normal sockets

> makes more sense.


We don't bother to reject @tight when @abstract is false.  Not bothering
to suppress it here is consistently careless.

I'm trying to make this pig less wrong, I'm not trying to make it less
ugly.

> Or put another way, why are we using 2 bools to represent three sensible

> states, instead of a single 3-state enum?


Because the QAPI interface got merged without proper review by the QAPI
maintainers?

>>                                 s->is_listen ? ",server" : "");

>>          break;

>> +    }

>>      case SOCKET_ADDRESS_TYPE_FD:

>>          return g_strdup_printf("%sfd:%s%s", prefix, s->addr->u.fd.str,

>>                                 s->is_listen ? ",server" : "");

>>
diff mbox series

Patch

diff --git a/chardev/char-socket.c b/chardev/char-socket.c
index 1ee5a8c295..dc1cf86ecf 100644
--- a/chardev/char-socket.c
+++ b/chardev/char-socket.c
@@ -443,10 +443,18 @@  static char *qemu_chr_socket_address(SocketChardev *s, const char *prefix)
                                s->is_listen ? ",server" : "");
         break;
     case SOCKET_ADDRESS_TYPE_UNIX:
-        return g_strdup_printf("%sunix:%s%s", prefix,
+    {
+        UnixSocketAddress *sa = &s->addr->u.q_unix;
+
+        return g_strdup_printf("%sunix:%s%s%s%s", prefix,
                                s->addr->u.q_unix.path,
+                               sa->has_abstract && sa->abstract
+                               ? ",abstract" : "",
+                               sa->has_tight && sa->tight
+                               ? ",tight" : "",
                                s->is_listen ? ",server" : "");
         break;
+    }
     case SOCKET_ADDRESS_TYPE_FD:
         return g_strdup_printf("%sfd:%s%s", prefix, s->addr->u.fd.str,
                                s->is_listen ? ",server" : "");