1 /* Retrieve file identification data. 2 Copyright (C) 1998, 1999, 2000, 2002, 2004 Red Hat, Inc. 3 Written by Ulrich Drepper <drepper (at) redhat.com>, 1998. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation, version 2. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program; if not, write to the Free Software Foundation, 16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 17 18 #ifdef HAVE_CONFIG_H 19 # include <config.h> 20 #endif 21 22 #include <stddef.h> 23 24 #include "libelfP.h" 25 26 27 char * 28 elf_getident (elf, ptr) 29 Elf *elf; 30 size_t *ptr; 31 { 32 /* In case this is no ELF file, the handle is invalid and we return 33 NULL. */ 34 if (elf == NULL || elf->kind != ELF_K_ELF) 35 { 36 if (ptr != NULL) 37 *ptr = 0; 38 return NULL; 39 } 40 41 /* We already read the ELF header. Return a pointer to it and store 42 the length in *PTR. */ 43 if (ptr != NULL) 44 *ptr = EI_NIDENT; 45 46 return (char *) (elf->class == ELFCLASS32 47 || (offsetof (struct Elf, state.elf32.ehdr) 48 == offsetof (struct Elf, state.elf64.ehdr)) 49 ? elf->state.elf32.ehdr->e_ident 50 : elf->state.elf64.ehdr->e_ident); 51 } 52