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?


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

Reply via email to