diff options
Diffstat (limited to 'gnu/usr.bin/as/output-file.c')
-rw-r--r-- | gnu/usr.bin/as/output-file.c | 159 |
1 files changed, 100 insertions, 59 deletions
diff --git a/gnu/usr.bin/as/output-file.c b/gnu/usr.bin/as/output-file.c index ff71f40f9a13..7439e86953ac 100644 --- a/gnu/usr.bin/as/output-file.c +++ b/gnu/usr.bin/as/output-file.c @@ -1,21 +1,21 @@ /* output-file.c - Deal with the output file - Copyright (C) 1987 Free Software Foundation, Inc. - -This file is part of GAS, the GNU Assembler. - -GAS 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 1, or (at your option) -any later version. - -GAS 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 GAS; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. + + This file is part of GAS, the GNU Assembler. + + GAS 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. + + GAS 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 GAS; see the file COPYING. If not, write to + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* * Confines all details of emitting object bytes to this module. @@ -24,58 +24,99 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ * Note we don't need to #include the "as.h" file. No common coupling! */ -/* #include "style.h" */ +/* note that we do need config info. xoxorich. */ + +#ifndef lint +static char rcsid[] = "$Id: output-file.c,v 1.3 1993/10/02 20:57:49 pk Exp $"; +#endif + #include <stdio.h> -void as_perror(); +#include "as.h" + +#include "output-file.h" +#ifdef BFD_HEADERS +#include "bfd.h" +bfd *stdoutput; +void output_file_create(name) +char *name; +{ + if (name[0] == '-' && name[1] == '\0') { + as_perror("FATAL: Can't open a bfd on stdout %s ", name); + } + else if ( ! (stdoutput = bfd_openw( name, TARGET_FORMAT )) ) + { + as_perror ("FATAL: Can't create %s", name); + exit(42); + } + bfd_set_format(stdoutput, bfd_object); +} +/* output_file_create() */ -static FILE * -stdoutput; -void -output_file_create (name) - char * name; +void output_file_close(filename) +char *filename; { - if(name[0]=='-' && name[1]=='\0') - stdoutput=stdout; - else if ( ! (stdoutput = fopen( name, "w" )) ) - { - as_perror ("FATAL: Can't create %s", name); - exit(42); - } -} + /* Close the bfd without getting bfd to write out anything by itself */ + if ( bfd_close_all_done( stdoutput ) == 0 ) + { + as_perror ("FATAL: Can't close %s\n", filename); + exit(42); + } + stdoutput = NULL; /* Trust nobody! */ +} /* output_file_close() */ +void output_file_append(where, length, filename) +char *where; +long length; +char *filename; +{ + abort(); /* Never do this */ +} + +#else +static FILE *stdoutput; -void -output_file_close (filename) - char * filename; +void output_file_create(name) +char *name; { - if ( EOF == fclose( stdoutput ) ) - { - as_perror ("FATAL: Can't close %s", filename); - exit(42); - } - stdoutput = NULL; /* Trust nobody! */ -} - -void -output_file_append (where, length, filename) - char * where; - long int length; - char * filename; + if (name[0] == '-' && name[1] == '\0') + stdoutput=stdout; + else if (!(stdoutput = fopen(name, "wb"))) { + as_perror("FATAL: Can't create %s", name); + exit(42); + } +} /* output_file_create() */ + + + +void output_file_close(filename) +char *filename; { + if (EOF == fclose(stdoutput)) { + as_perror ("FATAL: Can't close %s", filename); + exit(42); + } + stdoutput = NULL; /* Trust nobody! */ +} /* output_file_close() */ - for (; length; length--,where++) - { - (void)putc(*where,stdoutput); - if(ferror(stdoutput)) - /* if ( EOF == (putc( *where, stdoutput )) ) */ - { - as_perror("Failed to emit an object byte", filename); - as_fatal("Can't continue"); +void output_file_append(where, length, filename) +char *where; +long length; +char *filename; +{ + + for (; length; length--, where++) { + (void) putc(*where, stdoutput); + if (ferror(stdoutput)) + /* if ( EOF == (putc( *where, stdoutput )) ) */ + { + as_perror("Failed to emit an object byte", filename); + as_fatal("Can't continue"); + } } - } -} +} /* output_file_append() */ +#endif -/* end: output-file.c */ +/* end of output-file.c */ |