git: dd8ca6b27f69 - main - distextract: simply code by using strsep(3)
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 28 Jan 2022 09:07:52 UTC
The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=dd8ca6b27f69f841ab2e0f1424fe766034469205 commit dd8ca6b27f69f841ab2e0f1424fe766034469205 Author: Baptiste Daroussin <bapt@FreeBSD.org> AuthorDate: 2022-01-28 09:06:55 +0000 Commit: Baptiste Daroussin <bapt@FreeBSD.org> CommitDate: 2022-01-28 09:06:55 +0000 distextract: simply code by using strsep(3) --- usr.sbin/bsdinstall/distextract/distextract.c | 28 ++++++++------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/usr.sbin/bsdinstall/distextract/distextract.c b/usr.sbin/bsdinstall/distextract/distextract.c index fa3b52925dff..81931e7cf50d 100644 --- a/usr.sbin/bsdinstall/distextract/distextract.c +++ b/usr.sbin/bsdinstall/distextract/distextract.c @@ -61,11 +61,9 @@ main(void) { char *chrootdir; char *distributions; - char *path; + char *distribs, *distrib; int retval; - unsigned int i; size_t minibar_size = sizeof(struct bsddialog_fileminibar); - size_t span; unsigned int nminibars; struct bsddialog_fileminibar *dists; struct bsddialog_progviewconf pvconf; @@ -77,6 +75,8 @@ main(void) errx(EXIT_FAILURE, "DISTRIBUTIONS variable is not set"); if ((distdir = getenv("BSDINSTALL_DISTDIR")) == NULL) distdir = __DECONST(char *, ""); + if ((distribs = strdup(distributions)) == NULL) + errx(EXIT_FAILURE, "memory error"); if (bsddialog_init() == BSDDIALOG_ERROR) errx(EXIT_FAILURE, "Error libbsdialog: %s", @@ -89,12 +89,9 @@ main(void) /* Parse $DISTRIBUTIONS */ nminibars = 0; dists = NULL; - while (*distributions != '\0') { - span = strcspn(distributions, "\t\n\v\f\r "); - if (span < 1) { /* currently on whitespace */ - distributions++; + while ((distrib = strsep(&distribs, "\t\n\v\f\r ")) != NULL) { + if (strlen(distrib) == 0) continue; - } /* Allocate a new struct for the distribution */ dists = realloc(dists, (nminibars + 1) * minibar_size); @@ -102,11 +99,7 @@ main(void) _errx(EXIT_FAILURE, "Out of memory!"); /* Set file path */ - if ((path = malloc(span + 1)) == NULL) - _errx(EXIT_FAILURE, "Out of memory!"); - snprintf(path, span + 1, "%s", distributions); - path[span] = '\0'; - dists[nminibars].path = path; + dists[nminibars].path = distrib; /* Set mini bar label */ dists[nminibars].label = strrchr(dists[nminibars].path, '/'); @@ -126,7 +119,6 @@ main(void) /* Set initial read */ dists[nminibars].read = 0; - distributions += span; nminibars += 1; } @@ -164,12 +156,8 @@ main(void) bsddialog_end(); - for (i = 0; i < nminibars; i++) { - if (dists[i].path != NULL) - free(__DECONST(char *, dists[i].path)); - } - if (dists != NULL) - free(dists); + free(distribs); + free(dists); return (retval); }