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:
卜部昌平 2020-06-12 14:24:41 +09:00
Родитель 99073f49bf
Коммит 5e96054519
1 изменённых файлов: 20 добавлений и 14 удалений

Просмотреть файл

@ -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 */
}
}