2009-11-21 Samuel Thibault <samuel.thibault@ens-lyon.org>
[grub2.git] / loader / aout.c
blob0254b6ae054a2f044904fdbdf7298e1e32d11c5f
1 /*
2 * Copyright (C) 2008 Free Software Foundation, Inc.
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
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.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 #include <grub/file.h>
19 #include <grub/err.h>
20 #include <grub/dl.h>
21 #include <grub/misc.h>
22 #include <grub/aout.h>
24 int
25 grub_aout_get_type (union grub_aout_header *header)
27 int magic;
29 magic = AOUT_GETMAGIC (header->aout32);
30 if ((magic == AOUT32_OMAGIC) || (magic == AOUT32_NMAGIC) ||
31 (magic == AOUT32_ZMAGIC) || (magic == AOUT32_QMAGIC))
32 return AOUT_TYPE_AOUT32;
33 else if ((magic == AOUT64_OMAGIC) || (magic == AOUT64_NMAGIC) ||
34 (magic == AOUT64_ZMAGIC))
35 return AOUT_TYPE_AOUT64;
36 else
37 return AOUT_TYPE_NONE;
40 grub_err_t
41 grub_aout_load (grub_file_t file, int offset,
42 grub_addr_t load_addr,
43 int load_size,
44 grub_addr_t bss_end_addr)
46 if ((grub_file_seek (file, offset)) == (grub_off_t) - 1)
47 return grub_errno;
49 if (!load_size)
50 load_size = file->size - offset;
52 grub_file_read (file, (void *) load_addr, load_size);
54 if (grub_errno)
55 return grub_errno;
57 if (bss_end_addr)
58 grub_memset ((char *) load_addr + load_size, 0,
59 bss_end_addr - load_addr - load_size);
61 return GRUB_ERR_NONE;