J'écrit actuellement un client utilisant dbus mais je rencontre un problème bête dans la gestion des erreurs.
Lorsque je récupère une réponse de type string je fait ceci:
Code :
- char* exalt_dbus_response_string(DBusMessage *msg)
- {
- DBusMessageIter args;
- char* res;
- if(!dbus_message_iter_init(msg, &args))
- {
- exalt_dbus_print_error("WARNING", __FILE__, __LINE__,__func__, "no argument" );
- return NULL;
- }
- if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&args))
- {
- exalt_dbus_print_error("ERROR", __FILE__, __LINE__,__func__, "the argument is not a string" );
- return NULL;
- }
- else
- {
- dbus_message_iter_get_basic(&args, &res);
- return strdup(res);
- }
- }
|
Cela fonctionne très bien à l'exception que si le service n'existe pas, dbus ajoute comme premier résultat un string qui dit
Code :
- The name org.e.Exalt was not provided by any .service files
|
Mon problème est comment faire la différence entre un vrai résultat et un résultat de type erreur. J'ai beau cherché notamment du coté du type dbuserror je ne trouve rien en ce qui concerne un résultat