On Thu, Apr 06, 2023 at 02:20:31 -0700, Andrea Bolognani wrote: > On Thu, Apr 06, 2023 at 10:20:46AM +0200, Michal Prívozník wrote: > > On 4/5/23 19:21, Andrea Bolognani wrote: > > > On Wed, Apr 05, 2023 at 01:30:17PM +0200, Michal Privoznik wrote: > > >> + if (nodeHeader->len < sizeof(*nodeHeader)) { > > >> + virReportError(VIR_ERR_INTERNAL_ERROR, > > >> + _("IORT table node type %1$s has invalid length: %2$" PRIu16), > > > > > > I'm not sure this plays well with the recently introduced changes to > > > translatable strings. Have you checked with Jirka? > > > > I haven't. But, gcc complains if only a part of string contains > > positioned arguments. That is: > > > > "argument value %1$s and another argument %s" > > "argument value %s and another argument %2$s" > > > > are invalid format string and compiler throws an error. Now, using no > > positions works: > > > > "argument value %s and another argument %s" > > > > but then, Jirka's syntax-check rule throws an error. But it doesn't for > > the case I'm using: > > > > "integer value %" PRIu16 > > Yeah, either your usage is fine or the syntax-check rule should be > improve to catch it. Jirka? Yeah, the syntax check is quite simple so it doesn't catch all possible cases and libvirt-pot-check run after libvirt-pot (either in our CI or manually) will detect all cases. > > Although, one could argue that if the translate tool doesn't allow fixed > > size integer types modifiers, then the tool is broken. Surely, libvirt's > > not the only one using fixed size integers. But okay, for error messages Well, not really. The tool is not a C preprocessor so it doesn't have any idea what a specific macro you concatenate with an actual string is. So the best thing to do here is to avoid the situation and do what you came up with here: > > I can typecast arguments. IOW: > > > > virReportError(VIR_ERR_INTERNAL_ERROR, > > _("IORT table node type %1$s has invalid length: %2$u"), > > NULLSTR(typeStr), (unsigned int)nodeHeader->len); Jirka