Sun Jan 15 13:57:45 1995 Steve Chamberlain <sac@splat>

* opncls.c (bfd_fdopenr): Configure for WIN32.
This commit is contained in:
Steve Chamberlain 1995-01-15 22:04:02 +00:00
parent 764adcb490
commit 9560e662d0
2 changed files with 74 additions and 72 deletions

View file

@ -1,3 +1,7 @@
Sun Jan 15 13:57:45 1995 Steve Chamberlain <sac@splat>
* opncls.c (bfd_fdopenr): Configure for WIN32.
Thu Jan 12 16:30:47 1995 Ken Raeburn <raeburn@cujo.cygnus.com> Thu Jan 12 16:30:47 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
* Makefile.in (diststuff): Include `headers'. * Makefile.in (diststuff): Include `headers'.

View file

@ -22,8 +22,16 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "sysdep.h" #include "sysdep.h"
#include "libbfd.h" #include "libbfd.h"
#include "obstack.h" #include "obstack.h"
extern void bfd_cache_init PARAMS ((bfd *));
FILE *bfd_open_file PARAMS ((bfd *)); #ifndef S_IXUSR
#define S_IXUSR 0100 /* Execute by owner. */
#endif
#ifndef S_IXGRP
#define S_IXGRP 0010 /* Execute by group. */
#endif
#ifndef S_IXOTH
#define S_IXOTH 0001 /* Execute by others. */
#endif
/* fdopen is a loser -- we should use stdio exclusively. Unfortunately /* fdopen is a loser -- we should use stdio exclusively. Unfortunately
if we do that we can't use fcntl. */ if we do that we can't use fcntl. */
@ -42,14 +50,14 @@ _bfd_new_bfd ()
nbfd = (bfd *)bfd_zmalloc (sizeof (bfd)); nbfd = (bfd *)bfd_zmalloc (sizeof (bfd));
if (!nbfd) if (!nbfd)
{ {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
return 0; return 0;
} }
bfd_check_init(); bfd_check_init();
if (!obstack_begin(&nbfd->memory, 128)) if (!obstack_begin(&nbfd->memory, 128))
{ {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
return 0; return 0;
} }
@ -110,7 +118,7 @@ DESCRIPTION
that function. that function.
If <<NULL>> is returned then an error has occured. Possible errors If <<NULL>> is returned then an error has occured. Possible errors
are <<no_memory>>, <<invalid_target>> or <<system_call>> error. are <<bfd_error_no_memory>>, <<bfd_error_invalid_target>> or <<system_call>> error.
*/ */
bfd * bfd *
@ -119,17 +127,17 @@ bfd_openr (filename, target)
CONST char *target; CONST char *target;
{ {
bfd *nbfd; bfd *nbfd;
bfd_target *target_vec; const bfd_target *target_vec;
nbfd = _bfd_new_bfd(); nbfd = _bfd_new_bfd();
if (nbfd == NULL) { if (nbfd == NULL) {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
return NULL; return NULL;
} }
target_vec = bfd_find_target (target, nbfd); target_vec = bfd_find_target (target, nbfd);
if (target_vec == NULL) { if (target_vec == NULL) {
bfd_error = invalid_target; bfd_set_error (bfd_error_invalid_target);
return NULL; return NULL;
} }
@ -137,7 +145,7 @@ bfd_openr (filename, target)
nbfd->direction = read_direction; nbfd->direction = read_direction;
if (bfd_open_file (nbfd) == NULL) { if (bfd_open_file (nbfd) == NULL) {
bfd_error = system_call_error; /* File didn't exist, or some such */ bfd_set_error (bfd_error_system_call); /* File didn't exist, or some such */
bfd_release(nbfd,0); bfd_release(nbfd,0);
return NULL; return NULL;
} }
@ -176,7 +184,7 @@ DESCRIPTION
<<bfd_close>>, and will not be affected by BFD operations on other <<bfd_close>>, and will not be affected by BFD operations on other
files. files.
Possible errors are <<no_memory>>, <<invalid_target>> and <<system_call_error>>. Possible errors are <<bfd_error_no_memory>>, <<bfd_error_invalid_target>> and <<bfd_error_system_call>>.
*/ */
bfd * bfd *
@ -186,10 +194,10 @@ bfd_fdopenr (filename, target, fd)
int fd; int fd;
{ {
bfd *nbfd; bfd *nbfd;
bfd_target *target_vec; const bfd_target *target_vec;
int fdflags; int fdflags;
bfd_error = system_call_error; bfd_set_error (bfd_error_system_call);
#ifdef NO_FCNTL #ifdef NO_FCNTL
fdflags = O_RDWR; /* Assume full access */ fdflags = O_RDWR; /* Assume full access */
@ -201,16 +209,16 @@ bfd_fdopenr (filename, target, fd)
nbfd = _bfd_new_bfd(); nbfd = _bfd_new_bfd();
if (nbfd == NULL) { if (nbfd == NULL) {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
return NULL; return NULL;
} }
target_vec = bfd_find_target (target, nbfd); target_vec = bfd_find_target (target, nbfd);
if (target_vec == NULL) { if (target_vec == NULL) {
bfd_error = invalid_target; bfd_set_error (bfd_error_invalid_target);
return NULL; return NULL;
} }
#if defined(VMS) || defined(__GO32__) #if defined(VMS) || defined(__GO32__) || defined (WIN32)
nbfd->iostream = (char *)fopen(filename, FOPEN_RB); nbfd->iostream = (char *)fopen(filename, FOPEN_RB);
#else #else
/* (O_ACCMODE) parens are to avoid Ultrix header file bug */ /* (O_ACCMODE) parens are to avoid Ultrix header file bug */
@ -241,7 +249,8 @@ bfd_fdopenr (filename, target, fd)
default: abort (); default: abort ();
} }
bfd_cache_init (nbfd); if (! bfd_cache_init (nbfd))
return NULL;
return nbfd; return nbfd;
} }
@ -262,8 +271,8 @@ DESCRIPTION
Create a BFD, associated with file @var{filename}, using the Create a BFD, associated with file @var{filename}, using the
file format @var{target}, and return a pointer to it. file format @var{target}, and return a pointer to it.
Possible errors are <<system_call_error>>, <<no_memory>>, Possible errors are <<bfd_error_system_call>>, <<bfd_error_no_memory>>,
<<invalid_target>>. <<bfd_error_invalid_target>>.
*/ */
bfd * bfd *
@ -272,16 +281,16 @@ bfd_openw (filename, target)
CONST char *target; CONST char *target;
{ {
bfd *nbfd; bfd *nbfd;
bfd_target *target_vec; const bfd_target *target_vec;
bfd_error = system_call_error; bfd_set_error (bfd_error_system_call);
/* nbfd has to point to head of malloc'ed block so that bfd_close may /* nbfd has to point to head of malloc'ed block so that bfd_close may
reclaim it correctly. */ reclaim it correctly. */
nbfd = _bfd_new_bfd(); nbfd = _bfd_new_bfd();
if (nbfd == NULL) { if (nbfd == NULL) {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
return NULL; return NULL;
} }
@ -292,7 +301,7 @@ bfd_openw (filename, target)
nbfd->direction = write_direction; nbfd->direction = write_direction;
if (bfd_open_file (nbfd) == NULL) { if (bfd_open_file (nbfd) == NULL) {
bfd_error = system_call_error; /* File not writeable, etc */ bfd_set_error (bfd_error_system_call); /* File not writeable, etc */
(void) obstack_free (&nbfd->memory, (PTR)0); (void) obstack_free (&nbfd->memory, (PTR)0);
return NULL; return NULL;
} }
@ -330,35 +339,38 @@ bfd_close (abfd)
{ {
boolean ret; boolean ret;
if (!bfd_read_p(abfd)) if (!bfd_read_p (abfd))
if (BFD_SEND_FMT (abfd, _bfd_write_contents, (abfd)) != true) {
return false; if (! BFD_SEND_FMT (abfd, _bfd_write_contents, (abfd)))
return false;
}
if (BFD_SEND (abfd, _close_and_cleanup, (abfd)) != true) return false; if (! BFD_SEND (abfd, _close_and_cleanup, (abfd)))
return false;
ret = bfd_cache_close(abfd); ret = bfd_cache_close (abfd);
/* If the file was open for writing and is now executable, /* If the file was open for writing and is now executable,
make it so */ make it so */
if (ret == true if (ret
&& abfd->direction == write_direction && abfd->direction == write_direction
&& abfd->flags & EXEC_P) { && abfd->flags & EXEC_P)
struct stat buf; {
stat(abfd->filename, &buf); struct stat buf;
#ifndef S_IXUSR
#define S_IXUSR 0100 /* Execute by owner. */ if (stat (abfd->filename, &buf) == 0)
#endif {
#ifndef S_IXGRP int mask = umask (0);
#define S_IXGRP 0010 /* Execute by group. */ umask (mask);
#endif chmod (abfd->filename,
#ifndef S_IXOTH (0777
#define S_IXOTH 0001 /* Execute by others. */ & (buf.st_mode | ((S_IXUSR | S_IXGRP | S_IXOTH) &~ mask))));
#endif }
}
chmod(abfd->filename, 0777 & (buf.st_mode | S_IXUSR | S_IXGRP | S_IXOTH));
}
(void) obstack_free (&abfd->memory, (PTR)0); (void) obstack_free (&abfd->memory, (PTR)0);
(void) free(abfd); (void) free (abfd);
return ret; return ret;
} }
@ -391,27 +403,25 @@ bfd_close_all_done (abfd)
{ {
boolean ret; boolean ret;
ret = bfd_cache_close(abfd); ret = bfd_cache_close (abfd);
/* If the file was open for writing and is now executable, /* If the file was open for writing and is now executable,
make it so */ make it so */
if (ret == true if (ret
&& abfd->direction == write_direction && abfd->direction == write_direction
&& abfd->flags & EXEC_P) { && abfd->flags & EXEC_P)
struct stat buf; {
stat(abfd->filename, &buf); struct stat buf;
#ifndef S_IXUSR
#define S_IXUSR 0100 /* Execute by owner. */
#endif
#ifndef S_IXGRP
#define S_IXGRP 0010 /* Execute by group. */
#endif
#ifndef S_IXOTH
#define S_IXOTH 0001 /* Execute by others. */
#endif
chmod(abfd->filename, 0x777 &(buf.st_mode | S_IXUSR | S_IXGRP | S_IXOTH)); if (stat (abfd->filename, &buf) == 0)
} {
int mask = umask (0);
umask (mask);
chmod (abfd->filename,
(0x777
& (buf.st_mode | ((S_IXUSR | S_IXGRP | S_IXOTH) &~ mask))));
}
}
(void) obstack_free (&abfd->memory, (PTR)0); (void) obstack_free (&abfd->memory, (PTR)0);
(void) free(abfd); (void) free(abfd);
return ret; return ret;
@ -467,7 +477,7 @@ bfd_create (filename, templ)
{ {
bfd *nbfd = _bfd_new_bfd(); bfd *nbfd = _bfd_new_bfd();
if (nbfd == (bfd *)NULL) { if (nbfd == (bfd *)NULL) {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
return (bfd *)NULL; return (bfd *)NULL;
} }
nbfd->filename = filename; nbfd->filename = filename;
@ -535,15 +545,3 @@ bfd_zalloc (abfd, size)
memset(res, 0, (size_t)size); memset(res, 0, (size_t)size);
return res; return res;
} }
PTR
bfd_realloc (abfd, old, size)
bfd *abfd;
PTR old;
size_t size;
{
PTR res = bfd_alloc(abfd, size);
if (res)
memcpy(res, old, (size_t)size);
return res;
}