1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
_debug_info = 1; () = evalfile ("inc.sl");
print ("Testing POSIX I/O routines...");
static define open_tmp_file (fileptr, flags, mode)
{
variable n;
variable file, fd;
variable fmt;
@fileptr = NULL;
fmt = "tmp-xxx.%03d"; % I need something that works on an 8+3 filesystem
n = -1;
while (n < 999)
{
n++;
file = sprintf (fmt, n);
if (NULL != stat_file (file))
continue;
fd = open (file, flags, 0777);
if (fd != NULL)
{
@fileptr = file;
return fd;
}
}
failed ("Unable to open a tmp file");
}
define run_tests (some_text)
{
variable file, fd, fp;
variable new_text, nbytes, len;
variable pos;
fd = open_tmp_file (&file, O_WRONLY|O_BINARY|O_CREAT, 0777);
if (-1 == write (fd, some_text))
failed ("write");
fp = fdopen (fd, "wb");
if (fp == NULL)
failed ("fdopen");
if (isatty (fileno (fp)))
failed ("isatty (fileno)");
if (-1 == close (fd))
failed ("close");
fd = open (file, O_RDONLY|O_BINARY);
if (fd == NULL) failed ("fopen existing");
len = bstrlen (some_text);
nbytes = read (fd, &new_text, len);
if (nbytes == -1)
failed ("read");
if ((nbytes != len)
or (some_text != new_text))
failed ("read");
if (0 != read (fd, &new_text, 1))
failed ("read at EOF");
if (bstrlen (new_text))
failed ("read at EOF");
if (-1 == close (fd)) failed ("close after tests");
variable st = stat_file (file);
() = st.st_mode; % see if stat_file returned the right struct
() = remove (file);
if (stat_file (file) != NULL) failed ("remove");
}
run_tests ("ABCDEFG");
run_tests ("A\000BC\000\n\n\n");
variable fd = open ("/dev/tty", O_RDONLY);
if (fd != NULL)
{
if (0 == isatty (fd))
failed ("isatty");
}
fd = 0;
print ("Ok\n");
exit (0);
|