On Tue, Nov 28, 2017 at 9:21 AM, Nemo <cym224(a)gmail.com> wrote:
On 19 October 2017 at 10:52, Ron Natalie
<ron(a)ronnatalie.com> wrote:
My favorite reduction to absurdity was /bin/true.
Someone decided we
needed shell commands for true and false. Easy enough to add a script
that
said "exit 0" or exit 1" as its
only line.
Then someone realized that the "exit 0" in /bin true was superfluous, the
default return was 0. /bin/true turned into an empty, yet executable,
file.
Then the lawyers got involved. We got a version of a packaged UNIX (I
think it was Interactive Systems). Every shell script got twelve
lines of
copyright/license boilerplate. Including /bin
true.
The file had nothing but useless comment in it.
A late comment: I seem to recall this boilerplate in earlier Solaris
but Solaris 10 has an executable. So I looked at the OpenSolaris
source out of curiosity and found this.
[CDDL stuff here]
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include <unistd.h>
/*
* Exit with a zero value as quickly as possible.
*/
int
main(void)
{
_exit(0);
/*NOTREACHED*/
return (0);
}
Ah, the tyranny of static analysis tools... _exit(0) should be marked such
that the tools know it does not return. This means the /*NOTREACHED*/ isn't
needed. And since there's no real exit path out of main, the return (0) is
equally bogus (because main can't return). Yet lint and other tools have
ushered in this insanity.
I'm glad to see these days that these sorts of lame false positives have
been eliminated...
Then again _exit(0) is a useless optimization. It saves three closes for
files that are bound to be closed at image tear down. If it really is that
important (absent data, my gut tells me it isn't), then this should be
written in assembler. FreeBSD/amd64 would be something like:
#include <sys/syscall.h>
#include <machine/asm.h>
ENTRY(_start)
xor %r10, %r10
mov $SYS_exit, %eax
syscall
END(_start)
This some small hacks to each arch's SYS.h in libc, this could even be
smaller and MI :). this is tiny:
-rwxrwxr-x 1 imp imp 672 Nov 28 10:18 true
text data bss dec hex filename
10 0 0 10 0xa true
Contrast that with FreeBSD's /usr/bin/true:
-r-xr-xr-x 1 root wheel 4624 Nov 20 11:56 /usr/bin/true
text data bss dec hex filename
1540 481 8 2029 0x7ed /usr/bin/true
which is little more than return(0), but also has a fair amount of
copyright and SCCS data.
Warner