1/* test-distrib.c --- testing distribution of nonprinting chars 2 3 Copyright (C) 1987, 1993, 1994, 1995, 1999, 2001, 2002, 2003, 4 2004, 2005, 2006, 2007 Free Software Foundation, Inc. 5 6 This file is part of GNU Emacs. 7 8 GNU Emacs is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 2, or (at your option) 11 any later version. 12 13 GNU Emacs is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with GNU Emacs; see the file COPYING. If not, write to the 20 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 Boston, MA 02110-1301, USA. */ 22 23#ifdef HAVE_CONFIG_H 24#include <config.h> 25#endif 26 27#include <stdio.h> 28 29#ifdef HAVE_FCNTL_H 30#include <fcntl.h> 31#endif 32 33#ifdef HAVE_UNISTD_H 34#include <unistd.h> 35#endif 36 37#ifndef O_RDONLY 38#define O_RDONLY 0 39#endif 40 41/* Break string in two parts to avoid buggy C compilers that ignore characters 42 after nulls in strings. */ 43 44char string1[] = "Testing distribution of nonprinting chars:\n\ 45Should be 0177: \177 Should be 0377: \377 Should be 0212: \212.\n\ 46Should be 0000: "; 47 48char string2[] = ".\n\ 49This file is read by the `test-distribution' program.\n\ 50If you change it, you will make that program fail.\n"; 51 52char buf[300]; 53 54/* Like `read' but keeps trying until it gets SIZE bytes or reaches eof. */ 55int 56cool_read (fd, buf, size) 57 int fd; 58 char *buf; 59 int size; 60{ 61 int num, sofar = 0; 62 63 while (1) 64 { 65 if ((num = read (fd, buf + sofar, size - sofar)) == 0) 66 return sofar; 67 else if (num < 0) 68 return num; 69 sofar += num; 70 } 71} 72 73int 74main (argc, argv) 75 int argc; 76 char **argv; 77{ 78 int fd; 79 80 if (argc != 2) 81 { 82 fprintf (stderr, "Usage: %s testfile\n", argv[0]); 83 exit (EXIT_FAILURE); 84 } 85 fd = open (argv[1], O_RDONLY); 86 if (fd < 0) 87 { 88 perror (argv[1]); 89 exit (EXIT_FAILURE); 90 } 91 if (cool_read (fd, buf, sizeof string1) != sizeof string1 || 92 strcmp (buf, string1) || 93 cool_read (fd, buf, sizeof string2) != sizeof string2 - 1 || 94 strncmp (buf, string2, sizeof string2 - 1)) 95 { 96 fprintf (stderr, "Data in file `%s' has been damaged.\n\ 97Most likely this means that many nonprinting characters\n\ 98have been corrupted in the files of Emacs, and it will not work.\n", 99 argv[1]); 100 exit (EXIT_FAILURE); 101 } 102 close (fd); 103 return EXIT_SUCCESS; 104} 105 106/* arch-tag: 3a89005d-df98-4c32-aa9f-33570e16a26a 107 (do not change this comment) */ 108 109/* test-distrib.c ends here */ 110