From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: [PATCH v3 2/7] libxl: Add to libxl__domain_type a new return value (LIBXL_DOMAIN_TYPE_NOTFOUND) Date: Tue, 24 Mar 2015 15:15:30 +0000 Message-ID: <1427210130.21742.434.camel@citrix.com> References: <1427134861-18881-1-git-send-email-konrad.wilk@oracle.com> <1427134861-18881-3-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1YaQYJ-0002zv-Eg for xen-devel@lists.xenproject.org; Tue, 24 Mar 2015 15:15:35 +0000 In-Reply-To: <1427134861-18881-3-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Konrad Rzeszutek Wilk , Ian Jackson , Wei Liu Cc: xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org On Mon, 2015-03-23 at 14:20 -0400, Konrad Rzeszutek Wilk wrote: > So that the callers can distinguish between an error and > an domain not found. The exposed API calls that are effected > by this are: libxl_domain_[remus_start,suspend,unpause,cdrom_insert, > set_vcpuonline] > > We add an helper function to deal with the two types of errors: > libxl_domain_type2err. However for libxl_[pci,dom].c we just add > the extra check for LIBXL_DOMAIN_TYPE_NOTFOUND for simplicity > reasons. > > Suggested-by: Ian Campbell Did I? Anyway, I'm not terribly keen on the approach taken here, sorry, in particular extending libxl_domain_type with a subset of the libxl_error codes and the shenanigans which are needed to convert between them. Off hand I can think of 3 possible alternative solutions: Arrange that the -ve error values in libxl_domain_type directly correspond to an appropriate libxl_error code, allowing code to do if (type < 0) return type; if (type < 0) { rc = type ; goto out } type stuff. Change the prototype of libxl__domain_type to always return a libxl rc and on success return the type via a pointer argument. Change the return type of libxl_domain_type to an int and return either a LIBXL_DOMAIN_TYPE_FOO or an ERROR_*. They all have downsides (I don't much like the implicit cast between domain type and error code, changing the prototype will probably be disruptive, changing the return type means gcc can't catch missing switch statements for us). Perhaps you or my fellow maintainers have a better idea or a preference for one of the above? Ian.