diff options
author | 卜部昌平 <[email protected]> | 2020-06-12 14:24:41 +0900 |
---|---|---|
committer | 卜部昌平 <[email protected]> | 2020-06-29 11:05:41 +0900 |
commit | 5e960545193eeb7f52acc7ec505d908db3785e30 (patch) | |
tree | 1e4d9a19d1278bac08e1f0e093520c79cbd0cdcd /dln_find.c | |
parent | 99073f49bf97e1d2f2caab97045de5011edf04b8 (diff) |
dln_find_1: 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 'dln_find.c')
-rw-r--r-- | dln_find.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/dln_find.c b/dln_find.c index b08612764e..ca62441631 100644 --- a/dln_find.c +++ b/dln_find.c @@ -248,26 +248,14 @@ dln_find_1(const char *fname, const char *path, char *fbuf, size_t size, /* now append the file name */ i = fnlen; if (fspace < i) { - toolong: - PATHNAME_TOO_LONG(); - goto next; + goto toolong; } fspace -= i; memcpy(bp, fname, i + 1); #if defined(DOSISH) if (exe_flag && !ext) { - needs_extension: - for (j = 0; j < sizeof(extension) / sizeof(extension[0]); j++) { - if (fspace < strlen(extension[j])) { - PATHNAME_TOO_LONG(); - continue; - } - strlcpy(bp + i, extension[j], fspace); - if (stat(fbuf, &st) == 0) - return fbuf; - } - goto next; + goto needs_extension; } #endif @@ -284,7 +272,25 @@ dln_find_1(const char *fname, const char *path, char *fbuf, size_t size, if (*ep == '\0') { return NULL; } + continue; + + toolong: + PATHNAME_TOO_LONG(); + goto next; +#if defined(DOSISH) + needs_extension: + for (j = 0; j < sizeof(extension) / sizeof(extension[0]); j++) { + if (fspace < strlen(extension[j])) { + PATHNAME_TOO_LONG(); + continue; + } + strlcpy(bp + i, extension[j], fspace); + if (stat(fbuf, &st) == 0) + return fbuf; + } + goto next; +#endif /* otherwise try the next component in the search path */ } } |