Hi all,
there's been some discussions about cleaning up how our APIs (SDK) deals
with return values. Right now, it's sort of a mess, with different APIs
using different standards (e.g. return a POD data type, return a
TSReturnCode, return an int etc.). There are a few suggestions on the
table, each which has pros and cons. I'd like to start the discussion on
this, so we can come to a consensus and make any changes sooner rather
than later.
Here are the ideas that I've heard so far:
1) Do nothing (or as little as possible).
2) Do nothing, other than making sure any outright wrong returns are
fixed (i.e. use of "int" when it should be TSReturnCode). Things return
POD values or pointers stays the same. See TS-271 for example.
3) Change all APIs to always return TSReturnCode. The prototype for many
functions would then change, to be like
TSReturnCode TSFooApi(type1 in_param1, type2 in _param2, type3
*out_param1, type4 *outparam2);
#3 is obviously the thing with the most work (and changes), and also is
slightly more cumbersome to use in some cases (i.e. where before
something could return a char*, where NULL means failure, we'd now pass
in a char** pointer, and return TSError on failure). Also, some APIs
that can never fail would always return TS_Success, which makes it
slightly more confusing to know when I need to check for a return value
or not (although, a plugin author can of course always check every APIs
return value).
On the positive side of #3 is that the APIs become very standardized,
and easier to remember. And there is no guess work as to what return
value means success or failure, or checking for the wrong return values.
Thoughts?
-- leif
P.s
If we go with option #1 or #2, there are a few new APIs that should most
likely change, since they currently use the #3 prototype. Not a big
deal, since there were added in the v2.1.x timeline, so there is no
compatibility that breaks.