• [^] # Re: Ca traduit bien un état d'esprit de la part des développeurs de systemd

    Posté par . En réponse au journal Systemd vs Linux, quand l'intransigeance d'un développeur tourne au ridicule.... Évalué à 9.

     size_t p = 0;
    

    Puis ligne 163 :

     if ((k = read(fd, buffer + p, sizeof(buffer) - p)) <= 0) {
     r = k < 0 ? -errno : -EIO;
     goto finish;
     }
     p += k;
     if (p < 1)
     continue;
    

    À moins que je l'aie loupé, p n'est pas affecté ailleurs.

    On a alors :
    - k >= 1, sinon on est allé à finish (sortie de la fonction) ;
    - p qui vaut 0 au départ et auquel on ajoute une/des quantité(s) strictement positive(s) ;
    - donc toujours p >= 1 au moment du test ;
    - donc le test ne sert à rien, le continue n'est jamais atteignable.

    Je crois avoir lu qu'il y avait des test unitaires sur systemd.
    Bon, ça peut se couvrir en TU en faisant un overflow en ajoutant plusieurs fois de grosses valeurs de k, mais quand on voit qu'il faut recourir à ce moyen pour passer dans la branche, ça doit faire se demander si on doit conserver le code et si la conception est correcte.

    Ce n'est pas un bug en soi, le bout de code est juste inutile, mais on peut se demander si c'est bien ce qui était voulu, du coup, et si ce n'est pas une erreur. Un commentaire assumant le côté ceinture et bretelle lèverait le doute.