home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 2 / FFMCD02.bin / useful / lib / emacs / 18.59 / etc / test-distrib.c < prev    next >
C/C++ Source or Header  |  1987-05-22  |  1KB  |  61 lines

  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. }
  61.