diff options
| -rw-r--r-- | avahi-client/client.c | 9 | ||||
| -rw-r--r-- | avahi-common/dbus.c | 31 | ||||
| -rw-r--r-- | avahi-common/dbus.h | 3 | ||||
| -rw-r--r-- | avahi-common/error.c | 3 | ||||
| -rw-r--r-- | avahi-common/error.h | 3 | 
5 files changed, 44 insertions, 5 deletions
diff --git a/avahi-client/client.c b/avahi-client/client.c index 54d19e5..3c86bd6 100644 --- a/avahi-client/client.c +++ b/avahi-client/client.c @@ -544,8 +544,13 @@ fail:      if (dbus_error_is_set(&error)) { -        if (ret_error) -            *ret_error = avahi_error_dbus_to_number(error.name); +        if (ret_error) { +            if (strcmp(error.name, DBUS_ERROR_FILE_NOT_FOUND) == 0) +                /* DBUS returns this error when the DBUS daemon is not running */ +                *ret_error = AVAHI_ERR_NO_DAEMON; +            else +                *ret_error = avahi_error_dbus_to_number(error.name); +        }          dbus_error_free(&error);      } diff --git a/avahi-common/dbus.c b/avahi-common/dbus.c index fc4b34b..8140164 100644 --- a/avahi-common/dbus.c +++ b/avahi-common/dbus.c @@ -86,11 +86,36 @@ static const char * const table[- AVAHI_ERR_MAX] = {      AVAHI_DBUS_ERR_INVALID_DNS_TYPE,      AVAHI_DBUS_ERR_NOT_SUPPORTED, -    AVAHI_DBUS_ERR_NOT_PERMITTED +    AVAHI_DBUS_ERR_NOT_PERMITTED, +    AVAHI_DBUS_ERR_INVALID_ARGUMENT +}; + +struct error_map { +    const char *dbus_error; +    int avahi_error; +}; + +static struct error_map error_map[] = { +    { DBUS_ERROR_FAILED,           AVAHI_ERR_FAILURE }, +    { DBUS_ERROR_NO_MEMORY,        AVAHI_ERR_NO_MEMORY }, +    { DBUS_ERROR_SERVICE_UNKNOWN,  AVAHI_ERR_NO_DAEMON }, +    { DBUS_ERROR_BAD_ADDRESS,      AVAHI_ERR_NO_DAEMON }, +    { DBUS_ERROR_NOT_SUPPORTED,    AVAHI_ERR_NOT_SUPPORTED }, +    { DBUS_ERROR_LIMITS_EXCEEDED,  AVAHI_ERR_TOO_MANY_OBJECTS }, +    { DBUS_ERROR_ACCESS_DENIED,    AVAHI_ERR_ACCESS_DENIED }, +    { DBUS_ERROR_AUTH_FAILED,      AVAHI_ERR_ACCESS_DENIED }, +    { DBUS_ERROR_NO_SERVER,        AVAHI_ERR_NO_DAEMON }, +    { DBUS_ERROR_TIMEOUT,          AVAHI_ERR_TIMEOUT }, +    { DBUS_ERROR_NO_NETWORK,       AVAHI_ERR_NO_NETWORK }, +    { DBUS_ERROR_DISCONNECTED,     AVAHI_ERR_DISCONNECTED }, +    { DBUS_ERROR_INVALID_ARGS,     AVAHI_ERR_INVALID_ARGUMENT }, +    { DBUS_ERROR_TIMED_OUT,        AVAHI_ERR_TIMEOUT }, +    { NULL, 0 }  };  int avahi_error_dbus_to_number(const char *s) {      int e; +    const struct error_map *m;      assert(s); @@ -98,6 +123,10 @@ int avahi_error_dbus_to_number(const char *s) {          if (strcmp(s, table[-e]) == 0)              return e; +    for (m = error_map; m->dbus_error; m++) +        if (strcmp(m->dbus_error, s) == 0) +            return m->avahi_error; +          return AVAHI_ERR_DBUS_ERROR;  } diff --git a/avahi-common/dbus.h b/avahi-common/dbus.h index 790fc3c..eb29581 100644 --- a/avahi-common/dbus.h +++ b/avahi-common/dbus.h @@ -95,7 +95,10 @@ AVAHI_C_DECL_BEGIN  #define AVAHI_DBUS_ERR_INVALID_DNS_CLASS "org.freedesktop.Avahi.InvalidDNSClassError"  #define AVAHI_DBUS_ERR_INVALID_DNS_TYPE "org.freedesktop.Avahi.InvalidDNSTypeError"  #define AVAHI_DBUS_ERR_NOT_SUPPORTED "org.freedesktop.Avahi.NotSupportedError" +  #define AVAHI_DBUS_ERR_NOT_PERMITTED "org.freedesktop.Avahi.NotPermittedError" +#define AVAHI_DBUS_ERR_INVALID_ARGUMENT "org.freedesktop.Avahi.InvalidArgument" +  /** Convert a DBus error string into an Avahi error number */  int avahi_error_dbus_to_number(const char *s); diff --git a/avahi-common/error.c b/avahi-common/error.c index 6c0a900..6fe981c 100644 --- a/avahi-common/error.c +++ b/avahi-common/error.c @@ -83,7 +83,8 @@ const char *avahi_strerror(int error) {          "Invalid DNS class",          "Not supported", -        "Not permitted" +        "Not permitted", +        "Invalid argument"      };      if (-error < 0 || -error >= -AVAHI_ERR_MAX) diff --git a/avahi-common/error.h b/avahi-common/error.h index d6c4620..8060ebc 100644 --- a/avahi-common/error.h +++ b/avahi-common/error.h @@ -86,6 +86,7 @@ enum {      AVAHI_ERR_NOT_SUPPORTED = -49,           /**< Not supported */      AVAHI_ERR_NOT_PERMITTED = -50,           /**< Operation not permitted */ +    AVAHI_ERR_INVALID_ARGUMENT = -51,        /**< Invalid argument */      /****       ****    IF YOU ADD A NEW ERROR CODE HERE, PLEASE DON'T FORGET TO ADD @@ -95,7 +96,7 @@ enum {       ****    Also remember to update the MAX value below.       ****/ -    AVAHI_ERR_MAX = -51 +    AVAHI_ERR_MAX = -52  };  /** Return a human readable error string for the specified error code */  | 
