10
|
1 #include <stdio.h>
|
|
2
|
|
3 /* Break string in two parts to avoid buggy C compilers that ignore characters
|
|
4 after nulls in strings. */
|
|
5
|
|
6 char string1[] = "Testing distribution of nonprinting chars:\n\
|
|
7 Should be 0177: \177 Should be 0377: \377 Should be 0212: \212.\n\
|
|
8 Should be 0000: ";
|
|
9
|
|
10 char string2[] = ".\n\
|
|
11 This file is read by the `test-distribution' program.\n\
|
|
12 If you change it, you will make that program fail.\n";
|
|
13
|
|
14 char buf[300];
|
|
15
|
|
16 /* Like `read' but keeps trying until it gets SIZE bytes or reaches eof. */
|
|
17 int
|
|
18 cool_read (fd, buf, size)
|
|
19 int fd;
|
|
20 char *buf;
|
|
21 int size;
|
|
22 {
|
|
23 int num, sofar = 0;
|
|
24
|
|
25 while (1)
|
|
26 {
|
|
27 if ((num = read (fd, buf + sofar, size - sofar)) == 0)
|
|
28 return sofar;
|
|
29 else if (num < 0)
|
|
30 return num;
|
|
31 sofar += num;
|
|
32 }
|
|
33 }
|
|
34
|
|
35 main ()
|
|
36 {
|
|
37 int fd = open ("testfile", 0);
|
|
38
|
|
39 if (fd < 0)
|
|
40 {
|
|
41 perror ("opening `testfile'");
|
|
42 exit (2);
|
|
43 }
|
|
44 if (cool_read (fd, buf, sizeof string1) != sizeof string1 ||
|
|
45 strcmp (buf, string1) ||
|
|
46 cool_read (fd, buf, sizeof string2) != sizeof string2 - 1 ||
|
|
47 strncmp (buf, string2, sizeof string2 - 1))
|
|
48 {
|
|
49 fprintf (stderr, "Data in file `testfile' has been damaged.\n\
|
|
50 Most likely this means that many nonprinting characters\n\
|
|
51 have been corrupted in the files of Emacs, and it will not work.\n");
|
|
52 exit (2);
|
|
53 }
|
|
54 close (fd);
|
|
55 #ifdef VMS
|
|
56 exit (1); /* On VMS, success is 1. */
|
|
57 #else
|
|
58 exit (0);
|
|
59 #endif
|
|
60 }
|