[Libvir] ABI compatibility question: static strings returned from some functions

Mark McLoughlin markmc at redhat.com
Mon Feb 19 14:46:43 UTC 2007


Hey,

On Mon, 2007-02-19 at 14:44 +0000, Richard W.M. Jones wrote:
> We have some functions such as virConnectGetType which are defined to 
> return statically allocated strings:
> 
> /**
>   * virConnectGetType:
>   * @conn: pointer to the hypervisor connection
>   *
>   * Get the name of the Hypervisor software used.
>   *
>   * Returns NULL in case of error, a static zero terminated string 
> otherwise.
>   */
> const char *
> virConnectGetType(virConnectPtr conn)
> [...]
> 
> This is all well and good in the typical local case, but when working 
> over a remote connection the string we return is allocated and requires 
> freeing at some point.

	Uggh.

>   Unfortunately I don't see a good thing to do in 
> this case except to change the semantics of virConnectGetType, which 
> arguably breaks ABI compatibility.
> 
> Suggestions from anyone?

	Okay, suggest:

  1) Add a new function with a different name which returns an 
     allocated string. Mark the old function as deprecated.

  2) Retain the old function, and have a list of likely static strings 
     which you can return if it matches the string you got from the 
     remote side, and if not return (and leak) an allocated string

Cheers,
Mark.




More information about the libvir-list mailing list