aboutsummaryrefslogtreecommitdiffstats
path: root/signal.c
diff options
context:
space:
mode:
author卜部昌平 <shyouhei@ruby-lang.org>2020-06-16 15:46:30 +0900
committer卜部昌平 <shyouhei@ruby-lang.org>2020-06-29 11:05:41 +0900
commit224e9c383598a9f09a5fa5736a098be538316311 (patch)
tree8e883f0c64d3c4690a1bacd98fb045c05956aec8 /signal.c
parent7cf4625690454db5001ec5b13a88ef0d53a85bc9 (diff)
downloadruby-224e9c383598a9f09a5fa5736a098be538316311.tar.gz
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.
Diffstat (limited to 'signal.c')
-rw-r--r--signal.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/signal.c b/signal.c
index 4e76c75853..5361b8c232 100644
--- a/signal.c
+++ b/signal.c
@@ -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*