return -1;
loaderlen = loadersec->size;
- loaderbuf = bfd_malloc (loaderlen);
+ if (loaderlen < 56)
+ return -1;
+ if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) != 0)
+ return -1;
+ loaderbuf = _bfd_malloc_and_read (abfd, loaderlen, loaderlen);
if (loaderbuf == NULL)
return -1;
- if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0
- || bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen
- || loaderlen < 56
- || bfd_pef_parse_loader_header (abfd, loaderbuf, 56, &header) < 0)
+ if (bfd_pef_parse_loader_header (abfd, loaderbuf, 56, &header) < 0)
{
free (loaderbuf);
return -1;
goto end;
loaderlen = loadersec->size;
- loaderbuf = bfd_malloc (loaderlen);
- if (loaderbuf == NULL)
- goto end;
-
- if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0)
+ if (loaderlen < 56)
goto error;
- if (bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen)
+ if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) != 0)
goto error;
-
- if (loaderlen < 56)
+ loaderbuf = _bfd_malloc_and_read (abfd, loaderlen, loaderlen);
+ if (loaderbuf == NULL)
goto error;
+
ret = bfd_pef_parse_loader_header (abfd, loaderbuf, 56, &header);
if (ret < 0)
goto error;
return 0;
}
-static const bfd_target *
+static bfd_cleanup
bfd_pef_object_p (bfd *abfd)
{
bfd_pef_header header;
if (bfd_pef_scan (abfd, &header, mdata))
goto wrong;
- return abfd->xvec;
+ return _bfd_no_cleanup;
wrong:
bfd_set_error (bfd_error_wrong_format);
codepos += 4;
}
- if ((codepos + 4) > codelen)
+ if ((codepos + 24) > codelen)
break;
ret = bfd_pef_parse_function_stub (abfd, codebuf + codepos, 24, &sym_index);
if (codesec != NULL)
{
codelen = codesec->size;
- codebuf = bfd_malloc (codelen);
- if (codebuf == NULL)
- goto end;
- if (bfd_seek (abfd, codesec->filepos, SEEK_SET) < 0)
+ if (bfd_seek (abfd, codesec->filepos, SEEK_SET) != 0)
goto end;
- if (bfd_bread ((void *) codebuf, codelen, abfd) != codelen)
+ codebuf = _bfd_malloc_and_read (abfd, codelen, codelen);
+ if (codebuf == NULL)
goto end;
}
if (loadersec != NULL)
{
loaderlen = loadersec->size;
- loaderbuf = bfd_malloc (loaderlen);
- if (loaderbuf == NULL)
+ if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) != 0)
goto end;
- if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0)
- goto end;
- if (bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen)
+ loaderbuf = _bfd_malloc_and_read (abfd, loaderlen, loaderlen);
+ if (loaderbuf == NULL)
goto end;
}
return 0;
}
-static const bfd_target *
+static bfd_cleanup
bfd_pef_xlib_object_p (bfd *abfd)
{
bfd_pef_xlib_header header;
return NULL;
}
- return abfd->xvec;
+ return _bfd_no_cleanup;
}
const bfd_target pef_xlib_vec =