Oué enfin je suis pas non plus un hacker fou pro du C :)
Autant je comprends à peu près l'intérêt lorsqu'on gère une pile (effectivement lorsque les allocations/libérations sont différentes), mais parofis je captes pas trop l'intérêt (notamment lorsque les goto ne s'enchaîne pas :
exemple :
fork_out:
1142 if (retval)
1143 return ERR_PTR(retval);
1144 return p;
pourquoi ne pas mettre ca dans une fonction ? à mon avis le compilateur la inlinera très bien.
sinon de manière plus générale j'ai envie de faire :
gestion_erreur(code){
switch(code){
case ERROR_ALLOC_TRUC:
do_stuff();
case ...
}
}
celà cache implicitement des gotos mais c'est déjà plus élégant que la suite :
[^] # Re: Hmm :/
Posté par TImaniac (site web personnel) . En réponse au journal Entretient du noyau Linux. Évalué à 1.
Autant je comprends à peu près l'intérêt lorsqu'on gère une pile (effectivement lorsque les allocations/libérations sont différentes), mais parofis je captes pas trop l'intérêt (notamment lorsque les goto ne s'enchaîne pas :
exemple :
fork_out:
1142 if (retval)
1143 return ERR_PTR(retval);
1144 return p;
pourquoi ne pas mettre ca dans une fonction ? à mon avis le compilateur la inlinera très bien.
sinon de manière plus générale j'ai envie de faire :
gestion_erreur(code){
switch(code){
case ERROR_ALLOC_TRUC:
do_stuff();
case ...
}
}
celà cache implicitement des gotos mais c'est déjà plus élégant que la suite :
ad_fork_cleanup_namespace:
1147 exit_namespace(p);
1148 bad_fork_cleanup_mm:
1149 if (p->mm)
1150 mmput(p->mm);
1151 bad_fork_cleanup_signal:
1152 exit_signal(p);
1153 bad_fork_cleanup_sighand:
1154 exit_sighand(p);
1155 bad_fork_cleanup_fs:
1156 exit_fs(p); /* blocking */
1157 bad_fork_cleanup_files:
1158 exit_files(p); /* blocking */
1159 bad_fork_cleanup_semundo:
1160 exit_sem(p);
1161 bad_fork_cleanup_audit:
1162 audit_free(p);
1163 bad_fork_cleanup_security:
1164 security_task_free(p);
1165 bad_fork_cleanup_policy: