58 lines
908 B
C
Executable File
58 lines
908 B
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 "@(#)rawput.c 1.5 94/08/01 SMI" /* SVr4.0 1.2 */
|
|
|
|
/*LINTLIBRARY*/
|
|
|
|
#include "syn.h"
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include "libelf.h"
|
|
#include "decl.h"
|
|
#include "error.h"
|
|
|
|
|
|
/* Raw file input/output
|
|
* Read pieces of input files.
|
|
*/
|
|
|
|
|
|
char *
|
|
_elf_read(fd, off, fsz)
|
|
int fd;
|
|
off_t off;
|
|
size_t fsz;
|
|
{
|
|
char *p;
|
|
|
|
if (fsz == 0)
|
|
return 0;
|
|
if (fd == -1)
|
|
{
|
|
_elf_err = EREQ_NOFD;
|
|
return 0;
|
|
}
|
|
if (lseek(fd, off, 0) != off)
|
|
{
|
|
_elf_err = EIO_SEEK;
|
|
return 0;
|
|
}
|
|
if ((p = (char *)malloc(fsz)) == 0)
|
|
{
|
|
_elf_err = EMEM_DATA;
|
|
return 0;
|
|
}
|
|
if (read(fd, p, fsz) != fsz)
|
|
{
|
|
_elf_err = EIO_READ;
|
|
free(p);
|
|
return 0;
|
|
}
|
|
return p;
|
|
}
|