(interpreter-mode-alist, auto-mode-alist): Don't alter this here.
[bpt/emacs.git] / lib-src / test-distrib.c
CommitLineData
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
21char string1[] = "Testing distribution of nonprinting chars:\n\
22Should be 0177: \177 Should be 0377: \377 Should be 0212: \212.\n\
23Should be 0000: ";
24
25char string2[] = ".\n\
26This file is read by the `test-distribution' program.\n\
27If you change it, you will make that program fail.\n";
28
29char buf[300];
30
31/* Like `read' but keeps trying until it gets SIZE bytes or reaches eof. */
32int
33cool_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 50int
d2d92f7a
JB
51main (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 74Most likely this means that many nonprinting characters\n\
d2d92f7a
JB
75have 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}