On Mon, Sep 04, 2023 at 01:54:18PM +0100, Jeremie Courreges-Anglas wrote:
>
> Two code sets are currently guarded with #ifdef SMALL in pax(1) and
> tar(1): reading 'pax' format extended headers, and identifying various
> compressed formats for user-friendliness. As noted by Caspar, the SMALL
> path isn't currently used on the install media. I've been confused by
> this twice already...
>
> Here's a proposal:
>
> 1. always compile in read support for the 'pax' format extended headers.
> The ustar format is limited and being able to restore archives using
> the pax format in any situation would be nice. Especially if we
> switch to writing out pax format archives by default one day.
> We're definitely not there yet.
>
> 2. actually use -DSMALL to save a bit of storage on the install media.
> The behavior is still sane, tar(1) warns that it doesn't recognize
> a compressed archive, seeks through it trying to look a tar header,
> and eventually gives up. Here's the tiny size change on amd64:
> shannon /usr/src/distrib/special/pax$ size tar.o options.o pax obj/tar.o
> obj/options.o obj/pax
> text data bss dec hex
> 6821 0 40 6861 1acd tar.o
> 7195 1084 32 8311 2077 options.o
> 390495 19024 85392 494911 78d3f pax
> 6821 0 40 6861 1acd obj/tar.o
> 6878 1084 32 7994 1f3a obj/options.o
> 390175 19024 85392 494591 78bff obj/pax
>
> I don't expect any regression on the ramdisks but a make release is
> running just in case.
>
> ok?
Thanks a lot.
OK caspar@ provided that Todd and Philip don't object.
Caspar
>
>
> Index: bin/pax/tar.c
> ===================================================================
> RCS file: /home/cvs/src/bin/pax/tar.c,v
> retrieving revision 1.72
> diff -u -p -r1.72 tar.c
> --- bin/pax/tar.c 19 Aug 2023 04:21:05 -0000 1.72
> +++ bin/pax/tar.c 4 Sep 2023 12:19:39 -0000
> @@ -59,9 +59,7 @@ static u_long tar_chksm(char *, int);
> static char *name_split(char *, int);
> static int ul_oct(u_long, char *, int, int);
> static int ull_oct(unsigned long long, char *, int, int);
> -#ifndef SMALL
> static int rd_xheader(ARCHD *arcn, int, off_t);
> -#endif
>
> static uid_t uid_nobody;
> static uid_t uid_warn;
> @@ -721,14 +719,11 @@ ustar_rd(ARCHD *arcn, char *buf)
> if (ustar_id(buf, BLKMULT) < 0)
> return(-1);
>
> -#ifndef SMALL
> reset:
> -#endif
> memset(arcn, 0, sizeof(*arcn));
> arcn->org_name = arcn->name;
> arcn->sb.st_nlink = 1;
>
> -#ifndef SMALL
> /* Process Extended headers. */
> if (hd->typeflag == XHDRTYPE || hd->typeflag == GHDRTYPE) {
> if (rd_xheader(arcn, hd->typeflag == GHDRTYPE,
> @@ -745,7 +740,6 @@ reset:
> if (hd->typeflag == XHDRTYPE || hd->typeflag == GHDRTYPE)
> goto reset;
> }
> -#endif
>
> if (!arcn->nlen) {
> /*
> @@ -1190,8 +1184,6 @@ expandname(char *buf, size_t len, char *
> return(nlen);
> }
>
> -#ifndef SMALL
> -
> /* shortest possible extended record: "5 a=\n" */
> #define MINXHDRSZ 5
>
> @@ -1331,4 +1323,3 @@ rd_xheader(ARCHD *arcn, int global, off_
> return (-1);
> return (ret);
> }
> -#endif
> Index: distrib/special/pax/Makefile
> ===================================================================
> RCS file: /home/cvs/src/distrib/special/pax/Makefile,v
> retrieving revision 1.2
> diff -u -p -r1.2 Makefile
> --- distrib/special/pax/Makefile 13 Sep 2018 16:34:33 -0000 1.2
> +++ distrib/special/pax/Makefile 3 Sep 2023 10:38:17 -0000
> @@ -1,7 +1,7 @@
> # $OpenBSD: Makefile,v 1.2 2018/09/13 16:34:33 sthen Exp $
>
> .PATH: ${.CURDIR}/../../../bin/pax
> -CFLAGS+=-DNOCPIO -I${.CURDIR}/../../../bin/pax
> +CFLAGS+=-DNOCPIO -DSMALL -I${.CURDIR}/../../../bin/pax
>
> PROG= pax
> SRCS= ar_io.c ar_subs.c buf_subs.c file_subs.c ftree.c\
>
>
> --
> jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE