[alsa-devel] RFC: snd_card_create() function

Takashi Iwai tiwai at suse.de
Mon Jan 12 17:12:54 CET 2009


At Mon, 12 Jan 2009 17:08:28 +0100,
Krzysztof Helt wrote:
> 
> On Mon, 12 Jan 2009 15:35:19 +0100
> Takashi Iwai <tiwai at suse.de> wrote:
> 
> > Hi,
> > 
> > so far, we use snd_card_new() function to create a card instance.
> > A known problem regarding this API is that it doesn't return a proper
> > error code, thus the probe callback always returns -ENOMEM (or
> > whatever the driver defines) no matter which error occurred actually.
> > A typical case is the card slot conflict.  Even in such a case, it
> > returns -ENOMEM, which may mislead the user.
> 
> Another approach is PTR_ERR macro used already in the kernel
> (see include/linux/err.h).
> It encodes the error code in the returned pointer value. There
> are already hndy macros/inlines to get this code, test error, etc.

Yep.  However, as I mentioned in the paragraph after the text above,
it gives you little advantage in this case.

If an error occurs, the new function returns a non-NULL value.  Since
the old caller side does only a NULL-check, it would accept the error
pointer as is, ended up an Oops.

More badly, this old-style return-value check can't be detected at the
compile time because the API (at least the function calling) is
unchanged.

So, PTR_ERR() is nice to be introduced at the first place but pretty
bad as a transition from a NULL/non-NULL API.


Takashi


More information about the Alsa-devel mailing list