• [^] # 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é à 2. Dernière modification le 04 avril 2014 à 08:02.

    Exemple : ligne 123 à 234, avec un mélange de if avec blogcs entre {}, et sans {}, des else if imbriqués dans tous les sens, qui fait qu'on a du mal à voir ce qui se passe. C'est à ce genre de code que l'on doit des bugs qui ont fait beaucoup parler d'eux ces temps-ci. Certaines parties du code sont plus propres (hereusement d'ailleurs), mais celle-ci me fait un peu peur. Ca manque de cohérence dans le style, ça fait mal rangé.

    A mon avis ce code est trop long et aurait du être splitté en plusieurs fonctions.

     for (;;) {
     int sleep_for = -1, j;
     if (until > 0) {
     usec_t y;
     y = now(CLOCK_MONOTONIC);
     if (y > until) {
     r = -ETIME;
     goto finish;
     }
     sleep_for = (int) ((until - y) / USEC_PER_MSEC);
     }
     if (flag_file)
     if (access(flag_file, F_OK) < 0) {
     r = -errno;
     goto finish;
     }
     if ((j = poll(pollfd, notify > 0 ? 2 : 1, sleep_for)) < 0) {
     if (errno == EINTR)
     continue;
     r = -errno;
     goto finish;
     } else if (j == 0) {
     r = -ETIME;
     goto finish;
     }
     if (notify > 0 && pollfd[POLL_INOTIFY].revents != 0)
     flush_fd(notify);
     if (pollfd[POLL_SOCKET].revents == 0)
     continue;
     if ((k = read(fd, buffer + p, sizeof(buffer) - p)) <= 0) {
     r = k < 0 ? -errno : -EIO;
     goto finish;
     }
     p += k;
     if (p < 1)
     continue;
     if (buffer[0] == 5) {
     if (accept_cached) {
     /* Hmm, first try with cached
     * passwords failed, so let's retry
     * with a normal password request */
     free(packet);
     packet = NULL;
     if (asprintf(&packet, "*002円%c%s%n", (int) (strlen(message) + 1), message, &n) < 0) {
     r = -ENOMEM;
     goto finish;
     }
     if ((k = loop_write(fd, packet, n+1, true)) != n+1) {
     r = k < 0 ? (int) k : -EIO;
     goto finish;
     }
     accept_cached = false;
     p = 0;
     continue;
     }
     /* No password, because UI not shown */
     r = -ENOENT;
     goto finish;
     } else if (buffer[0] == 2 || buffer[0] == 9) {
     uint32_t size;
     char **l;
     /* One ore more answers */
     if (p < 5)
     continue;
     memcpy(&size, buffer+1, sizeof(size));
     size = le32toh(size);
     if (size+5 > sizeof(buffer)) {
     r = -EIO;
     goto finish;
     }
     if (p-5 < size)
     continue;
     if (!(l = strv_parse_nulstr(buffer + 5, size))) {
     r = -ENOMEM;
     goto finish;
     }
     *_passphrases = l;
     break;
     } else {
     /* Unknown packet */
     r = -EIO;
     goto finish;
     }
     }
     r = 0;
     ```