/* -*- mode: C; c-file-style: "gnu" -*- */
/* dbus-errors.c Error reporting
*
- * Copyright (C) 2002 Red Hat Inc.
+ * Copyright (C) 2002, 2004 Red Hat Inc.
* Copyright (C) 2003 CodeFactory AB
*
- * Licensed under the Academic Free License version 2.0
+ * Licensed under the Academic Free License version 2.1
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "dbus-errors.h"
#include "dbus-internals.h"
#include "dbus-string.h"
+#include "dbus-protocol.h"
#include <stdarg.h>
#include <string.h>
*/
typedef struct
{
- const char *name; /**< error name */
+ char *name; /**< error name */
char *message; /**< error message */
unsigned int const_message : 1; /**< Message is not owned by DBusError */
* Types and functions related to reporting errors.
*
*
- * In essence D-BUS error reporting works as follows:
+ * In essence D-Bus error reporting works as follows:
*
* @code
* DBusError error;
* }
* @endcode
*
- * There are some rules. An error passed to a D-BUS function must
+ * 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
real = (DBusRealError *)error;
if (!real->const_message)
- dbus_free (real->message);
+ {
+ dbus_free (real->name);
+ dbus_free (real->message);
+ }
dbus_error_init (error);
}
* 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. If the error name is unknown
- * to D-BUS the default message will be totally useless, though.
+ * to D-Bus the default message will be totally useless, though.
*
- * @todo should be called dbus_error_set_const()
- *
* @param error the error.
* @param name the error name (not copied!!!)
* @param message the error message (not copied!!!)
real = (DBusRealError *)error;
- real->name = name;
+ real->name = (char*) name;
real->message = (char *)message;
real->const_message = TRUE;
}
* Does nothing if error is #NULL.
*
* The format may be NULL, which means a default message will be
- * deduced from the name. If the error name is unknown to D-BUS the
+ * deduced from the name. If the error name is unknown to D-Bus the
* default message will be totally useless, though.
*
* If no memory can be allocated for the error message,
* an out-of-memory error message will be set instead.
*
- * @todo should be called dbus_error_set()
- *
* @param error the error.
- * @param name the error name (not copied!!!)
+ * @param name the error name
* @param format printf-style format string.
*/
void
_dbus_string_free (&str);
goto nomem;
}
+ _dbus_string_free (&str);
- real->name = name;
+ real->name = _dbus_strdup (name);
+ if (real->name == NULL)
+ {
+ dbus_free (real->message);
+ real->message = NULL;
+ goto nomem;
+ }
real->const_message = FALSE;
- _dbus_string_free (&str);
-
return;
nomem:
- dbus_set_error_const (error, DBUS_ERROR_NO_MEMORY, NULL);
+ _DBUS_SET_OOM (error);
}
/** @} */ /* End public API */