git: 263660c061ac - main - bsddialog: import version 0.1
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 28 Jan 2022 08:56:44 UTC
The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=263660c061ac76d449cbca7bdd0db2ecdfad76d9 commit 263660c061ac76d449cbca7bdd0db2ecdfad76d9 Merge: ddf162d1d15f 02db4a1234b3 Author: Alfonso Siciliano <alfsiciliano@gmail.com> AuthorDate: 2022-01-28 08:25:38 +0000 Commit: Baptiste Daroussin <bapt@FreeBSD.org> CommitDate: 2022-01-28 08:56:21 +0000 bsddialog: import version 0.1 Import bsddialog 0.1 Utility and Library, fully refatorized, API stable, manuals completed, easier to maintain and improve. Update deps for new API: add mixedgauge consts, delete __DECONST and add bsddialog_geterror() info to avoid silent errors * tzsetup * kbdmap * distextract Differential Revision: https://reviews.freebsd.org/D34066 contrib/bsddialog/GNUMakefile | 6 +- contrib/bsddialog/LICENSE | 2 +- contrib/bsddialog/Makefile | 25 +- contrib/bsddialog/README.md | 159 +-- contrib/bsddialog/bsddialog.1 | 590 +++++++++- contrib/bsddialog/bsddialog.c | 1152 ++++++++++---------- contrib/bsddialog/examples_library/buildlist.c | 44 - contrib/bsddialog/examples_library/checklist.c | 41 +- contrib/bsddialog/examples_library/compile | 15 +- contrib/bsddialog/examples_library/datebox.c | 18 +- contrib/bsddialog/examples_library/form.c | 34 +- contrib/bsddialog/examples_library/infobox.c | 21 +- contrib/bsddialog/examples_library/menu.c | 38 +- contrib/bsddialog/examples_library/mixedlist.c | 47 +- contrib/bsddialog/examples_library/msgbox.c | 32 +- contrib/bsddialog/examples_library/pause.c | 16 +- contrib/bsddialog/examples_library/radiolist.c | 38 +- contrib/bsddialog/examples_library/rangebox.c | 20 +- contrib/bsddialog/examples_library/sade.c | 56 - contrib/bsddialog/examples_library/theme.c | 57 +- contrib/bsddialog/examples_library/timebox.c | 18 +- contrib/bsddialog/examples_library/treeview.c | 46 - contrib/bsddialog/examples_library/yesno.c | 25 +- contrib/bsddialog/examples_utility/buildlist.sh | 17 - contrib/bsddialog/examples_utility/checklist.sh | 4 +- contrib/bsddialog/examples_utility/form.sh | 12 +- contrib/bsddialog/examples_utility/gauge.sh | 32 +- contrib/bsddialog/examples_utility/infobox.sh | 5 +- contrib/bsddialog/examples_utility/inputbox.sh | 4 +- contrib/bsddialog/examples_utility/menu.sh | 14 +- contrib/bsddialog/examples_utility/mixedform.sh | 8 +- contrib/bsddialog/examples_utility/mixedgauge.sh | 42 +- contrib/bsddialog/examples_utility/msgbox.sh | 4 +- contrib/bsddialog/examples_utility/passwordbox.sh | 2 +- contrib/bsddialog/examples_utility/passwordform.sh | 12 +- contrib/bsddialog/examples_utility/radiolist.sh | 14 +- contrib/bsddialog/examples_utility/treeview.sh | 14 +- contrib/bsddialog/examples_utility/yesno.sh | 4 +- contrib/bsddialog/lib/GNUMakefile | 8 +- contrib/bsddialog/lib/Makefile | 74 +- contrib/bsddialog/lib/barbox.c | 571 +++++----- contrib/bsddialog/lib/bsddialog.3 | 809 +++++++++++--- contrib/bsddialog/lib/bsddialog.h | 182 ++-- contrib/bsddialog/lib/bsddialog_progressview.h | 20 +- contrib/bsddialog/lib/bsddialog_theme.h | 23 +- contrib/bsddialog/lib/formbox.c | 255 ++--- contrib/bsddialog/lib/infobox.c | 93 +- contrib/bsddialog/lib/lib_util.c | 755 ++++++++----- contrib/bsddialog/lib/lib_util.h | 86 +- contrib/bsddialog/lib/libbsddialog.c | 37 +- contrib/bsddialog/lib/menubox.c | 1079 +++++++----------- contrib/bsddialog/lib/messagebox.c | 237 ++-- contrib/bsddialog/lib/textbox.c | 164 ++- contrib/bsddialog/lib/theme.c | 48 +- contrib/bsddialog/lib/timebox.c | 343 +++--- usr.sbin/bsdinstall/distextract/distextract.c | 56 +- usr.sbin/kbdmap/kbdmap.c | 24 +- usr.sbin/tzsetup/tzsetup.c | 11 +- 58 files changed, 4045 insertions(+), 3518 deletions(-) diff --cc contrib/bsddialog/Makefile index 295aa927e4c5,000000000000..2abfb9e27cd7 mode 100644,000000..100644 --- a/contrib/bsddialog/Makefile +++ b/contrib/bsddialog/Makefile @@@ -1,49 -1,0 +1,56 @@@ - # Any copyright is dedicated to the Public Domain, see: ++# PUBLIC DOMAIN - NO WARRANTY, see: +# <http://creativecommons.org/publicdomain/zero/1.0/> +# - # Written by Alfonso Sabato Siciliano ++# Written in 2021 by Alfonso Sabato Siciliano + +OUTPUT= bsddialog +SOURCES= bsddialog.c +OBJECTS= ${SOURCES:.c=.o} +LIBPATH= ${.CURDIR}/lib +LIBBSDDIALOG= ${LIBPATH}/libbsddialog.so + - CFLAGS= -Wall -I${LIBPATH} - LDFLAGS= -Wl,-rpath=${LIBPATH} -L${LIBPATH} -lbsddialog ++CFLAGS+= -I${LIBPATH} -std=gnu99 -Wno-format-zero-length \ ++-fstack-protector-strong -Wsystem-headers -Werror -Wall -Wno-format-y2k -W \ ++-Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \ ++-Wno-uninitialized -Wno-pointer-sign -Wno-empty-body -Wno-string-plus-int \ ++-Wno-unused-const-variable -Wno-tautological-compare -Wno-unused-value \ ++-Wno-parentheses-equality -Wno-unused-function -Wno-enum-conversion \ ++-Wno-unused-local-typedef -Wno-address-of-packed-member -Qunused-arguments ++# `make -DDEBUG` ++.if defined(DEBUG) ++CFLAGS= -g -Wall -I${LIBPATH} ++LIBDEBUG= -DDEBUG ++.endif ++LDFLAGS+= -Wl,-rpath=${LIBPATH} -L${LIBPATH} -lbsddialog + +BINDIR= /usr/local/bin +MAN= ${OUTPUT}.1 +GZIP= gzip -cn +MANDIR= /usr/local/share/man/man1 + +INSTALL= install +RM= rm -f + +all : ${OUTPUT} + +${OUTPUT}: ${LIBBSDDIALOG} ${OBJECTS} + ${CC} ${LDFLAGS} ${OBJECTS} -o ${.PREFIX} + +${LIBBSDDIALOG}: - .if defined(PORTNCURSES) - make -C ${LIBPATH} -DPORTNCURSES - .else - make -C ${LIBPATH} - .endif ++ make -C ${LIBPATH} ${LIBDEBUG} + +.c.o: + ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} + +install: + ${INSTALL} -s -m 555 ${OUTPUT} ${BINDIR} + ${GZIP} ${MAN} > ${MAN}.gz + ${INSTALL} -m 444 ${MAN}.gz ${MANDIR} + +unistall: + ${RM} ${BINDIR}/${OUTPUT} + ${RM} ${MANDIR}/${MAN}.gz + +clean: + make -C ${LIBPATH} clean + ${RM} ${OUTPUT} *.o *~ *.core ${MAN}.gz diff --cc contrib/bsddialog/README.md index 31579f519ab6,000000000000..17af3a0db8e5 mode 100644,000000..100644 --- a/contrib/bsddialog/README.md +++ b/contrib/bsddialog/README.md @@@ -1,167 -1,0 +1,116 @@@ - # BSDDialog ++# BSDDialog 0.1 + - **Work In Progress!** + +This project provides **bsddialog** and **libbsddialog**, an utility and a - library to build scripts and tools with *TUI Widgets*. ++library to build scripts and tools with TUI dialogs and widgets. + - Description: ++ ++## Intro ++ ++Briefly: +<https://www.freebsd.org/status/report-2021-04-2021-06/#_bsddialog_tui_widgets> + ++Utility: ++<https://alfonsosiciliano.gitlab.io/posts/2021-12-07-bsddialog.html> ++ ++Library: ++<https://alfonsosiciliano.gitlab.io/posts/2022-01-16-libbsddialog.html> ++ +Screenshots: +<https://www.flickr.com/photos/alfonsosiciliano/albums/72157720215006074> + + +## Getting Started + +FreeBSD: + +``` +% git clone https://gitlab.com/alfix/bsddialog.git +% cd bsddialog +% make +% ./bsddialog --msgbox "Hello World!" 8 20 +``` + - If you are using XFCE install - [devel/ncurses](https://www.freshports.org/devel/ncurses/) - - ``` - % sudo pkg install ncurses - % git clone https://gitlab.com/alfix/bsddialog.git - % cd bsddialog - % make -DPORTNCURSES - % ./bsddialog --msgbox "Hello World!" 8 20 - ``` - +Output: + +![screenshot](screenshot.png) + + - Examples utility: ++## Utility ++ ++**Dialogs:** ++ ++--checklist, --datebox, --form, --gauge, --inputbox, --menu, --mixedform, ++--mixedgauge, --msgbox, --passwordbox, --passwordform, --pause, --radiolist, ++--rangebox, --textbox, --timebox, --treeview, --yesno. ++ ++**Manual** ++ ++ - [bsddialog(1)](https://alfonsosiciliano.gitlab.io/posts/2022-01-26-manual-bsddialog.html) ++ ++ ++**Examples**: ++ +``` - % ./bsddialog --title msgbox --msgbox "Hello World!" 5 30 - % ./bsddialog --theme default --title msgbox --msgbox "Hello World!" 5 30 - % ./bsddialog --begin-y 2 --title yesno --yesno "Hello World!" 5 30 - % ./bsddialog --ascii-lines --pause "Hello World!" 8 50 5 - % ./bsddialog --checklist "Space to select" 0 0 0 Name1 Desc1 off Name2 Desc2 on Name3 Desc3 off - % ./bsddialog --backtitle "TITLE" --title yesno --hline "bsddialog" --yesno "Hello World!" 5 25 - % ./bsddialog --extra-button --help-button --defaultno --yesno "Hello World!" 0 0 ++% ./bsddialog --backtitle "TITLE" --title msgbox --msgbox "Hello World!" 5 30 ++% ./bsddialog --theme blackwhite --title msgbox --msgbox "Hello World!" 5 30 ++% ./bsddialog --begin-y 2 --default-no --title yesno --yesno "Hello World!" 5 30 ++% ./bsddialog --ascii-lines --pause "Hello World!" 8 50 10 ++% ./bsddialog --checklist "Space to select" 0 0 0 Name1 Desc1 off Name2 Desc2 on ++% ./bsddialog --title yesno --hline "bsddialog" --yesno "Hello World!" 5 25 ++% ./bsddialog --extra-button --help-button --yesno "Hello World!" 0 0 +``` - and ++ ++and [Examples](https://gitlab.com/alfix/bsddialog/-/tree/main/examples_utility) ++in the _Public Domain_ to build new projects: +``` - % sh ./examples_utility/buildlist.sh +% sh ./examples_utility/checklist.sh +% sh ./examples_utility/form.sh +% sh ./examples_utility/gauge.sh +% sh ./examples_utility/infobox.sh +% sh ./examples_utility/inputbox.sh +% sh ./examples_utility/menu.sh +% sh ./examples_utility/mixedform.sh +% sh ./examples_utility/mixedgauge.sh +% sh ./examples_utility/msgbox.sh +% sh ./examples_utility/passwordbox.sh +% sh ./examples_utility/passwordform.sh +% sh ./examples_utility/radiolist.sh +% sh ./examples_utility/treeview.sh +% sh ./examples_utility/yesno.sh +``` + - Examples library: ++## Library ++ ++**API** ++ ++ - [bsddialog.h](https://gitlab.com/alfix/bsddialog/-/blob/main/lib/bsddialog.h) ++ - [bsddialog\_theme.h](https://gitlab.com/alfix/bsddialog/-/blob/main/lib/bsddialog_theme.h) ++ ++ ++**Manual** ++ ++ - [bsddialog(3)](https://alfonsosiciliano.gitlab.io/posts/2022-01-15-manual-libbsddialog.html) ++ ++ ++**Examples**: ++ ++[Examples](https://gitlab.com/alfix/bsddialog/-/tree/main/examples_library) ++in the _Public Domain_ to build new projects: +``` +% cd examples_library +% sh compile - % ./buildlist - % ./compile +% ./datebox +% ./form +% ./infobox +% ./menu +% ./mixedlist +% ./msgbox +% ./pause +% ./radiolist +% ./rangebox - % ./sade +% ./theme +% ./timebox - % ./treeview +% ./yesno +``` - - Use Cases: - - - [portconfig](https://gitlab.com/alfix/portconfig) - - - ## Features - - **Common Options:** - - --ascii-lines, --aspect *ratio* (for infobox, msgbox and yesno), - --backtitle *backtitle*, --begin-x *x* (--begin *y y*), - (--begin *y x*), --cancel-label *string*, -clear (test with multiple widgets), - --colors, --date-format *format*, --default-button *string*, --defaultno, - --default-item *string*, - --exit-label *string*, --extra-button, --extra-label *string*, - --hfile *filename* (for completed widgets), --help, --help-button, - --help-label *string*, --help-status, --help-tags, --hline *string*, --ignore, - --insecure, --item-help, --max-input *size*, --no-cancel, --nocancel, - --no-label *string*, --no-items, --no-lines, --no-ok, - --nook, --no-shadow, --no-tags, --ok-label *string*, --output-fd *fd*, - --output-separator *string*, --print-version, - --print-size (todo move lib -> utility), --quoted (quotes all != dialog), - --print-maxsize, --shadow, --single-quoted (add --quote-with *ch*?), - --separator *string* (alias --output-separator *string*), - --separate-output (rename --separate-output-withnl?), --sleep *secs*, --stderr, - --stdout, --theme *string* ("bsddialog", "dialog", "blackwhite"), - --time-format *format*, --title *title*, --version, --yes-label *string*. - - **Widgets:** + - infobox (do not clear the screen), msgbox, - yesno (dialog renames "yes/no" -> "ok/cancel" with --extra-button --help-button). - checklist, radiolist, menu, mixedlist, treeview, textbox, mixedgauge, datebox, - timebox, gauge, rangebox, pause. - - - Without resize: - - form, inputbox, mixedform, passwordbox, passwordform. - - - Without autosize, resize, F1: - - buildlist - - - - ## TODO - - - **Common Options:** - - | Option | Status | Note | - | ---------------------------- | ----------- | ------------------------------- | - | --cr-wrap | In progress | text | - | --no-collapse | In progress | text | - | --no-nl-expand | In progress | text | - | --trim | In progress | text | - - - To evaluate / Not planned in the short term / not in bsdinstall: - - --create-rc *file*, --iso-week, --no-mouse, --print-text-only *str h w*, - --print-text-size *str h w*, --reorder, -scrollbar, --separate-widget *string*, - --size-err, --timeout *secs*,--trace *filename*, --visit-items, - --week-start *day*, --keep-tite, --keep-window, --last-key, --no-kill, - --column-separator *string*, --input-fd *fd*, --tab-correct, --tab-len *n* - - - **Widgets:** - - To evaluate / Not planned in the short term: - - tailbox (textbox/fseek), tailboxbg, dselect, fselect, inputmenu, editbox, - calendar (use datebox), prgbox, programbox, progressbox. diff --cc contrib/bsddialog/lib/Makefile index e8f3ab6aae02,000000000000..d9f2ce8ed69b mode 100644,000000..100644 --- a/contrib/bsddialog/lib/Makefile +++ b/contrib/bsddialog/lib/Makefile @@@ -1,76 -1,0 +1,76 @@@ - # Any copyright is dedicated to the Public Domain, see: ++# PUBLIC DOMAIN - NO WARRANTY, see: +# <http://creativecommons.org/publicdomain/zero/1.0/> +# +# Written in 2021 by Alfonso Sabato Siciliano + - VERSION = 0.0.2 ++VERSION = 0.1 +LIBRARY = bsddialog +LIBRARY_SO = lib${LIBRARY:=.so} ++LIBRARY_A = lib${LIBRARY:=.a} +HEADERS = bsddialog.h bsddialog_theme.h bsddialog_progressview.h +SOURCES = barbox.c formbox.c infobox.c libbsddialog.c lib_util.c menubox.c \ + messagebox.c textbox.c theme.c timebox.c - OBJECTS= ${SOURCES:.c=.o} - CFLAGS = -I/usr/local/include -fPIC -Wall -Wextra - LDFLAGS = -fstack-protector-strong -shared -Wl,-x -Wl,--fatal-warnings \ - -Wl,--warn-shared-textrel -Wl,-soname,${LIBRARY_SO}.${VERSION} ++OBJECTS = ${SOURCES:.c=.o} ++CFLAGS += -fPIC -Wall -Wextra ++LDFLAGS += -fstack-protector-strong -shared -Wl,-x -Wl,--fatal-warnings \ ++ -Wl,--warn-shared-textrel -Wl,-soname,${LIBRARY_SO}.${VERSION} \ ++ -L/usr/lib -lformw -lncursesw -ltinfow + +.if defined(DEBUG) +# `make -DDEBUG` - CFLAGS += -g ++CFLAGS = -g -fPIC -Wall -Wextra +.else +CFLAGS += -O2 -pipe -std=gnu99 -Wno-format-zero-length \ + -fstack-protector-strong -Qunused-arguments +.endif + - .if defined(PORTNCURSES) - # PORT ncurses `make -DPORTNCURSES` - CFLAGS += -DPORTNCURSES -I/usr/local/include - LDFLAGS += -L/usr/local/lib -lformw -lncursesw -ltinfow - .else - # BASE ncurses - LDFLAGS += -L/usr/lib -lformw -lncursesw -ltinfow - .endif - - INSTALL_PREFIX=/usr/local ++LOCALBASE = /usr/local +LN = ln -s -f +RM = rm -f +CP = cp +GZIP = gzip -cn +LDCONFIG = /sbin/ldconfig -m - MAN= ${OUTPUT}.3 - GZIP= gzip -cn - MANDIR= /usr/local/share/man/man3 - INSTALL= install - RM= rm -f ++MAN = ${OUTPUT}.3 ++GZIP = gzip -cn ++MANDIR = ${LOCALBASE}/share/man/man3 ++INSTALL = install ++RM = rm -f ++ ++all : man ${LIBRARY} + - #all : man ${LIBRARY} - all : ${LIBRARY} ++${LIBRARY}: ${LIBRARY_SO} ${LIBRARY_A} + - ${LIBRARY}: ${OBJECTS} ++${LIBRARY_SO}.${VERSION}: ${OBJECTS} + ${CC} ${LDFLAGS} ${.ALLSRC} -o ${LIBRARY_SO}.${VERSION} - # LN for devel ++ ++${LIBRARY_SO}: ${LIBRARY_SO}.${VERSION} + ${LN} ${LIBRARY_SO}.${VERSION} ${LIBRARY_SO} + ++${LIBRARY_A}: ${OBJECTS} ++ ${AR} cr ${.TARGET} ${OBJECTS} ++ ${RANLIB} ${.TARGET} ++ +.c.o: + ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} + +man: + ${GZIP} ${LIBRARY}.3 > ${LIBRARY}.3.gz + +clean: - ${RM} ${LIBRARY_SO}* *.o *~ *.gz ++ ${RM} ${LIBRARY_SO}* *.o *~ *.gz ${LIBRARY_A} + + +install: - ${CP} ${LIBRARY}.h ${INSTALL_PREFIX}/include - ${CP} ${LIBRARY_SO}.${VERSION} ${INSTALL_PREFIX}/lib/ - ${LN} ${INSTALL_PREFIX}/lib/${LIBRARY_SO}.${VERSION} ${INSTALL_PREFIX}/lib/${LIBRARY_SO} - ${LDCONFIG} ${INSTALL_PREFIX}/lib - ${CP} ${LIBRARY}.3.gz ${INSTALL_PREFIX}/man/man3/ ++ ${INSTALL} -m 644 ${HEADERS} ${LOCALBASE}/include ++ ${INSTALL} -m 644 -s ${LIBRARY_SO}.${VERSION} ${LOCALBASE}/lib/ ++ ${INSTALL} -l rs ${LOCALBASE}/lib/${LIBRARY_SO}.${VERSION} ${LOCALBASE}/lib/${LIBRARY_SO} ++ ${INSTALL} -m 644 ${LIBRARY_A} ${LOCALBASE}/lib ++ ${LDCONFIG} ${LOCALBASE}/lib ++ ${INSTALL} -m 644 ${LIBRARY}.3.gz ${MNADIR} + +unistall: - ${RM} ${INSTALL_PREFIX}/include/${LIBRARY}.h - ${RM} ${INSTALL_PREFIX}/lib/${LIBRARY_SO} - ${RM} ${INSTALL_PREFIX}/lib/${LIBRARY_SO}.${VERSION} - ${LDCONFIG} ${INSTALL_PREFIX}/lib - ${RM} ${INSTALL_PREFIX}/man/man3/${LIBRARY}.3.gz ++ ${RM} ${LOCALBASE}/include/${LIBRARY}*.h ++ ${RM} ${LOCALBASE}/lib/${LIBRARY_SO} ++ ${RM} ${LOCALBASE}/lib/${LIBRARY_SO}.${VERSION} ++ ${LDCONFIG} ${LOCALBASE}/lib ++ ${RM} ${MANDIR}/${LIBRARY}.3.gz diff --cc usr.sbin/bsdinstall/distextract/distextract.c index df10c299ab7f,000000000000..fa3b52925dff mode 100644,000000..100644 --- a/usr.sbin/bsdinstall/distextract/distextract.c +++ b/usr.sbin/bsdinstall/distextract/distextract.c @@@ -1,334 -1,0 +1,344 @@@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2011 Nathan Whitehorn + * Copyright (c) 2014 Devin Teske <dteske@FreeBSD.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> ++ +#include <archive.h> +#include <ctype.h> +#include <bsddialog.h> +#include <bsddialog_progressview.h> +#include <err.h> +#include <errno.h> +#include <limits.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +/* Data to process */ +static char *distdir = NULL; +static struct archive *archive = NULL; + +/* Function prototypes */ +static void sig_int(int sig); +static int count_files(const char *file); +static int extract_files(struct bsddialog_fileminibar *file); + +#define _errx(...) (bsddialog_end(), errx(__VA_ARGS__)) + +int +main(void) +{ + char *chrootdir; + char *distributions; - unsigned int i; ++ char *path; + 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; + struct bsddialog_conf conf; + struct sigaction act; + char error[PATH_MAX + 512]; + + if ((distributions = getenv("DISTRIBUTIONS")) == NULL) + errx(EXIT_FAILURE, "DISTRIBUTIONS variable is not set"); + if ((distdir = getenv("BSDINSTALL_DISTDIR")) == NULL) + distdir = __DECONST(char *, ""); + + if (bsddialog_init() == BSDDIALOG_ERROR) - errx(EXIT_FAILURE, "Cannot init libbsdialog"); ++ errx(EXIT_FAILURE, "Error libbsdialog: %s", ++ bsddialog_geterror()); + bsddialog_initconf(&conf); - bsddialog_backtitle(&conf, __DECONST(char *, "FreeBSD Installer")); ++ bsddialog_backtitle(&conf, "FreeBSD Installer"); + bsddialog_infobox(&conf, - __DECONST(char *, "Checking distribution archives.\n" - "Please wait..."), 4, 35); ++ "Checking distribution archives.\nPlease wait...", 4, 35); + + /* Parse $DISTRIBUTIONS */ + nminibars = 0; + dists = NULL; + while (*distributions != '\0') { + span = strcspn(distributions, "\t\n\v\f\r "); + if (span < 1) { /* currently on whitespace */ + distributions++; + continue; + } + + /* Allocate a new struct for the distribution */ + dists = realloc(dists, (nminibars + 1) * minibar_size); + if (dists == NULL) + _errx(EXIT_FAILURE, "Out of memory!"); + + /* Set file path */ - if ((dists[nminibars].path = malloc(span + 1)) == NULL) ++ if ((path = malloc(span + 1)) == NULL) + _errx(EXIT_FAILURE, "Out of memory!"); - snprintf(dists[nminibars].path, span + 1, "%s", distributions); - dists[nminibars].path[span] = '\0'; ++ snprintf(path, span + 1, "%s", distributions); ++ path[span] = '\0'; ++ dists[nminibars].path = path; + + /* Set mini bar label */ + dists[nminibars].label = strrchr(dists[nminibars].path, '/'); + if (dists[nminibars].label == NULL) + dists[nminibars].label = dists[nminibars].path; + + /* Set initial length in files (-1 == error) */ + dists[nminibars].size = count_files(dists[nminibars].path); + if (dists[nminibars].size < 0) { + bsddialog_end(); + return (EXIT_FAILURE); + } + - /* Set initial status to pending */ - /* dists[nminibars].status = 10; */ ++ /* Set initial status and implicitly miniperc to pending */ ++ dists[nminibars].status = BSDDIALOG_MG_PENDING; + + /* Set initial read */ + dists[nminibars].read = 0; + + distributions += span; + nminibars += 1; + } + + /* Optionally chdir(2) into $BSDINSTALL_CHROOT */ + chrootdir = getenv("BSDINSTALL_CHROOT"); + if (chrootdir != NULL && chdir(chrootdir) != 0) { + snprintf(error, sizeof(error), + "Could not change to directory %s: %s\n", + chrootdir, strerror(errno)); + conf.title = __DECONST(char *, "Error"); + bsddialog_msgbox(&conf, error, 0, 0); + bsddialog_end(); + return (EXIT_FAILURE); + } + + /* Set cleanup routine for Ctrl-C action */ + act.sa_handler = sig_int; + sigaction(SIGINT, &act, 0); + - conf.title = __DECONST(char *, "Archive Extraction"); ++ conf.title = "Archive Extraction"; ++ conf.auto_minwidth = 40; + pvconf.callback = extract_files; + pvconf.refresh = 1; - pvconf.fmtbottomstr = __DECONST(char *, "%10lli files read @ %'9.1f files/sec."); ++ pvconf.fmtbottomstr = "%10lli files read @ %'9.1f files/sec."; + bsddialog_total_progview = 0; + bsddialog_interruptprogview = bsddialog_abortprogview = false; + retval = bsddialog_progressview(&conf, - __DECONST(char *, "Extracting distribution files..."), 0, 0, &pvconf, nminibars, dists); ++ "\nExtracting distribution files...\n", 0, 0, ++ &pvconf, nminibars, dists); ++ ++ if (retval == BSDDIALOG_ERROR) { ++ fprintf(stderr, "progressview error: %s\n", ++ bsddialog_geterror()); ++ } + + bsddialog_end(); + - for (i=0; i<nminibars; i++) { ++ for (i = 0; i < nminibars; i++) { + if (dists[i].path != NULL) - free(dists[i].path); ++ free(__DECONST(char *, dists[i].path)); + } + if (dists != NULL) + free(dists); + + return (retval); +} + +static void +sig_int(int sig __unused) +{ + bsddialog_interruptprogview = true; +} + +/* + * Returns number of files in archive file. Parses $BSDINSTALL_DISTDIR/MANIFEST + * if it exists, otherwise uses archive(3) to read the archive file. + */ +static int +count_files(const char *file) +{ + static FILE *manifest = NULL; + char *p; + int file_count; + int retval; + size_t span; + struct archive_entry *entry; + char line[512]; + char path[PATH_MAX]; + char errormsg[PATH_MAX + 512]; + struct bsddialog_conf conf; + + if (manifest == NULL) { + snprintf(path, sizeof(path), "%s/MANIFEST", distdir); + manifest = fopen(path, "r"); + } + + if (manifest != NULL) { + rewind(manifest); + while (fgets(line, sizeof(line), manifest) != NULL) { + p = &line[0]; + span = strcspn(p, "\t") ; + if (span < 1 || strncmp(p, file, span) != 0) + continue; + + /* + * We're at the right manifest line. The file count is + * in the third element + */ + span = strcspn(p += span + (*p != '\0' ? 1 : 0), "\t"); + span = strcspn(p += span + (*p != '\0' ? 1 : 0), "\t"); + if (span > 0) { + file_count = (int)strtol(p, (char **)NULL, 10); + if (file_count == 0 && errno == EINVAL) + continue; + return (file_count); + } + } + } + + /* + * Either no manifest, or manifest didn't mention this archive. + * Use archive(3) to read the archive, counting files within. + */ + bsddialog_initconf(&conf); + if ((archive = archive_read_new()) == NULL) { + snprintf(errormsg, sizeof(errormsg), + "Error: %s\n", archive_error_string(NULL)); - conf.title = __DECONST(char *, "Extract Error"); ++ conf.title = "Extract Error"; + bsddialog_msgbox(&conf, errormsg, 0, 0); + return (-1); + } + archive_read_support_format_all(archive); + archive_read_support_filter_all(archive); + snprintf(path, sizeof(path), "%s/%s", distdir, file); + retval = archive_read_open_filename(archive, path, 4096); + if (retval != ARCHIVE_OK) { + snprintf(errormsg, sizeof(errormsg), + "Error while extracting %s: %s\n", file, + archive_error_string(archive)); - conf.title = __DECONST(char *, "Extract Error"); ++ conf.title = "Extract Error"; + bsddialog_msgbox(&conf, errormsg, 0, 0); + archive = NULL; + return (-1); + } + + file_count = 0; + while (archive_read_next_header(archive, &entry) == ARCHIVE_OK) + file_count++; + archive_read_free(archive); + archive = NULL; + + return (file_count); +} + +static int +extract_files(struct bsddialog_fileminibar *file) +{ + int retval; + struct archive_entry *entry; + char path[PATH_MAX]; + char errormsg[PATH_MAX + 512]; + struct bsddialog_conf conf; + + bsddialog_initconf(&conf); + + /* Open the archive if necessary */ + if (archive == NULL) { + if ((archive = archive_read_new()) == NULL) { + snprintf(errormsg, sizeof(errormsg), + "Error: %s\n", archive_error_string(NULL)); - conf.title = __DECONST(char *, "Extract Error"); ++ conf.title = "Extract Error"; + bsddialog_msgbox(&conf, errormsg, 0, 0); + bsddialog_abortprogview = true; + return (-1); + } + archive_read_support_format_all(archive); + archive_read_support_filter_all(archive); + snprintf(path, sizeof(path), "%s/%s", distdir, file->path); + retval = archive_read_open_filename(archive, path, 4096); + if (retval != 0) { + snprintf(errormsg, sizeof(errormsg), + "Error opening %s: %s\n", file->label, + archive_error_string(archive)); - conf.title = __DECONST(char *, "Extract Error"); ++ conf.title = "Extract Error"; + bsddialog_msgbox(&conf, errormsg, 0, 0); - file->status = 1; /* Failed */ ++ file->status = BSDDIALOG_MG_FAILED; + bsddialog_abortprogview = true; + return (-1); + } + } + + /* Read the next archive header */ + retval = archive_read_next_header(archive, &entry); + + /* If that went well, perform the extraction */ + if (retval == ARCHIVE_OK) + retval = archive_read_extract(archive, entry, + ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_OWNER | + ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_ACL | + ARCHIVE_EXTRACT_XATTR | ARCHIVE_EXTRACT_FFLAGS); + + /* Test for either EOF or error */ + if (retval == ARCHIVE_EOF) { + archive_read_free(archive); + archive = NULL; - file->status = 5; /*Done*/; ++ file->status = BSDDIALOG_MG_DONE; /*Done*/; + return (100); + } else if (retval != ARCHIVE_OK && + !(retval == ARCHIVE_WARN && + strcmp(archive_error_string(archive), "Can't restore time") == 0)) { + /* + * Print any warning/error messages except inability to set + * ctime/mtime, which is not fatal, or even interesting, + * for our purposes. Would be nice if this were a libarchive + * option. + */ + snprintf(errormsg, sizeof(errormsg), + "Error while extracting %s: %s\n", file->label, + archive_error_string(archive)); - conf.title = __DECONST(char *, "Extract Error"); ++ conf.title = "Extract Error"; + bsddialog_msgbox(&conf, errormsg, 0, 0); - file->status = 1; /* Failed */ ++ file->status = BSDDIALOG_MG_FAILED; /* Failed */ + bsddialog_abortprogview = true; + return (-1); + } + + bsddialog_total_progview++; + file->read++; + + /* Calculate [overall] percentage of completion (if possible) */ + if (file->size >= 0) + return (file->read * 100 / file->size); + else + return (-1); +} diff --cc usr.sbin/kbdmap/kbdmap.c index ef6e4812a3fc,000000000000..a11956b682ee mode 100644,000000..100644 --- a/usr.sbin/kbdmap/kbdmap.c +++ b/usr.sbin/kbdmap/kbdmap.c @@@ -1,859 -1,0 +1,865 @@@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2002 Jonathan Belson <jon@witchspace.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> +#include <sys/queue.h> +#include <sys/sysctl.h> + +#include <assert.h> +#include <bsddialog.h> +#include <ctype.h> +#include <dirent.h> +#include <limits.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stringlist.h> +#include <unistd.h> + +#include "kbdmap.h" + + +static const char *lang_default = DEFAULT_LANG; +static const char *font; +static const char *lang; +static const char *program; +static const char *keymapdir = DEFAULT_VT_KEYMAP_DIR; +static const char *fontdir = DEFAULT_VT_FONT_DIR; +static const char *font_default = DEFAULT_VT_FONT; +static const char *sysconfig = DEFAULT_SYSCONFIG; +static const char *font_current; +static const char *dir; +static const char *menu = ""; +static const char *title = "Keyboard Menu"; + +static int x11; +static int using_vt; +static int show; +static int verbose; +static int print; + + +struct keymap { + char *desc; + char *keym; + int mark; + SLIST_ENTRY(keymap) entries; +}; +static SLIST_HEAD(slisthead, keymap) head = SLIST_HEAD_INITIALIZER(head); + + +/* + * Get keymap entry for 'key', or NULL of not found + */ +static struct keymap * +get_keymap(const char *key) +{ + struct keymap *km; + + SLIST_FOREACH(km, &head, entries) + if (!strcmp(km->keym, key)) + return km; + + return NULL; +} + +/* + * Count the number of keymaps we found + */ +static int +get_num_keymaps(void) +{ + struct keymap *km; + int count = 0; + + SLIST_FOREACH(km, &head, entries) + count++; + *** 1803 LINES SKIPPED ***