Error reporting
[D-Bus low-level public API]

Error reporting. More...

Data Structures

struct  DBusError
 Object representing an exception. More...

Typedefs

typedef struct DBusError DBusError
 Mostly-opaque type representing an error that occurred.

Functions

void dbus_error_init (DBusError *error)
 Initializes a DBusError structure.
void dbus_error_free (DBusError *error)
 Frees an error that's been set (or just initialized), then reinitializes the error as in dbus_error_init().
void dbus_set_error_const (DBusError *error, const char *name, const char *message)
 Assigns an error name and message to a DBusError.
void dbus_move_error (DBusError *src, DBusError *dest)
 Moves an error src into dest, freeing src and overwriting dest.
dbus_bool_t dbus_error_has_name (const DBusError *error, const char *name)
 Checks whether the error is set and has the given name.
dbus_bool_t dbus_error_is_set (const DBusError *error)
 Checks whether an error occurred (the error is set).
void dbus_set_error (DBusError *error, const char *name, const char *format,...)
 Assigns an error name and message to a DBusError.

Detailed Description

Error reporting.

Types and functions related to reporting errors.

In essence D-Bus error reporting works as follows:

 DBusError error;
 dbus_error_init (&error);
 dbus_some_function (arg1, arg2, &error);
 if (dbus_error_is_set (&error))
   {
     fprintf (stderr, "an error occurred: %s\n", error.message);
     dbus_error_free (&error);
   }

By convention, all functions allow NULL instead of a DBusError*, so callers who don't care about the error can ignore it.

There are some rules. An error passed to a D-Bus function must always be unset; you can't pass in an error that's already set. If a function has a return code indicating whether an error occurred, and also a DBusError parameter, then the error will always be set if and only if the return code indicates an error occurred. i.e. the return code and the error are never going to disagree.

An error only needs to be freed if it's been set, not if it's merely been initialized.

You can check the specific error that occurred using dbus_error_has_name().

Errors will not be set for programming errors, such as passing invalid arguments to the libdbus API. Instead, libdbus will print warnings, exit on a failed assertion, or even crash in those cases (in other words, incorrect use of the API results in undefined behavior, possibly accompanied by helpful debugging output if you're lucky).


Function Documentation

void dbus_error_free ( DBusError error  ) 

Frees an error that's been set (or just initialized), then reinitializes the error as in dbus_error_init().

Parameters:
error memory where the error is stored.

Referenced by _dbus_get_local_machine_uuid_encoded(), _dbus_keyring_new_for_credentials(), and _dbus_read_uuid_file().

dbus_bool_t dbus_error_has_name ( const DBusError error,
const char *  name 
)

Checks whether the error is set and has the given name.

Parameters:
error the error
name the name
Returns:
TRUE if the given named error occurred

Referenced by _dbus_read_uuid_file().

void dbus_error_init ( DBusError error  ) 

Initializes a DBusError structure.

Does not allocate any memory; the error only needs to be freed if it is set at some point.

Parameters:
error the DBusError.

Referenced by _dbus_keyring_new_for_credentials().

dbus_bool_t dbus_error_is_set ( const DBusError error  ) 

Checks whether an error occurred (the error is set).

Parameters:
error the error object
Returns:
TRUE if an error occurred

Referenced by _dbus_transport_open(), and _dbus_write_pid_to_file_and_pipe().

void dbus_move_error ( DBusError src,
DBusError dest 
)

Moves an error src into dest, freeing src and overwriting dest.

Both src and dest must be initialized. src is reinitialized to an empty error. dest may not contain an existing error. If the destination is NULL, just frees and reinits the source error.

Parameters:
src the source error
dest the destination error or NULL

Referenced by _dbus_read_uuid_file(), and _dbus_transport_open().

void dbus_set_error ( DBusError error,
const char *  name,
const char *  format,
  ... 
)

Assigns an error name and message to a DBusError.

Does nothing if error is NULL.

The format may be NULL, which means a (pretty much useless) default message will be deduced from the name. This is not a good idea, just go ahead and provide a useful error message. It won't hurt you.

If no memory can be allocated for the error message, an out-of-memory error message will be set instead.

Parameters:
error the error.or NULL
name the error name
format printf-style format string.

Referenced by _dbus_babysitter_set_child_exit_error(), _dbus_become_daemon(), _dbus_change_to_daemon_user(), _dbus_check_dir_is_private_to_user(), _dbus_close(), _dbus_command_for_pid(), _dbus_connect_tcp_socket(), _dbus_connect_unix_socket(), _dbus_create_directory(), _dbus_create_file_exclusively(), _dbus_delete_directory(), _dbus_delete_file(), _dbus_directory_get_next_file(), _dbus_directory_open(), _dbus_file_get_contents(), _dbus_full_duplex_pipe(), _dbus_is_console_user(), _dbus_keyring_new_for_credentials(), _dbus_listen_tcp_socket(), _dbus_listen_unix_socket(), _dbus_make_file_world_readable(), _dbus_message_iter_get_args_valist(), _dbus_object_tree_register(), _dbus_pipe_write(), _dbus_read_credentials_socket(), _dbus_server_listen_platform_specific(), _dbus_server_new_for_domain_socket(), _dbus_server_new_for_tcp_socket(), _dbus_set_bad_address(), _dbus_spawn_async_with_babysitter(), _dbus_stat(), _dbus_string_save_to_file(), _dbus_transport_new_for_domain_socket(), _dbus_transport_new_for_tcp_socket(), _dbus_user_database_lookup(), _dbus_user_database_lookup_group(), _dbus_write_pid_to_file_and_pipe(), and dbus_message_demarshal().

void dbus_set_error_const ( DBusError error,
const char *  name,
const char *  message 
)

Assigns an error name and message to a DBusError.

Does nothing if error is NULL. The message may be NULL, which means a default message will be deduced from the name. The default message will be totally useless, though, so using a NULL message is not recommended.

Because this function does not copy the error name or message, you must ensure the name and message are global data that won't be freed. You probably want dbus_set_error() instead, in most cases.

Parameters:
error the error.or NULL
name the error name (not copied!!!)
message the error message (not copied!!!)

Referenced by _dbus_keyring_get_best_key(), and _dbus_keyring_new_for_credentials().


Generated on 23 Sep 2011 for D-Bus by  doxygen 1.6.1