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