зеркало из https://github.com/github/ruby.git
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.
This commit is contained in:
Родитель
99073f49bf
Коммит
5e96054519
34
dln_find.c
34
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 */
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче