On Thu, 31 May 2018 21:25:57 -0400
Keno Fischer wrote:
> The size to pass to the `connect` call is the size of the entire
> `struct sockaddr_un`. Passing anything shorter than this causes errors
> on darwin.
>
From the linux unix(7) manual page:
ret = connect (data_socket, (const struct sockaddr *) ,
sizeof(struct sockaddr_un));
Not sure why it was done differently, but I definitely prefer the
fixed size version.
Applied to 9p-next.
Thanks !
> Signed-off-by: Keno Fischer
> ---
>
> Changes since v1: New patch
>
> hw/9pfs/9p-proxy.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/hw/9pfs/9p-proxy.c b/hw/9pfs/9p-proxy.c
> index e2e0329..47a94e0 100644
> --- a/hw/9pfs/9p-proxy.c
> +++ b/hw/9pfs/9p-proxy.c
> @@ -1088,7 +1088,7 @@ static int proxy_ioc_getversion(FsContext *fs_ctx,
> V9fsPath *path,
>
> static int connect_namedsocket(const char *path, Error **errp)
> {
> -int sockfd, size;
> +int sockfd;
> struct sockaddr_un helper;
>
> if (strlen(path) >= sizeof(helper.sun_path)) {
> @@ -1102,8 +1102,7 @@ static int connect_namedsocket(const char *path, Error
> **errp)
> }
> strcpy(helper.sun_path, path);
> helper.sun_family = AF_UNIX;
> -size = strlen(helper.sun_path) + sizeof(helper.sun_family);
> -if (connect(sockfd, (struct sockaddr *), size) < 0) {
> +if (connect(sockfd, (struct sockaddr *), sizeof(helper)) < 0) {
> error_setg_errno(errp, errno, "failed to connect to '%s'", path);
> close(sockfd);
> return -1;