[pulseaudio-discuss] [PATCH] add section about error handling to doxygen documentation

Peter Meerwald pmeerw at pmeerw.net
Mon Dec 12 07:01:18 PST 2011

Hello Tanu,

> > + * The PulseAudio API indicates error conditions by returning an integer
> > + * value -1 or a NULL pointer. On success, an integer value 0 or a valid
> > + * pointer is returned. Certain function provide an optional error code
> > + * (see #pa_error_code) which can be turned into a human readable message
> > + * using pa_strerror().

> This text promises too much about the return codes. Yes, -1 and 0 are
> the most common values, but the numbers shouldn't be hardcoded in the
> user code ("user" as in API user). A negative return code means failure
> and non-negative means success, thus the user should always use "< 0" or
> ">= 0" to check for failure/success. If there is a special meaning
> attached to some individual numbers, that will be documented separately.

currently there is no documentation that I am aware of on what a 
return code could mean 

the text can be amended to talk about negative and non-negative return 
codes instead of -1 and 0 -- however, -1 is at the moment mentioned 
specifically for several API calls

I agree that special cases should be documented separately as needed;
however, this is missing in certain places: e.g. pa_proplist_unset() and 
pa_proplist_contains() -- I suggest patches for those two

> Another thing is the question of when pa_strerror() can be used. That
> should be documented unambiguously. I don't know what the current
> situation is - my guess would be that the documentation is lacking in
> this regard.

I was not aware of this problem and simply assumed that an error code can 
be passed to pa_strerror()

> I think this text should either say what it says now, or that
> pa_strerror() can be used always unless otherwise stated. Which one is
> the right choice depends on which is more common, those error codes that
> can be passed to pa_strerror() or those that can't (I haven't checked
> what is the situation).

/** Return a human readable error message for the specified numeric error code */
const char* pa_strerror(int error);

here no indication what a numeric error code is supposed to be; the API 
uses 'int' and not a 'pa_error_code_t' (which I suggest to introduce for a 
different reason)

in def.h you find:
/** Error values as used by pa_context_errno(). Use pa_strerror() to 
convert these values to human readable strings */

strictly speaking, this would restrict pa_strerror() to values returned by 

however, the example pacat-simple.c does the following:
 if (!(s = pa_simple_new(NULL, argv[0], PA_STREAM_PLAYBACK, NULL, "playback", &ss, NULL, NULL, &error))) {
        fprintf(stderr, __FILE__": pa_simple_new() failed: %s\n", pa_strerror(error));

I have not spotted any error codes not defined in defs.h in a brief review

> Regardless of what is the current situation, I think it would make sense
> to guarantee every error code in the public API to be suitable to be
> passed to pa_strerror().

I fully agree, this sounds sensible
I don't see a reason to have error codes as int and not enums -- but I 
guess that would be a too bit change at the moment

regards, p.


Peter Meerwald
+43-664-2444418 (mobile)

More information about the pulseaudio-discuss mailing list