Commit | Line | Data |
---|---|---|
33b78bd6 RM |
1 | #ifdef HAVE_CONFIG_H |
2 | #include <config.h> | |
3 | #endif | |
4 | ||
05abbc42 RS |
5 | /* Cancel substitutions made by config.h for Emacs. */ |
6 | #undef open | |
7 | #undef read | |
8 | #undef write | |
9 | #undef close | |
10 | ||
042c85b8 JB |
11 | #include <stdio.h> |
12 | ||
33b78bd6 RM |
13 | #ifndef O_RDONLY |
14 | #define O_RDONLY 0 | |
15 | #endif | |
16 | ||
17 | ||
042c85b8 JB |
18 | /* Break string in two parts to avoid buggy C compilers that ignore characters |
19 | after nulls in strings. */ | |
20 | ||
21 | char string1[] = "Testing distribution of nonprinting chars:\n\ | |
22 | Should be 0177: \177 Should be 0377: \377 Should be 0212: \212.\n\ | |
23 | Should be 0000: "; | |
24 | ||
25 | char string2[] = ".\n\ | |
26 | This file is read by the `test-distribution' program.\n\ | |
27 | If you change it, you will make that program fail.\n"; | |
28 | ||
29 | char buf[300]; | |
30 | ||
31 | /* Like `read' but keeps trying until it gets SIZE bytes or reaches eof. */ | |
32 | int | |
33 | cool_read (fd, buf, size) | |
34 | int fd; | |
35 | char *buf; | |
36 | int size; | |
37 | { | |
38 | int num, sofar = 0; | |
39 | ||
40 | while (1) | |
41 | { | |
42 | if ((num = read (fd, buf + sofar, size - sofar)) == 0) | |
43 | return sofar; | |
44 | else if (num < 0) | |
45 | return num; | |
46 | sofar += num; | |
47 | } | |
48 | } | |
49 | ||
340ff9de | 50 | int |
d2d92f7a JB |
51 | main (argc, argv) |
52 | int argc; | |
53 | char **argv; | |
042c85b8 | 54 | { |
d2d92f7a | 55 | int fd; |
042c85b8 | 56 | |
d2d92f7a JB |
57 | if (argc != 2) |
58 | { | |
59 | fprintf (stderr, "Usage: %s testfile\n", argv[0]); | |
60 | exit (2); | |
61 | } | |
33b78bd6 | 62 | fd = open (argv[1], O_RDONLY); |
042c85b8 JB |
63 | if (fd < 0) |
64 | { | |
d2d92f7a | 65 | perror (argv[1]); |
042c85b8 JB |
66 | exit (2); |
67 | } | |
68 | if (cool_read (fd, buf, sizeof string1) != sizeof string1 || | |
69 | strcmp (buf, string1) || | |
70 | cool_read (fd, buf, sizeof string2) != sizeof string2 - 1 || | |
71 | strncmp (buf, string2, sizeof string2 - 1)) | |
72 | { | |
d2d92f7a | 73 | fprintf (stderr, "Data in file `%s' has been damaged.\n\ |
042c85b8 | 74 | Most likely this means that many nonprinting characters\n\ |
d2d92f7a JB |
75 | have been corrupted in the files of Emacs, and it will not work.\n", |
76 | argv[1]); | |
042c85b8 JB |
77 | exit (2); |
78 | } | |
79 | close (fd); | |
80 | #ifdef VMS | |
81 | exit (1); /* On VMS, success is 1. */ | |
042c85b8 | 82 | #endif |
340ff9de | 83 | return (0); |
042c85b8 | 84 | } |