Be more clear that g_return_if_fail is undefined behaviour

In particular, it is not incorrect to g_return_if_fail (..., FALSE)
in a function returning a "success" gboolean and a GError: "failure to
meet the preconditions is an error" takes precedence over the
GError documentation's guarantee that the error will be set on failure.

Bug: https://bugzilla.gnome.org/show_bug.cgi?id=660809
Reviewed-by: Emmanuele Bassi
This commit is contained in:
Simon McVittie
2014-02-06 10:19:47 +00:00
parent f5e60984af
commit a3cb5ce33b
2 changed files with 39 additions and 8 deletions

View File

@@ -309,9 +309,23 @@
* g_set_error() will complain if you pile up errors.
*
* - By convention, if you return a boolean value indicating success
* then %TRUE means success and %FALSE means failure. If %FALSE is
* then %TRUE means success and %FALSE means failure.
* <footnote><para>Avoid creating functions which have a boolean
* return value and a GError parameter, but where the boolean does
* something other than signal whether the GError is set. Among other
* problems, it requires C callers to allocate a temporary error. Instead,
* provide a "gboolean *" out parameter. There are functions in GLib
* itself such as g_key_file_has_key() that are deprecated because of this.
* </para></footnote>
* If %FALSE is
* returned, the error must be set to a non-%NULL value.
*
* <footnote><para>One exception to this is that in situations that are
* already considered to be undefined behaviour (such as when a
* g_return_val_if_fail() check fails), the error need not be set.
* Instead of checking separately whether the error is set, callers
* should ensure that they do not provoke undefined behaviour, then
* assume that the error will be set on failure.</para></footnote>
*
* - A %NULL return value is also frequently used to mean that an error
* occurred. You should make clear in your documentation whether %NULL
* is a valid return value in non-error cases; if %NULL is a valid value,