Skip to content
Snippets Groups Projects
  • Jonathan Lebon's avatar
    0c52d85e
    glnx-errors.h: add glnx_null_throw[_*] variants · 0c52d85e
    Jonathan Lebon authored
    These are equivalent to the non-null throw, except that the returned
    value is a NULL pointer. They can be used in functions where one wants
    to return a pointer. E.g.:
    
    	GKeyFile *foo(GError **error) {
    		return glnx_null_throw (error, "foobar");
    	}
    
    The function call redirections are wrapped around a compound statement
    expression[1] so that they represent a single top-level expression. This
    allows us to avoid -Wunused-value warnings vs using a comma operator if
    the return value isn't used.
    
    I made the 'args...' absorb the fmt argument as well so that callers can
    still use it without always having to specify at least one additional
    variadic argument. I had to check to be sure that the expansion is all
    done by the preprocessor, so we don't need to worry about stack
    intricacies.
    
    [1] https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
    0c52d85e
    History
    glnx-errors.h: add glnx_null_throw[_*] variants
    Jonathan Lebon authored
    These are equivalent to the non-null throw, except that the returned
    value is a NULL pointer. They can be used in functions where one wants
    to return a pointer. E.g.:
    
    	GKeyFile *foo(GError **error) {
    		return glnx_null_throw (error, "foobar");
    	}
    
    The function call redirections are wrapped around a compound statement
    expression[1] so that they represent a single top-level expression. This
    allows us to avoid -Wunused-value warnings vs using a comma operator if
    the return value isn't used.
    
    I made the 'args...' absorb the fmt argument as well so that callers can
    still use it without always having to specify at least one additional
    variadic argument. I had to check to be sure that the expansion is all
    done by the preprocessor, so we don't need to worry about stack
    intricacies.
    
    [1] https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html