* Updating common/lib * Updating lib/csu * Updating lib/libc * Updating libexec/ld.elf_so * Corrected test on __minix in featuretest to actually follow the meaning of the comment. * Cleaned up _REENTRANT-related defintions. * Disabled -D_REENTRANT for libfetch * Removing some unneeded __NBSD_LIBC defines and tests Change-Id: Ic1394baef74d11b9f86b312f5ff4bbc3cbf72ce2
		
			
				
	
	
		
			139 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/****************************************************************
 | 
						|
 | 
						|
The author of this software is David M. Gay.
 | 
						|
 | 
						|
Copyright (C) 2001 by Lucent Technologies
 | 
						|
All Rights Reserved
 | 
						|
 | 
						|
Permission to use, copy, modify, and distribute this software and
 | 
						|
its documentation for any purpose and without fee is hereby
 | 
						|
granted, provided that the above copyright notice appear in all
 | 
						|
copies and that both that the copyright notice and this
 | 
						|
permission notice and warranty disclaimer appear in supporting
 | 
						|
documentation, and that the name of Lucent or any of its entities
 | 
						|
not be used in advertising or publicity pertaining to
 | 
						|
distribution of the software without specific, written prior
 | 
						|
permission.
 | 
						|
 | 
						|
LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 | 
						|
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
 | 
						|
IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
 | 
						|
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
						|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
 | 
						|
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
 | 
						|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
 | 
						|
THIS SOFTWARE.
 | 
						|
 | 
						|
****************************************************************/
 | 
						|
 | 
						|
/* Please send bug reports to David M. Gay (dmg at acm dot org,
 | 
						|
 * with " at " changed at "@" and " dot " changed to ".").	*/
 | 
						|
 | 
						|
/* Test strtod.  */
 | 
						|
 | 
						|
/* On stdin, read triples: d x y:
 | 
						|
 *	d = decimal string
 | 
						|
 *	x = high-order Hex value expected from strtod
 | 
						|
 *	y = low-order Hex value
 | 
						|
 * Complain about errors.
 | 
						|
 */
 | 
						|
 | 
						|
#include "gdtoa.h"	/* for ULong */
 | 
						|
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <string.h>
 | 
						|
 | 
						|
 static int W0, W1;
 | 
						|
 typedef union {
 | 
						|
		double d;
 | 
						|
		ULong L[2];
 | 
						|
		} U;
 | 
						|
 | 
						|
#define UL (unsigned long)
 | 
						|
 | 
						|
 static int
 | 
						|
process(char *fname, FILE *f)
 | 
						|
{
 | 
						|
	U a, b;
 | 
						|
	char buf[2048];
 | 
						|
	char *s, *s1, *se;
 | 
						|
	int line, n;
 | 
						|
 | 
						|
	line = n = 0;
 | 
						|
 | 
						|
 top:
 | 
						|
	while(fgets(s = buf, sizeof(buf), f)) {
 | 
						|
		line++;
 | 
						|
		while(*s <= ' ')
 | 
						|
			if (!*s++)
 | 
						|
				goto top; /* break 2 */
 | 
						|
		if (*s == '#')
 | 
						|
			continue;
 | 
						|
		while(*s > ' ')
 | 
						|
			s++;
 | 
						|
		/* if (sscanf(s,"\t%lx\t%lx", &a.L[0], &a.L[1]) != 2) */
 | 
						|
		if ((a.L[0] = (ULong)strtoul(s, &s1,16), s1 <= s)
 | 
						|
		 || (a.L[1] = (ULong)strtoul(s1,&se,16), se <= s1)) {
 | 
						|
			printf("Badly formatted line %d of %s\n",
 | 
						|
				line, fname);
 | 
						|
			n++;
 | 
						|
			continue;
 | 
						|
			}
 | 
						|
		b.d = strtod(buf,0);
 | 
						|
		if (b.L[W0] != a.L[0] || b.L[W1] != a.L[1]) {
 | 
						|
			n++;
 | 
						|
			printf("Line %d of %s: got %lx %lx; expected %lx %lx\n",
 | 
						|
				line, fname, UL b.L[W0], UL b.L[W1], UL a.L[0], UL a.L[1]);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	return n;
 | 
						|
	}
 | 
						|
 | 
						|
 int
 | 
						|
main(int argc, char **argv)
 | 
						|
{
 | 
						|
	FILE *f;
 | 
						|
	char *prog, *s;
 | 
						|
	int n, rc;
 | 
						|
	U u;
 | 
						|
 | 
						|
	prog = argv[0];
 | 
						|
	if (argc == 2 && !strcmp(argv[1],"-?")) {
 | 
						|
		fprintf(stderr, "Usage: %s [file [file...]]\n"
 | 
						|
			"\tto read data file(s) of tab-separated triples d x y with\n"
 | 
						|
			"\t\td decimal string\n"
 | 
						|
			"\t\tx = high-order Hex value expected from strtod\n"
 | 
						|
			"\t\ty = low-order Hex value\n"
 | 
						|
			"\tComplain about errors by strtod.\n"
 | 
						|
			"\tIf no files, read triples from stdin.\n",
 | 
						|
			prog);
 | 
						|
		return 0;
 | 
						|
		}
 | 
						|
 | 
						|
	/* determine endian-ness */
 | 
						|
 | 
						|
	u.d = 1.;
 | 
						|
	W0 = u.L[0] == 0;
 | 
						|
	W1 = 1 - W0;
 | 
						|
 | 
						|
	/* test */
 | 
						|
 | 
						|
	n = rc = 0;
 | 
						|
	if (argc <= 1)
 | 
						|
		n = process("<stdin>", stdin);
 | 
						|
	else
 | 
						|
		while((s = *++argv))
 | 
						|
			if ((f = fopen(s,"r"))) {
 | 
						|
				n += process(s, f);
 | 
						|
				fclose(f);
 | 
						|
				}
 | 
						|
			else {
 | 
						|
				rc = 2;
 | 
						|
				fprintf(stderr, "Cannot open %s\n", s);
 | 
						|
				}
 | 
						|
	printf("%d bad conversions\n", n);
 | 
						|
	if (n)
 | 
						|
		rc |= 1;
 | 
						|
	return rc;
 | 
						|
	}
 |