elf_flagelf.c revision 441f72d43a9b550baa779fc82f70816da5f74f0e
1/* Manipulate ELF file flags.
2   Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
3   Written by Ulrich Drepper <drepper@redhat.com>, 1999.
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 <libelf.h>
23#include <stddef.h>
24
25#include "libelfP.h"
26
27
28unsigned int
29elf_flagelf (elf, cmd, flags)
30     Elf *elf;
31     Elf_Cmd cmd;
32     unsigned int flags;
33{
34  unsigned int result;
35
36  if (elf == NULL)
37    return 0;
38
39  if (unlikely (elf->kind != ELF_K_ELF))
40    {
41      __libelf_seterrno (ELF_E_INVALID_HANDLE);
42      return 0;
43    }
44
45  if (likely (cmd == ELF_C_SET))
46    result = (elf->flags
47	      |= (flags & (ELF_F_DIRTY | ELF_F_LAYOUT | ELF_F_PERMISSIVE)));
48  else if (likely (cmd == ELF_C_CLR))
49    result = (elf->flags
50	      &= ~(flags & (ELF_F_DIRTY | ELF_F_LAYOUT | ELF_F_PERMISSIVE)));
51  else
52    {
53      __libelf_seterrno (ELF_E_INVALID_COMMAND);
54      return 0;
55    }
56
57  return result;
58}
59