fix(dracut-install): allow globbing for multiple sources

Signed-off-by: Zoltán Böszörményi <zboszor@pr.hu>
master
Zoltán Böszörményi 2021-02-02 09:42:37 +01:00 committed by Jóhann B. Guðmundsson
parent c409108b04
commit ddcdee9147
1 changed files with 24 additions and 2 deletions

View File

@ -1318,8 +1318,30 @@ static int install_all(int argc, char **argv)
}

} else {
_cleanup_free_ char *dest = strdup(argv[i]);
ret = dracut_install(argv[i], dest, arg_createdir, arg_resolvedeps, true);
if (strchr(argv[i], '*') == NULL) {
_cleanup_free_ char *dest = strdup(argv[i]);
ret = dracut_install(argv[i], dest, arg_createdir, arg_resolvedeps, true);
} else {
_cleanup_free_ char *realsrc = NULL;
_cleanup_globfree_ glob_t globbuf;

ret = asprintf(&realsrc, "%s%s", sysrootdir ? sysrootdir : "", argv[i]);
if (ret < 0) {
log_error("Out of memory!");
exit(EXIT_FAILURE);
}

ret = glob(realsrc, 0, NULL, &globbuf);
if (ret == 0) {
int j;

for (j = 0; j < globbuf.gl_pathc; j++) {
char *dest = strdup(globbuf.gl_pathv[j] + sysrootdirlen);
ret |= dracut_install(globbuf.gl_pathv[j] + sysrootdirlen, dest, arg_createdir, arg_resolvedeps, true);
free(dest);
}
}
}
}

if ((ret != 0) && (!arg_optional)) {