2021-10-11 19:38:01 -03:00

62 lines
1.0 KiB
C
Executable File

/* Copyright (c) 1988 AT&T */
/* All Rights Reserved */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */
#pragma ident "@(#)rawfile.c 1.4 92/07/17 SMI" /* SVr4.0 1.4 */
/*LINTLIBRARY*/
#ifdef __STDC__
#pragma weak elf_rawfile = _elf_rawfile
#endif
#include "syn.h"
#include "libelf.h"
#include "decl.h"
char *
elf_rawfile(elf, ptr)
register Elf *elf;
register size_t *ptr;
{
register size_t sz;
char *p = 0;
if (elf == 0 || (sz = elf->ed_fsz) == 0)
{
if (ptr != 0)
*ptr = 0;
return 0;
}
if (elf->ed_raw != 0)
p = elf->ed_raw;
else if (elf->ed_status == ES_COOKED)
{
if ((p = _elf_read(elf->ed_fd, elf->ed_baseoff, sz)) != 0)
{
elf->ed_raw = p;
elf->ed_myflags |= EDF_RAWALLOC;
}
else
sz = 0;
}
else
{
p = elf->ed_raw = elf->ed_ident;
elf->ed_status = ES_FROZEN;
if (_elf_vm(elf, (size_t)0, elf->ed_fsz) != OK_YES)
{
p = 0;
sz = 0;
}
}
if (ptr != 0)
*ptr = sz;
return p;
}