Sun Jan 15 13:57:45 1995 Steve Chamberlain <sac@splat>
* opncls.c (bfd_fdopenr): Configure for WIN32.
This commit is contained in:
parent
764adcb490
commit
9560e662d0
2 changed files with 74 additions and 72 deletions
|
@ -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'.
|
||||||
|
|
142
bfd/opncls.c
142
bfd/opncls.c
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue