evade `exit_status` overwrite by `exit()`
Personne n'a encore pris cette issue.
- Langage dominant
- C
- Étoiles
- 40.4k
- Forks
- 8.1k
- Merge moyen
- 2 j 13 h
- PR mergées (30 j)
- 96
Description
Description
as you know there could be multiple exit() occurrences with the help of register_shutdown_function
my case exactly is a shutdown handler that executes once and does exit(), but original exit_status is lost because exit overwrites it. i would like to keep the original exit code. here's some code sample for quick showcase:
register_shutdown_function(function() {
done(true);# bad termination
});
work();
done();# good termination
###
function work(): void
{
throw new \Exception('test');# same as exit(255);
#exit(1001);
}
function done(bool $bad=false): void
{
static $DID=0;
if ($DID) {
return;
}
$DID++;
# ...
# cleanup
# ...
exit($bad ? 1 : 0);
#exit(exit_status() ?: ($bad ? 1 : 0));# this may save the original
}
to keep behavior the same, i propose to add exit_status() getter similar to error_reporting() that only gets a exit_status value. what you think?
to test those, ive added it right after error_reporting
https://github.com/php/php-src/blob/e358634cdce6a7505b7d422c23ec205a483ad2fc/Zend/zend_builtin_functions.c#L457
ZEND_FUNCTION(exit_status) // {{{
{
RETURN_LONG(EG(exit_status));
}
// }}}
but also have to add these in https://github.com/php/php-src/blob/master/Zend/zend_builtin_functions_arginfo.h
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_exit_status, 0, 0, IS_LONG, 0)
ZEND_END_ARG_INFO()
// ...
ZEND_FUNCTION(exit_status);
// ...
ZEND_FE(exit_status, arginfo_exit_status)
it has some php file (https://github.com/php/php-src/blob/master/Zend/zend_builtin_functions.stub.php) to generate, i didnt get how to use it
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par Zend/zend_builtin_functions.c et le point d'entrée error_reporting existant, puis examinez Zend/zend_builtin_functions.stub.php et le Zend/zend_builtin_functions_arginfo.h généré. Déterminez le workflow pris en charge pour la génération et les tests d'un nouveau builtin exit_status ; le travail est considéré comme terminé lorsque la proposition est résolue et que le statut de sortie d'origine peut être récupéré sans modifier le comportement de sortie existant.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- c, php
- Domaine
- compilers
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 28/100