static int wall_tty_block(void) {
char *p;
int fd, r;
dev_t devnr;
r = get_ctty_devnr(0, &devnr);
if (r < 0)
return -r;
if (asprintf(&p, "/run/systemd/ask-password-block/%u:%u", major(devnr), minor(devnr)) < 0)
return -ENOMEM;
mkdir_parents_label(p, 0700);
mkfifo(p, 0600);
fd = open(p, O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
free(p);
if (fd < 0)
return -errno;
return fd;
}
me semble un peu douteux.
* 4 return, alors qu'il y a un free(p) qui traine
* D'après ce que je comprends, la sémantique de ce que retourne la fonction dépend du fait que la fonction ait rencontré une erreur ou non. Bof, hein. sqrt(4) renvoie 2, mais sqrt(-4) renvoie -1, parce que -1 est un code d'erreur.
* Des magic values 0700, 0600.
* Des chemins codés en dur
Sans que ça ne soit du code spaghetti (ça n'est pas obfusqué quand même, il ne faut pas déconner), je pense qu'il existe des programmeurs susceptibles de ne pas trouver ça particulièrement propre.
Perso, ça me rappelle juste à quel point C doit être évité pour toute appli hors kernel, embarqué, compilo, ou composant critique du système.
[^] # Re: Ca traduit bien un état d'esprit de la part des développeurs de systemd
Posté par arnaudus . En réponse au journal Systemd vs Linux, quand l'intransigeance d'un développeur tourne au ridicule.... Évalué à 0.
Mouais, sans être dev C,
me semble un peu douteux.
* 4 return, alors qu'il y a un free(p) qui traine
* D'après ce que je comprends, la sémantique de ce que retourne la fonction dépend du fait que la fonction ait rencontré une erreur ou non. Bof, hein. sqrt(4) renvoie 2, mais sqrt(-4) renvoie -1, parce que -1 est un code d'erreur.
* Des magic values 0700, 0600.
* Des chemins codés en dur
Sans que ça ne soit du code spaghetti (ça n'est pas obfusqué quand même, il ne faut pas déconner), je pense qu'il existe des programmeurs susceptibles de ne pas trouver ça particulièrement propre.
Perso, ça me rappelle juste à quel point C doit être évité pour toute appli hors kernel, embarqué, compilo, ou composant critique du système.