summaryrefslogtreecommitdiff
path: root/endian.c
diff options
context:
space:
mode:
Diffstat (limited to 'endian.c')
-rw-r--r--endian.c148
1 files changed, 0 insertions, 148 deletions
diff --git a/endian.c b/endian.c
deleted file mode 100644
index 7de87061..00000000
--- a/endian.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/* endian.c -- A trick for determining the byte order of a machine. */
-
-/* Copyright (C) 1993 Free Software Foundation, Inc.
-
- This file is part of GNU Bash, the Bourne Again SHell.
-
- Bash is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 2, or (at your option) any later
- version.
-
- Bash is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- for more details.
-
- You should have received a copy of the GNU General Public License along
- with Bash; see the file COPYING. If not, write to the Free Software
- Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#include <sys/types.h>
-#include <stdio.h>
-#include "bashansi.h"
-
-/* The name of this program, as taken from argv[0]. */
-char *progname;
-
-/* The name of the source file that this code is made from. */
-char source_name[256];
-
-/* The name of the define. Either "BIG_ENDIAN" or "LITTLE_ENDIAN". */
-char *endian_define;
-
-char string[9];
-char nstring[9];
-
-/* Stuff "1234" into a long, and compare it against a character string
- "1234". If the results are EQ, the machine is big endian like a 68000
- or Sparc, otherwise it is little endian, like a Vax, or 386. */
-main (argc, argv)
- int argc;
- char **argv;
-{
-#if defined (__STDC__)
- register size_t i;
-#else
- register int i;
-#endif /* !__STDC__ */
- FILE *stream = (FILE *)NULL;
- char *stream_name = "stdout";
- union {
- unsigned long l;
- char s[sizeof (long)];
- } u;
-
- progname = argv[0];
-
- for (i = strlen (progname); i > 0; i--)
- if (progname[i] == '/')
- {
- progname = progname + i + 1;
- break;
- }
-
- strcpy (source_name, progname);
- for (i = strlen (source_name); i > 0; i--)
- if (source_name[i] == '.')
- {
- source_name[i] = '\0';
- break;
- }
-
- strcat (source_name, ".c");
-
- if (argc == 1)
- {
- stream_name = "stdout";
- stream = stdout;
- }
- else if (argc == 2)
- {
- stream_name = argv[1];
- stream = fopen (stream_name, "w");
- }
- else
- {
- fprintf (stderr, "Usage: %s [output-file]\n", progname);
- exit (1);
- }
-
- if (!stream)
- {
- fprintf (stderr, "%s: %s Cannot be opened or written to.\n",
- progname, stream_name);
- exit (2);
- }
-
- if (sizeof (long int) == 4)
- {
- u.l = 0x04030201L;
- (void) strcpy (string, "4321");
- }
- else if (sizeof (long int) == 8)
- {
-#if defined (__GNUC__)
- unsigned long fake_out_gcc;
-
- fake_out_gcc = (0x08070605L << 31);
- fake_out_gcc = (fake_out_gcc << 1);
- u.l = fake_out_gcc | 0x04030201L;
-#else
- u.l = (0x08070605L << 32) | 0x04030201L;
-#endif /* !__GNUC__ */
- (void) strcpy (string, "87654321");
- }
- else
- {
- fprintf (stderr,
- "%s: sizeof (long int) = %d, which isn't handled here.\n",
- progname, sizeof (long int));
- exit (2);
- }
-
- for (i = 0; i < sizeof (long); i++)
- nstring[i] = u.s[i] + '0';
- nstring[i] = '\0';
-
- if (strcmp (nstring, string) == 0)
- endian_define = "BIG_ENDIAN";
- else
- endian_define = "LITTLE_ENDIAN";
-
- fprintf (stream, "/* %s - Define BIG or LITTLE endian. */\n\n", stream_name);
- fprintf (stream,
-"/* This file was automatically created by `%s'. You shouldn't\n\
- edit this file, because your changes will be overwritten. Instead,\n\
- edit the source code file `%s'. */\n\n",
- progname, source_name);
-
- fprintf (stream, "#if !defined (%s)\n", endian_define);
- fprintf (stream, "# define %s\n", endian_define);
- fprintf (stream, "#endif /* %s */\n", endian_define);
-
- if (stream != stdout)
- fclose (stream);
-
- exit (0);
-}