[RESOLU] Signification d'un return

Signification d'un return [RESOLU] - C - Programmation

Marsh Posté le 07-01-2008 à 18:14:34    

Hello tout le monde,  
 
J'ai un doute quant à la signification de cette ligne :
 
return err < 0 ? errno : 0
 
Qui se trouve à la fin d'une fonction simple issue d'un package (bridge-utils) :
 

Code :
  1. int br_add_interface(const char *bridge, const char *dev)
  2. {
  3. struct ifreq ifr;
  4. int err;
  5. int ifindex = if_nametoindex(dev);
  6. if (ifindex == 0)
  7.  return ENODEV;
  8. strncpy(ifr.ifr_name, bridge, IFNAMSIZ);
  9. #ifdef SIOCBRADDIF
  10. ifr.ifr_ifindex = ifindex;
  11. err = ioctl(br_socket_fd, SIOCBRADDIF, &ifr);
  12. if (err < 0)
  13. #endif
  14. {
  15.  unsigned long args[4] = { BRCTL_ADD_IF, ifindex, 0, 0 };
  16.      
  17.  ifr.ifr_data = (char *) args;
  18.  err = ioctl(br_socket_fd, SIOCDEVPRIVATE, &ifr);
  19. }
  20. return err < 0 ? errno : 0;
  21. }


 
La fonction retourne-t-elle une valeur négative dans le cadre d'une erreur, et sinon, elle renvoie 0, est-ce bien cela ?


Message édité par Thordax le 07-01-2008 à 19:07:50

---------------
Atari 520 ST 256 Ko
Reply

Marsh Posté le 07-01-2008 à 18:14:34   

Reply

Marsh Posté le 07-01-2008 à 18:34:28    

Hello,
si je ne m'abuse, c'est une structure ternaire : un test est réalisé (err < 0) et si vrai, il retourne errno, si faux, il retourne zéro.  
Donc il retourne errno (je pense un n° d'erreur ?) ou, si "err" est négatif, zéro.


Message édité par NewsletTux le 07-01-2008 à 18:35:29

---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 07-01-2008 à 18:38:59    

Merci, NewsletTux, donc cela signifie que dans tous les cas, la fonction renvoie un code d'erreur, et que si celui-ci est négatif, l'erreur renvoyée est 0 ?
 
On peut donc supposer qu'une erreur de 0 signifie "pas d'erreur" ? :d


---------------
Atari 520 ST 256 Ko
Reply

Marsh Posté le 07-01-2008 à 18:44:57    

COND ? SI_VRAI : SINON

Reply

Marsh Posté le 07-01-2008 à 18:46:42    

Thordax a écrit :

Merci, NewsletTux, donc cela signifie que dans tous les cas, la fonction renvoie un code d'erreur, et que si celui-ci est négatif, l'erreur renvoyée est 0 ?
 
On peut donc supposer qu'une erreur de 0 signifie "pas d'erreur" ? :d


 
La fonction renvoie un code retour, et non un code d'erreur.
 
L'usage veut qu'une fonction qui retourne 0 s'est bien déroulée.
 
Quant à err, c'est le retour de ioctl() :

RETURN VALUES
     Upon successful completion, the value returned depends  upon
     the  device  control  function,  but  must be a non-negative
     integer.  Otherwise, -1 is returned  and  errno  is  set  to
     indicate the error.


 
Donc si err == -1, ioctl() a échoué, et la variable globale errno contient le code retour (permet d'utiliser perror() ou strerror() ) pour en connaître la cause exacte.

Message cité 1 fois
Message édité par Elmoricq le 07-01-2008 à 18:46:59
Reply

Marsh Posté le 07-01-2008 à 19:03:08    

Merci à tous, et merci à Elmomo pour cette réponse supra précise :jap:


---------------
Atari 520 ST 256 Ko
Reply

Sujets relatifs:

Leave a Replay

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