xref: /onnv-gate/usr/src/lib/libast/common/features/sfio (revision 4887:feebf9260c2e)
1*4887Schinref	-D_def_map_ast=1
2*4887Schinhdr	float,floatingpoint,math,values
3*4887Schinsys	filio,ioctl
4*4887Schinlib	qfrexp,qldexp
5*4887Schinkey	signed
6*4887Schin
7*4887Schintst	tmp_rmfail note{ open files cannot be removed }end execute{
8*4887Schin	#include <string.h>
9*4887Schin	#include <time.h>
10*4887Schin	int
11*4887Schin	main()
12*4887Schin	{
13*4887Schin	#if !_UWIN
14*4887Schin		int		n;
15*4887Schin		char*		s;
16*4887Schin		FILE*		fr;
17*4887Schin		FILE*		fw;
18*4887Schin		char		file[16];
19*4887Schin		static char	data[] = "0123456789";
20*4887Schin		s = file;
21*4887Schin		*s++ = '1';
22*4887Schin		*s++ = 'F';
23*4887Schin		*s++ = 'F';
24*4887Schin		*s++ = '3';
25*4887Schin		n = (int)time(0);
26*4887Schin		*s++ = (n & 0xF) + 'A';
27*4887Schin		*s++ = ((n >> 4) & 0xF) + 'A';
28*4887Schin		*s++ = ((n >> 8) & 0xF) + 'A';
29*4887Schin		*s++ = ((n >> 12) & 0xF) + 'A';
30*4887Schin		*s++ = '.';
31*4887Schin		*s++ = 'T';
32*4887Schin		*s++ = 'M';
33*4887Schin		*s++ = 'P';
34*4887Schin		*s = 0;
35*4887Schin		remove(file);
36*4887Schin		if (!(fw = fopen(file, "w")))
37*4887Schin			return 0;
38*4887Schin		if (!(fr = fopen(file, "r")))
39*4887Schin		{
40*4887Schin			fclose(fw);
41*4887Schin			remove(file);
42*4887Schin			return 0;
43*4887Schin		}
44*4887Schin		if (remove(file) < 0)
45*4887Schin		{
46*4887Schin			fclose(fr);
47*4887Schin			fclose(fw);
48*4887Schin			remove(file);
49*4887Schin			return 0;
50*4887Schin		}
51*4887Schin		if (fwrite(data, sizeof(data), 1, fw) != 1)
52*4887Schin			return 0;
53*4887Schin		fclose(fw);
54*4887Schin		if (fread(file, sizeof(data), 1, fr) != 1)
55*4887Schin			return 0;
56*4887Schin		fclose(fr);
57*4887Schin		if (strcmp(file, data) != 0)
58*4887Schin			return 0;
59*4887Schin	#endif
60*4887Schin		return 1;
61*4887Schin	}
62*4887Schin}end
63*4887Schin
64*4887Schinmore void_int note{ voidptr is larger than int }end execute{
65*4887Schin	int
66*4887Schin	main()
67*4887Schin	{
68*4887Schin		return sizeof(char*) > sizeof(int) ? 0 : 1;
69*4887Schin	}
70*4887Schin}end
71*4887Schin
72*4887Schinmore long_int note{ long is larger than int }end execute{
73*4887Schin	int
74*4887Schin	main()
75*4887Schin	{
76*4887Schin		return sizeof(long) > sizeof(int) ? 0 : 1;
77*4887Schin	}
78*4887Schin}end
79*4887Schin
80*4887Schintst	vax_asm note{ register layout ok for vax string operations }end execute{
81*4887Schin	int
82*4887Schin	main()
83*4887Schin	{
84*4887Schin	#ifndef vax
85*4887Schin		return absurd = -1;
86*4887Schin	#else
87*4887Schin		register int	r11, r10, r9, r8, r7, r6;
88*4887Schin		r11 = r10 = r9 = r8 = r7 = r6 = -1;
89*4887Schin		asm("clrw	r11");
90*4887Schin		asm("clrw	r10");
91*4887Schin		asm("clrw	r9");
92*4887Schin		asm("clrw	r8");
93*4887Schin		asm("clrw	r7");
94*4887Schin		asm("clrw	r6");
95*4887Schin		if(sizeof(int) != sizeof(char*) || r11 || r10 || r9 || r8 || r7 || r6 )
96*4887Schin			return -1;
97*4887Schin		return 0;
98*4887Schin	#endif
99*4887Schin	}
100*4887Schin}end
101*4887Schin
102*4887Schintst	lib_cvt note{ native floating point conversions ok }end link{
103*4887Schin	_BEGIN_EXTERNS_
104*4887Schin	extern char* ecvt _ARG_((double, int, int*, int*));
105*4887Schin	extern char* fcvt _ARG_((double, int, int*, int*));
106*4887Schin	extern double strtod _ARG_((const char*, char**));
107*4887Schin	_END_EXTERNS_
108*4887Schin	int
109*4887Schin	main()
110*4887Schin	{
111*4887Schin		ecvt(0.0, 0, 0, 0);
112*4887Schin		fcvt(0.0, 0, 0, 0);
113*4887Schin		strtod(0, 0);
114*4887Schin		return 0;
115*4887Schin	}
116*4887Schin}end
117*4887Schin
118*4887Schintst	xopen_stdio note{ Stdio fseek/fflush are X/Open-compliant }end execute{
119*4887Schin	#define Failed(file)	(unlink(file),1)
120*4887Schin	int
121*4887Schin	main(argc, argv)
122*4887Schin	int	argc;
123*4887Schin	char**	argv;
124*4887Schin	{	FILE	*f1, *f2;
125*4887Schin		char	file[1024], buf[1024], *f, *t;
126*4887Schin		int	i, fd;
127*4887Schin
128*4887Schin		/* create file */
129*4887Schin		for(f = argv[0], t = file; (*t = *f++) != 0; )
130*4887Schin			t++;
131*4887Schin		*t++ = '.'; *t++ = 'D'; *t++ = 0;
132*4887Schin		if((fd = creat(file,0666)) < 0)
133*4887Schin			return 1;
134*4887Schin
135*4887Schin		for (i = 0; i < sizeof(buf); ++i)
136*4887Schin			buf[i] = '0' + (i%10);
137*4887Schin		for (i = 0; i < 16; ++i)
138*4887Schin			if (write(fd,buf,sizeof(buf)) != sizeof(buf))
139*4887Schin				return Failed(file);
140*4887Schin		close(fd);
141*4887Schin
142*4887Schin		if(!(f1 = fopen(file,"r+")) ||
143*4887Schin		   (fd = dup(fileno(f1))) < 0 ||
144*4887Schin		   !(f2 = fdopen(fd,"r+")) )
145*4887Schin			return Failed(file);
146*4887Schin
147*4887Schin		if(fread(buf, 1, 7, f2) != 7 || ftell(f2) != 7)
148*4887Schin			return Failed(file);
149*4887Schin
150*4887Schin		if(fseek(f1, 1010, 0) < 0 || ftell(f1) != 1010)
151*4887Schin			return Failed(file);
152*4887Schin
153*4887Schin		fflush(f2); /* this should set the seek location to 1010 */
154*4887Schin		if(ftell(f2) != 1010)
155*4887Schin			return Failed(file);
156*4887Schin
157*4887Schin		unlink(file);
158*4887Schin		return 0;
159*4887Schin	}
160*4887Schin}end
161