On Sun, Oct 30, 2022 at 09:30:50PM +0000, Klemens Nanni wrote:
> size(1) output is not padded and uses a single tab between each column
> which often looks ugly:
>
> $ size bsd /usr/lib/libc.so.96.4 `which echo cc`
> text data bss dec hex
> 896234 31208 54664 982106 efc5a /usr/lib/libc.so.96.4
> 106152 11200 12640 129992 1fbc8 /bin/echo
> 84398221 41416 343049 84782686 50dae5e /usr/bin/cc
>
>
> The GNU implementation looks less off:
>
> # pkg_add binutils
> binutils-2.39: ok
>
> $ gsize bsd /usr/lib/libc.so.96.4 `which echo cc`
> text data bss dec hex filename
> 896234 31208 54664 982106 efc5a /usr/lib/libc.so.96.4
> 106152 11200 12640 129992 1fbc8 /bin/echo
> 84398221 41416 343049 84782686 50dae5e /usr/bin/cc
>
> I haven't checked their code, but padding fields to seven chars and
> delimiting with a tab yields their format (modulo "filename" printing):
>
> $ obj/size bsd /usr/lib/libc.so.96.4 `which echo cc`
> text data bss dec hex
> 896234 31208 54664 982106 efc5a /usr/lib/libc.so.96.4
> 106152 11200 12640 129992 1fbc8 /bin/echo
> 84398221 41416 343049 84782686 50dae5e /usr/bin/cc
>
> Big files are still off, but at least fields are now aligned.
>
> Another alternative could be to pad fields to eight chars and delimit
> with a space, causing both small and big files to align nicely whilst
> staying under 80 chars total width with reasonable file names
> (which I left delimited with a tab... coulde be space for consistency):
>
> $ grep %8 nm.c
> printf("%8s %8s %8s %8s %8s\n",
> printf("%8lu %8lu %8lu %8lu %8lx",
> $ obj/size bsd /usr/lib/libc.so.96.4 `which echo cc`
> text data bss dec hex
> 896234 31208 54664 982106 efc5a /usr/lib/libc.so.96.4
> 106152 11200 12640 129992 1fbc8 /bin/echo
> 84398221 41416 343049 84782686 50dae5e /usr/bin/cc
>
> What do others think?
> Diff below switches to the GNU format, keeping tabs in outputs.
>
> One possible concern is scripts parsing size(1) output with anything but
> awk(1), but at least base does not seem to contain Makefiles that depend
> on the exact current format.
Anyone?
More Conservative GNU-format diff reattached below, although I'd be
happy to switch to the better looking 8-spaces padding as seen above...
Index: nm.c
===================================================================
RCS file: /cvs/src/usr.bin/nm/nm.c,v
retrieving revision 1.54
diff -u -p -r1.54 nm.c
--- nm.c 3 Mar 2019 16:07:39 -0000 1.54
+++ nm.c 30 Oct 2022 21:21:17 -0000
@@ -682,11 +682,12 @@ show_file(int count, int warn_fmt, const
if (first) {
first = 0;
- printf("text\tdata\tbss\tdec\thex\n");
+ printf("%8s %8s %8s %8s %8s\n",
+ "text", "data", "bss", "dec", "hex");
}
total = text + data + bss;
- printf("%lu\t%lu\t%lu\t%lu\t%lx",
+ printf("%8lu %8lu %8lu %8lu %8lx",
text, data, bss, total, total);
if (count > 1)
(void)printf("\t%s", name);