1165535Sjkoshy/*- 2165535Sjkoshy * Copyright (c) 2006 Joseph Koshy 3165535Sjkoshy * All rights reserved. 4165535Sjkoshy * 5165535Sjkoshy * Redistribution and use in source and binary forms, with or without 6165535Sjkoshy * modification, are permitted provided that the following conditions 7165535Sjkoshy * are met: 8165535Sjkoshy * 1. Redistributions of source code must retain the above copyright 9165535Sjkoshy * notice, this list of conditions and the following disclaimer. 10165535Sjkoshy * 2. Redistributions in binary form must reproduce the above copyright 11165535Sjkoshy * notice, this list of conditions and the following disclaimer in the 12165535Sjkoshy * documentation and/or other materials provided with the distribution. 13165535Sjkoshy * 14165535Sjkoshy * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15165535Sjkoshy * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16165535Sjkoshy * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17165535Sjkoshy * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18165535Sjkoshy * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19165535Sjkoshy * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20165535Sjkoshy * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21165535Sjkoshy * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22165535Sjkoshy * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23165535Sjkoshy * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24165535Sjkoshy * SUCH DAMAGE. 25165535Sjkoshy */ 26165535Sjkoshy 27165535Sjkoshy#include <sys/cdefs.h> 28165535Sjkoshy__FBSDID("$FreeBSD$"); 29165535Sjkoshy 30165535Sjkoshy#include <ar.h> 31165535Sjkoshy#include <libelf.h> 32165535Sjkoshy 33165535Sjkoshy#include "_libelf.h" 34165535Sjkoshy 35210345Skaiwstatic int 36210345Skaiw_libelf_getphdrnum(Elf *e, size_t *phnum) 37165535Sjkoshy{ 38165535Sjkoshy void *eh; 39165535Sjkoshy int ec; 40165535Sjkoshy 41165535Sjkoshy if (e == NULL || e->e_kind != ELF_K_ELF || 42165535Sjkoshy ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64)) { 43165535Sjkoshy LIBELF_SET_ERROR(ARGUMENT, 0); 44210345Skaiw return (-1); 45165535Sjkoshy } 46165535Sjkoshy 47165535Sjkoshy if ((eh = _libelf_ehdr(e, ec, 0)) == NULL) 48210345Skaiw return (-1); 49165535Sjkoshy 50165535Sjkoshy *phnum = e->e_u.e_elf.e_nphdr; 51165535Sjkoshy 52210345Skaiw return (0); 53165535Sjkoshy} 54210345Skaiw 55210345Skaiwint 56210345Skaiwelf_getphdrnum(Elf *e, size_t *phnum) 57210345Skaiw{ 58210345Skaiw return (_libelf_getphdrnum(e, phnum)); 59210345Skaiw} 60210345Skaiw 61210345Skaiw/* Deprecated API */ 62210345Skaiwint 63210345Skaiwelf_getphnum(Elf *e, size_t *phnum) 64210345Skaiw{ 65210345Skaiw return (_libelf_getphdrnum(e, phnum) >= 0); 66210345Skaiw} 67