diff options
author | 卜部昌平 <[email protected]> | 2020-06-16 15:46:30 +0900 |
---|---|---|
committer | 卜部昌平 <[email protected]> | 2020-06-29 11:05:41 +0900 |
commit | 224e9c383598a9f09a5fa5736a098be538316311 (patch) | |
tree | 8e883f0c64d3c4690a1bacd98fb045c05956aec8 /signal.c | |
parent | 7cf4625690454db5001ec5b13a88ef0d53a85bc9 (diff) |
signm2signo: do not goto into a branch
I'm not necessarily against every goto in general, but jumping into a
branch is definitely a bad idea. Better refactor.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/3247
Diffstat (limited to 'signal.c')
-rw-r--r-- | signal.c | 37 |
1 files changed, 19 insertions, 18 deletions
@@ -243,23 +243,7 @@ signm2signo(VALUE *sig_ptr, int negative, int exit, int *prefix_ptr) prefix += signame_prefix_len; } if (len <= (long)prefix) { - unsupported: - if (prefix == signame_prefix_len) { - prefix = 0; - } - else if (prefix > signame_prefix_len) { - prefix -= signame_prefix_len; - len -= prefix; - vsig = rb_str_subseq(vsig, prefix, len); - prefix = 0; - } - else { - len -= prefix; - vsig = rb_str_subseq(vsig, prefix, len); - prefix = signame_prefix_len; - } - rb_raise(rb_eArgError, "unsupported signal `%.*s%"PRIsVALUE"'", - prefix, signame_prefix, vsig); + goto unsupported; } if (prefix_ptr) *prefix_ptr = prefix; @@ -272,7 +256,24 @@ signm2signo(VALUE *sig_ptr, int negative, int exit, int *prefix_ptr) return negative ? -sigs->signo : sigs->signo; } } - goto unsupported; + + unsupported: + if (prefix == signame_prefix_len) { + prefix = 0; + } + else if (prefix > signame_prefix_len) { + prefix -= signame_prefix_len; + len -= prefix; + vsig = rb_str_subseq(vsig, prefix, len); + prefix = 0; + } + else { + len -= prefix; + vsig = rb_str_subseq(vsig, prefix, len); + prefix = signame_prefix_len; + } + rb_raise(rb_eArgError, "unsupported signal `%.*s%"PRIsVALUE"'", + prefix, signame_prefix, vsig); } static const char* |