Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 17 May 2015 22:16:14 +1000 (EST)
From:      Ian Smith <smithi@nimnet.asn.au>
To:        freebsd-questions@freebsd.org
Cc:        Trev Roydhouse <trev@sentry.org>
Subject:   Strange return codes from old but good C program
Message-ID:  <20150517204503.V69409@sola.nimnet.asn.au>

next in thread | raw e-mail | index | archive | help
Hi,

I'm hoping someone can help me figure out the behaviour of a C program 
executed repeatedly from a shell invoked by my freepascal program.

If anyone might care to download <http://www.moshier.net/de118i-2.zip>; 
(258071 bytes), unzip it and run 'make', the supplied makefile - a copy 
of unixl.mak - should provide ssystem compiled for long double precision 
maths, just as I wanted, with the following output from gcc from FreeBSD 
4.5 to 9.3-RELEASE.  (If clang has trouble on 10.X, please let me know)

smithi@x200:~/de118i-2 % make
gcc -O2 -c ssystem.c
ssystem.c: In function 'resstate':
ssystem.c:150: warning: incompatible implicit declaration of built-in 
 function 'exit'
ssystem.c: In function 'main':
ssystem.c:180: warning: incompatible implicit declaration of built-in 
 function 'malloc'
ssystem.c:184: warning: incompatible implicit declaration of built-in 
 function 'exit'
ssystem.c:199: warning: incompatible implicit declaration of built-in 
 function 'exit'
ssystem.c:307: warning: incompatible implicit declaration of built-in 
 function 'exit'
gcc -O2 -c adams4.c
gcc -O2 -c runge.c
gcc -O2 -c aconst.c
gcc -O2 -c oblate.c
gcc -O2 -c precess.c
gcc -O2 -c epsiln.c
gcc -O2 -c nut1t.c
gcc -O2 -c zatan2.c
gcc -O2 -c rdnums.c
rdnums.c: In function 'rdnums':
rdnums.c:92: warning: incompatible implicit declaration of built-in 
 function 'exit'
rdnums.c:108: warning: incompatible implicit declaration of built-in 
 function 'exit'
gcc -O2 -c ieee.c
gcc -O2 -c econst.c
gcc -O2 -c mtherr.c
mtherr.c: In function 'mtherr':
mtherr.c:8: warning: incompatible implicit declaration of built-in 
 function 'exit'
gcc -O2 -c findcent.c
gcc -O2 -c reltiv.c
gcc -O2 -c jplmp.c
gcc -O2 -c asinl.c
gcc -O2 -c atanl.c
gcc -O2 -c sinl.c
gcc -O2 -c tanl.c
gcc -O2 -c sqrtl.c
gcc -O2 -c floorl.c
gcc -O2 -c polevll.c
gcc -O2 -o ssystem ssystem.o adams4.o runge.o aconst.o  oblate.o 
 precess.o epsiln.o nut1t.o zatan2.o  rdnums.o ieee.o econst.o mtherr.o 
 findcent.o  reltiv.o jplmp.o  asinl.o atanl.o sinl.o tanl.o sqrtl.o 
 floorl.o polevll.o -lc -lm
smithi@x200:~/de118i-2 %

ssystem runs as well as ever, these warnings indicate no functional 
issues, but they do highlight the author's poor (but unsurprising in 
1993, last updated 2004) choice of return codes both for real errors 
(malloc, file I/O, and maths div by zero, bad args for trig functions 
and such) which mostly exit(1) but some return 0 (!) - but when ending 
successfully it returns _usually_ 22, but sometimes 11, or 10, both seen 
so far, consistently when run with the same (different) parameters.

What's worse is I can't figure out where in ssystem.c any return code 
might be set on completion of main(), which is just declared as:

main()
{

and ends with the last of its results and (accuracy) errors printf()s:

        ii += 6;
        }
#if FPESHOW	# floating point debug, here set to 0
fperem();
#endif
} /* end of main program */

No variables called rc or anysuch .. so what sets these odd retcodes?

I'd be grateful for any clue.  So far I assume any return code > 1 is 
success, so far so good - but it doesn't feel deterministic enough :)

cheers, Ian  (please cc me, I'm subscribed to the digest)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150517204503.V69409>