[C-DBUS] gestion des erreurs

gestion des erreurs [C-DBUS] - C - Programmation

Marsh Posté le 15-09-2007 à 12:07:00    

:hello:  
 
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 :
  1. char* exalt_dbus_response_string(DBusMessage *msg)
  2. {
  3.     DBusMessageIter args;
  4.     char* res;
  5.     if(!dbus_message_iter_init(msg, &args))
  6.     {
  7.         exalt_dbus_print_error("WARNING", __FILE__, __LINE__,__func__, "no argument" );
  8.         return NULL;
  9.     }
  10.     if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&args))
  11.     {
  12.         exalt_dbus_print_error("ERROR", __FILE__, __LINE__,__func__, "the argument is not a string" );
  13.         return NULL;
  14.     }
  15.     else
  16.     {
  17.         dbus_message_iter_get_basic(&args, &res);
  18.         return strdup(res);
  19.     }
  20. }


 
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 :
  1. 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 :/

Reply

Marsh Posté le 15-09-2007 à 12:07:00   

Reply

Marsh Posté le 16-09-2007 à 10:30:19    

ffomnislash a écrit :

<...>
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 :/


"This is hardly a C-question"
-- anonym in c.l.c.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 16-09-2007 à 11:18:38    

Emmanuel Delahaye a écrit :


"This is hardly a C-question"
-- anonym in c.l.c.


 
oui en effet :p

Reply

Marsh Posté le 19-09-2007 à 22:36:29    

Tu devrais utiliser une API de plus haut niveau pour faire joujou avec DBus, elles intègrent des systèmes de gestion d'erreur et fournissent une API plus stable (dans le temps) que l'API DBus de base.
Y a la couche GLib (en C) ou alors Qt4 (en C++)
 
Sinon, y a ptêt dans l'API un truc qui permet d'identifier si un message est une erreur ou non.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed