
On Thu, Feb 15, 2024 at 01:57:27PM +0100, Peter Krempa wrote:
On Wed, Feb 14, 2024 at 18:11:11 +0100, Andrea Bolognani wrote:
In order to have a nice API while still keeping the implementation short and readable, a small wrapper is required.
Well arguably the wrapper is not needed unless you really want to use:
return VIR_DOMAIN_CONTROLLER_MODEL_SCS*;
rather than:
*model = VIR_DOMAIN_CONTROLLER_MODEL_SCS*; return 0;
I really do want to be able to use the former style. It doesn't make as big an impact here, but for the USB part the difference is quite stark.
So now this always returns 0 -> success, thus the return value is pointless. Further up the next patch which modifies the documentation still keeps the claim. Additionally the description will read:
Not being able to come up with a value is NOT considered a failure.
which will mean that this function will never fail.
IMO it would be sufficient to just declare:
virDomainControllerModelSCSI qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, const virDomainControllerDef *cont, ...
and just document the same claims. Thus if _DEFAULT is returned it's up to the caller to decide.
Fabricating a return value doesn't seem to make much sense for me and once you only return success you might as well as return the value directly. It'd simplify the checker conditions.
You're right, I can absolutely get rid of the wrapper. Failure states that needed to be reported actually existed at some point, but those went away as I reworked the code, and I never went back to reconsider the API. Thanks a lot for the suggestion, and consider it done :) -- Andrea Bolognani / Red Hat / Virtualization