From nobody Mon Feb 2 05:57:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1769856249; cv=none; d=zohomail.com; s=zohoarc; b=FRp8WcDN55mV3tBie8Epkic+I4M5JwA+bjIURypdQ8VJcyQlk1rpa9w2FxZZCGB1lcH9rE12BGJMqAO/F7jVrGIb/x2fJmDnKk9FlbWYzXvMLpHayIYyvEroiC6y7M32v6xMjJjRn3xOgKwk6atUl8Jjl8oVwwgN+cFu9QKUe48= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769856249; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=fNtlM19MwAfpyt2XpkXPP2LPK8DDwdlRJSQ1eqf8oaY=; b=EoK/DpNr2SaDk+OkEXG5leHDHyWX0Cl8G1Mk/HlZWwCgU+AZayjNGMtdkr5RVLxY/XfM38HQf1LwK2AIpRAINcj9ZKccnlRTAeAkUPvJF21uzfMS3pqkLuifilOR8+Vky6eh88C3MvDSJWEc/hmg/6lBYhT2aPUGNmdCY4hSNoo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 176985624919498.41148654764095; Sat, 31 Jan 2026 02:44:09 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id DB1C64191A; Sat, 31 Jan 2026 05:44:07 -0500 (EST) Received: from [172.19.199.6] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id CD07B419C7; Sat, 31 Jan 2026 05:43:27 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id B1C623F8A7; Sat, 31 Jan 2026 05:43:23 -0500 (EST) Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id F02434180F for ; Sat, 31 Jan 2026 05:43:22 -0500 (EST) Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-b883c8dfb00so697579266b.1 for ; Sat, 31 Jan 2026 02:43:22 -0800 (PST) Received: from tulp.dynamic.ziggo.nl (2001-1c02-1a15-3000-c218-03ff-feb5-6cc4.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:c218:3ff:feb5:6cc4]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8de3d734a3sm386854166b.5.2026.01.31.02.43.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 31 Jan 2026 02:43:20 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769856201; x=1770461001; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=fNtlM19MwAfpyt2XpkXPP2LPK8DDwdlRJSQ1eqf8oaY=; b=LA8/2GmWi3/Hxvafu5VX3ZoSSLjnAdTaceaMKr9pz6jt1OUMkZfoCGiRQZ0KIbob7D olEh32YQr/Fx3xbqk9de/KV6+/s0IYl7cmlmnQsJHS1WZukPFiTXaW8TUv6+EEWywC2x UOpr57BUNEs9zYMpIgdlWhSpH/MVEuhQua2NYD5pEAcEeTwbohPMoZn+dfw2gH5gHcHW FTiVxgePwFgLygwAmAVwXWjB8rntbvPtODGrmaWTaQjZas6mC1fFw9zc+HsX2NQMrWDh F4SnpxQ2PwUDWX2y/TqaIuLf+ganr6VKRX+Sy07jdhZA0Xux6r0XX5p1nox5G3GKCJFG waHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769856201; x=1770461001; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=fNtlM19MwAfpyt2XpkXPP2LPK8DDwdlRJSQ1eqf8oaY=; b=uAUH8ERbtN6+ceGslJ+aDGrNRdpXmIUah/VGYQaWz2BiAz8TH8LxbLBtjIHXU6EgP3 2E0FF49lpdcG/LfSU+H6vhvntiaKQV79wLqY6uHiF7f37q513l0sfwq5EKsFzME6E4TX H16IZH/GADG8aiKohPXovol2pSK6peG6PhA2l2JSl6/bl/J32t97lKYCIdLzhpjOuYLi g0ST9BWnE9oUqs4D0Kg6HWouHH+r/0kNxII5Mlnfye60r41GgRZ0lcW9AfbIwNE7uUiY myd9lwcCYXfmKr0vxagWAFO2b59gPzBnoIpx8i8gk6tGyZbuJLX8TiygaePYZLg6nmXz K9ug== X-Gm-Message-State: AOJu0YzTcagLz0mfuASbdbxrrrtaZEe0hKwWmJ4Hk7ADNe5edCT6C0Pn yoawbiWOGHqKIajZ1FxnB2GHXGnO7qmHn9uGJp/QICKChC02wfloGIZsZSMpZJG3 X-Gm-Gg: AZuq6aKY0EtTn9pqzX+Kt8lf+xXAjJqxMb5DNHzXDSRVW0uouzTLgTDVHQyWuvzHa8/ 8ty+ZQczgEHJAJk5gVZdc0481+Hvx8s75GZUJ8i+qLAP6DIdkLnyCI9TJtLv3RF6mvjK781UmiL W3/Q2He2HRNWNEM2BQ4wFCo3RXmRIkp9YfUUouiz+T3HBhDOrNahOr5Ck1tVWKDm3hLg/tp2gfm v/59jujdO7G+RQSMMDcCFNoRbzcNhNvIZwPCqwlHJ99L4v+yvdvTSpiYAJX1u6KUGcztCpJl+R8 CvqC3r7sWFK8TWiDa/PsuijGXCbMiMqO0u5N/jUyBoauUp3jy11u9HgoHesYWoOKpxzwnpAqQ04 urcvDfsLHVnrPKuTGTn8yefig8UALEoTPRncxrvKVNo3L/PdBoM19DHCc8lkDqh0/ciL/SciF0x nsOguOuybCc/kycLFoHx9ReR9WvetuwR3zCiLDHgmCh02JszUg9cWwKmdLralAUvt3ejzE7Afvz BPvrPiIes60wDuwrOhMVHYnklDCgDXQsik+iP70CR9S X-Received: by 2002:a17:906:6a18:b0:b8a:52c8:3a61 with SMTP id a640c23a62f3a-b8dff71a408mr422636666b.57.1769856200766; Sat, 31 Jan 2026 02:43:20 -0800 (PST) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH] build: add detection of xdrproc_t arguments count Date: Sat, 31 Jan 2026 11:43:04 +0100 Message-ID: <20260131104304.19210-1-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.52.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: EQQHZLYEK43B4BV7JUINGOEJKDHQ6CXT X-Message-ID-Hash: EQQHZLYEK43B4BV7JUINGOEJKDHQ6CXT X-MailFrom: bogorodskiy@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Roman Bogorodskiy X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1769856253471158500 Content-Type: text/plain; charset="utf-8" According to 9fa3a8ab6fd82ad2f5a14b490696085061418718, macOS insists on passing 3 arguments for xdrproc_t. Passing 3 arguments was a good common ground, but since recently[1] FreeBSD only accepts 2 arguments. Add a meson.build check whether 3 arguments are accepted, and add macros which passes either 2 or 3 arguments to xdrproc_t based on the result of this check. 1: https://cgit.freebsd.org/src/commit/?id=3Dac5a19ec6989675c8ec6c3ca245dba= 243d1a6416 Signed-off-by: Roman Bogorodskiy --- meson.build | 19 +++++++++++++++++++ scripts/rpcgen/tests/test_demo.c | 12 +++++++++--- src/rpc/virnetmessage.c | 10 ++++++++-- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/meson.build b/meson.build index 964d1fa4e1..4a4f89c1cb 100644 --- a/meson.build +++ b/meson.build @@ -893,6 +893,25 @@ else xdr_dep =3D dependency('', required: false) endif =20 +if xdr_dep.found() + xdrproc_3arg_code =3D ''' + #include + + bool_t test_filter(XDR *xdr, void *data, unsigned int opaque_flags) { + return TRUE; + } + + int main() { + XDR xdr; + xdrproc_t filter =3D (xdrproc_t)&test_filter; + (*filter)(&xdr, NULL, 0); + return 0; + } + ''' + if cc.compiles(xdrproc_3arg_code, dependencies: xdr_dep) + conf.set('XDRPROC_T_3ARGS', 1) + endif +endif =20 # generic build dependencies =20 diff --git a/scripts/rpcgen/tests/test_demo.c b/scripts/rpcgen/tests/test_d= emo.c index e6ba7ddbc5..82eda89592 100644 --- a/scripts/rpcgen/tests/test_demo.c +++ b/scripts/rpcgen/tests/test_demo.c @@ -8,6 +8,12 @@ # define xdr_uint64_t xdr_u_int64_t #endif =20 +#if defined(XDRPROC_T_3ARGS) +# define XDRPROC(proc, xdr, data) (proc(&xdr, data, 0)) +#else +# define XDRPROC(proc, xdr, data) (proc(&xdr, data)) +#endif + #include "demo.h" #include "demo.c" =20 @@ -27,7 +33,7 @@ static void test_xdr(xdrproc_t proc, void *vorig, void *v= new, const char *testna /* Step 1: serialize the vorig and compare to the data in test .bin f= iles */ xdrmem_create(&xdr, buf, buflen, XDR_ENCODE); =20 - ret =3D !!proc(&xdr, vorig, 0); + ret =3D !!XDRPROC(proc, xdr, vorig); g_assert_cmpint(ret, =3D=3D, !fail); =20 if (fail) @@ -54,7 +60,7 @@ static void test_xdr(xdrproc_t proc, void *vorig, void *v= new, const char *testna /* Step 2: de-serialize the state to create a new object */ xdrmem_create(&xdr, buf, buflen, XDR_DECODE); =20 - ret =3D !!proc(&xdr, vnew, 0); + ret =3D !!XDRPROC(proc, xdr, vnew); g_assert_cmpint(ret, =3D=3D, true); =20 actlen =3D xdr_getpos(&xdr); @@ -68,7 +74,7 @@ static void test_xdr(xdrproc_t proc, void *vorig, void *v= new, const char *testna =20 xdrmem_create(&xdr, buf, buflen, XDR_ENCODE); =20 - ret =3D !!proc(&xdr, vnew, 0); + ret =3D !!XDRPROC(proc, xdr, vnew); g_assert_cmpint(ret, =3D=3D, true); =20 actlen =3D xdr_getpos(&xdr); diff --git a/src/rpc/virnetmessage.c b/src/rpc/virnetmessage.c index af0f9cb30b..e66df5c9e2 100644 --- a/src/rpc/virnetmessage.c +++ b/src/rpc/virnetmessage.c @@ -34,6 +34,12 @@ =20 VIR_LOG_INIT("rpc.netmessage"); =20 +#if defined(XDRPROC_T_3ARGS) +# define XDRPROC_FILTER(filter, xdr, data) ((*filter)(&xdr, data, 0)) +#else +# define XDRPROC_FILTER(filter, xdr, data) ((*filter)(&xdr, data)) +#endif + virNetMessage *virNetMessageNew(bool tracked) { virNetMessage *msg; @@ -367,7 +373,7 @@ int virNetMessageEncodePayload(virNetMessage *msg, msg->bufferLength - msg->bufferOffset, XDR_ENCODE); =20 /* Try to encode the payload. If the buffer is too small increase it. = */ - while (!(*filter)(&xdr, data, 0)) { + while (!XDRPROC_FILTER(*filter, xdr, data)) { unsigned int newlen =3D msg->bufferLength - VIR_NET_MESSAGE_LEN_MA= X; newlen *=3D 2; =20 @@ -424,7 +430,7 @@ int virNetMessageDecodePayload(virNetMessage *msg, xdrmem_create(&xdr, msg->buffer + msg->bufferOffset, msg->bufferLength - msg->bufferOffset, XDR_DECODE); =20 - if (!(*filter)(&xdr, data, 0)) { + if (!XDRPROC_FILTER(*filter, xdr, data)) { virReportError(VIR_ERR_RPC, "%s", _("Unable to decode message payl= oad")); goto error; } --=20 2.52.0