From nobody Wed Apr 17 18:07:07 2024 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4VKTQ43P6bz5HLNv; Wed, 17 Apr 2024 18:07:08 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4VKTQ36Lkgz46x2; Wed, 17 Apr 2024 18:07:07 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1713377227; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4qZWSSPAWJ4BA2wPJRfFVden78haNL3foK+NfSNEti0=; b=xCPt2gKJHuDBuYE0e0ml3kk/Euy1SFziqA1b4pdOSuEg4wFWvajtesdz4zSIqMmMhleT30 PUTyEMzKk8ftRzsqgoWqtHBM0U5yGh7vUMVjA0PCY/sN+HanTTDLZ0Z3uiuZbUI/Lfhqgl guXh034FOzGQf0CUYJ8h3K3LaXluJc9WXHP2WmewW3vuPY1CMPuw0hKLFQljaziGchkEFo wYH1xthN8OpcGVXEkWtLmzKOEAIHXOuqMM58wfWTGCbOExyLt8/aogFdmpjCAQMpi27u3E Un2H8HMAcBYpAk7MCVqCZ9F7vfQD9g7Su4Khzgm2HITcfU3eu8AtQnnOmah4VA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1713377227; a=rsa-sha256; cv=none; b=lzGv/H8UQSHm2N/9+aNi2zaAymdJ5y7PFbnKAR3cOfiSoZCSelsgBo8TjrkoXVsSfxrNL/ aIyoEQnnuswaZ6SzJl84qG6o/M1jDvZ5lTJmiAyu94N2UIcJ+d2qdpnSSzQ+J72TznXpv0 qMPNUG9PrwgikyiPy23peVNhRyEGvX1wVK8WDJ2z++gBUQtv/1U8Wl9XCbBO87XT/CYAaH 7xEyOdU/newsW+OuTMpRzB5gS/vqw/TNZdf5EHGb6sx5+oUZ1PfFEzaeoSNEwKZh5969Lf pO00yyxvS2yQthJhQwf/BXBoGWE0q+pg1tN1yWbtbDwUcIN6Lac98mnRilL/lQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1713377227; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4qZWSSPAWJ4BA2wPJRfFVden78haNL3foK+NfSNEti0=; b=RQO4mG4Jyh6bTnRv319T66pZ2x60Vwu7Y/4/8dbBWB85CxjUoljsqys5Vwm3MxX2zuC0ED N5iuEwnTRM8kHvz6EZPzAmEKAg3dCp2w4TYBdCyLLrGWx/tNAQuVFk9o0HDpxbLlbbTMVK BDyrSMqaq+qzIM8Zr5Y2pg7xJYYbHtyt0lvQm6IxReznriJZfXnnMNW8SguY/M/5kzw1S6 UFDH7A7Ugc3LHLpeD2BHr39oPsCQj/fiGMmCJJzEZ/gTA0OscGcQP4We7s7YvgyBFE2fUB YEblJmEQRX5bkuRHondTLF0/Oss0fJ7mTeT2BUe4s/XEvkoRWsUaKhmPHG+BSw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4VKTQ35wX0zcHp; Wed, 17 Apr 2024 18:07:07 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 43HI77S1062178; Wed, 17 Apr 2024 18:07:07 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 43HI777K062175; Wed, 17 Apr 2024 18:07:07 GMT (envelope-from git) Date: Wed, 17 Apr 2024 18:07:07 GMT Message-Id: <202404171807.43HI777K062175@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: f122045e36dd - main - crunchgen: add --list option List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f122045e36dd009ecdc6b69a6f4b751c4b10b443 Auto-Submitted: auto-generated The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=f122045e36dd009ecdc6b69a6f4b751c4b10b443 commit f122045e36dd009ecdc6b69a6f4b751c4b10b443 Author: Martin Tournoij AuthorDate: 2024-04-17 16:04:27 +0000 Commit: Warner Losh CommitDate: 2024-04-17 18:07:25 +0000 crunchgen: add --list option "bsdbox --list" will print all tools in the binary, one per line. The main use case for this is to make it easier to create links: for t in $(bsdbox --list); do ln -s bsdbox $t done The name --list was taken from busybox. This just adds a new "program" with the name "--list". I don't think we need to do real argument parsing here, and this is also how busybox does it. An additional minor change is that just "bsdbox" will no longer print the binary name itself ("bsdbox" in this case). Before it would do: % bsdbox usage: boxlike ..., where is one of: cp ls mv bsdbox And now just: % bsdbox usage: boxlike ..., where is one of: cp ls mv And just "bsdbox" will also exit with code 0 (and print to stdout) rather than exit with 0 and print to stderr Example output: % ./bsdbox usage: bsdbox program [args ...] bsdbox --list program [args ...] bsdbox combines several programs in one executable. Create a link to this executable with the program name to run that program, or give the program name as the first argument. Currently defined programs: true false tail head uname % ./bsdbox --list true false tail head uname % ./bsdbox uname -a FreeBSD freebsd 13.2-RELEASE-p4 FreeBSD 13.2-RELEASE-p4 GENERIC amd64 % ln -s bsdbox uname % ./uname -a FreeBSD freebsd 13.2-RELEASE-p4 FreeBSD 13.2-RELEASE-p4 GENERIC amd64 Pull Request: https://github.com/freebsd/freebsd-src/pull/894 Signed-off-by: Martin Tournoij Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/894 --- usr.sbin/crunch/crunchgen/crunched_main.c | 60 +++++++++++++++++++++---------- usr.sbin/crunch/crunchgen/crunchgen.c | 10 ++++-- 2 files changed, 49 insertions(+), 21 deletions(-) diff --git a/usr.sbin/crunch/crunchgen/crunched_main.c b/usr.sbin/crunch/crunchgen/crunched_main.c index 7de99b270ac7..a7f072378197 100644 --- a/usr.sbin/crunch/crunchgen/crunched_main.c +++ b/usr.sbin/crunch/crunchgen/crunched_main.c @@ -82,20 +82,21 @@ struct stub { extern const char *__progname; extern struct stub entry_points[]; +extern int num_entry_points; -static void crunched_usage(void); +static void crunched_usage(int); crunched_stub_t crunched_main; +crunched_stub_t crunched_list; static struct stub * find_entry_point(const char *basename) { - struct stub *ep = NULL; - - for (ep = entry_points; ep->name != NULL; ep++) + for (int i = 0; i < num_entry_points; i++) { + struct stub *ep = &entry_points[i]; if (!strcmp(basename, ep->name)) return (ep); - + } return (NULL); } @@ -159,13 +160,14 @@ main(int argc, char **argv, char **envp) } if (basename == NULL || *basename == '\0') - crunched_usage(); + crunched_usage(1); if (ep != NULL) { return ep->f(argc, argv, envp); } else { - fprintf(stderr, "%s: %s not compiled in\n", EXECNAME, basename); - crunched_usage(); + fprintf(stderr, "%s: %s not compiled in\n\n", + EXECNAME, basename); + crunched_usage(1); } } @@ -173,33 +175,53 @@ int crunched_main(int argc, char **argv, char **envp) { if (argc <= 1) - crunched_usage(); + crunched_usage(0); __progname = get_basename(argv[1]); return main(--argc, ++argv, envp); } +int +crunched_list(int argc __unused, char **argv __unused, char **envp __unused) +{ + for (int i = 0; i < num_entry_points - 2; i++) + printf("%s\n", entry_points[i].name); + return (0); +} + static void -crunched_usage(void) +crunched_usage(int code) { int columns, len; - struct stub *ep; - - fprintf(stderr, - "usage: %s ..., where is one of:\n", EXECNAME); + FILE *out = stdout; + if (code > 0) + out = stderr; + + fprintf(out, + "usage: %s program [args ...]\n" + " %s --list\n" + " program [args ...]\n" + "\n" + "%s combines several programs in one executable. Create a link to this\n" + "executable with the program name to run that program, or give the program\n" + "name as the first argument.\n" + "\n" + "Currently defined programs:\n", + EXECNAME, EXECNAME, EXECNAME); columns = 0; - for (ep = entry_points; ep->name != NULL; ep++) { + for (int i = 0; i < num_entry_points - 2; i++) { + struct stub *ep = &entry_points[i]; len = strlen(ep->name) + 1; if (columns + len < 80) columns += len; else { - fprintf(stderr, "\n"); + fprintf(out, "\n"); columns = len; } - fprintf(stderr, " %s", ep->name); + fprintf(out, " %s", ep->name); } - fprintf(stderr, "\n"); - exit(1); + fprintf(out, "\n"); + exit(code); } /* end of crunched_main.c */ diff --git a/usr.sbin/crunch/crunchgen/crunchgen.c b/usr.sbin/crunch/crunchgen/crunchgen.c index 462a13f9c897..065619936aa0 100644 --- a/usr.sbin/crunch/crunchgen/crunchgen.c +++ b/usr.sbin/crunch/crunchgen/crunchgen.c @@ -924,17 +924,23 @@ gen_output_cfile(void) "extern crunched_stub_t _crunched_%s_stub;\n", p->ident); + int n = 2; /* 2 because main and --list are added manually. */ fprintf(outcf, "\nstruct stub entry_points[] = {\n"); for (p = progs; p != NULL; p = p->next) { + n++; fprintf(outcf, "\t{ \"%s\", _crunched_%s_stub },\n", p->name, p->ident); - for (s = p->links; s != NULL; s = s->next) + for (s = p->links; s != NULL; s = s->next) { + n++; fprintf(outcf, "\t{ \"%s\", _crunched_%s_stub },\n", s->str, p->ident); + } } fprintf(outcf, "\t{ EXECNAME, crunched_main },\n"); - fprintf(outcf, "\t{ NULL, NULL }\n};\n"); + fprintf(outcf, "\t{ \"--list\", crunched_list }\n"); + fprintf(outcf, "};\n\n"); + fprintf(outcf, "int num_entry_points = %d;\n", n); fclose(outcf); }