• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ----------------------------------------------------------------------- *
2  *
3  *   Copyright 2009 Pierre-Alexandre Meyer
4  *
5  *   This file is part of Syslinux, and is made available under
6  *   the terms of the GNU General Public License version 2.
7  *
8  * ----------------------------------------------------------------------- */
9 
10 #include <disk/bootloaders.h>
11 #include <disk/common.h>
12 #include <disk/geom.h>
13 #include <disk/read.h>
14 #include <stdlib.h>
15 #include <string.h>
16 
17 /**
18  * get_bootloader_string - return a string describing the boot code in a
19  *			   bootsector
20  * @d:			driveinfo struct describing the drive
21  * @p:	partition to scan (usually the active one)
22  * @buffer:		pre-allocated buffer
23  * @buffer_size:	@buffer size
24  **/
get_bootloader_string(struct driveinfo * d,const struct part_entry * p,char * buffer,const int buffer_size)25 int get_bootloader_string(struct driveinfo *d, const struct part_entry *p,
26 			  char *buffer, const int buffer_size)
27 {
28     char boot_sector[SECTOR * sizeof(char)];
29 
30     if (read_sectors(d, &boot_sector, p->start_lba, 1) == -1)
31 	return -1;
32     else {
33 	if (!strncmp(boot_sector + 3, "SYSLINUX", 8))
34 	    strlcpy(buffer, "SYSLINUX", buffer_size - 1);
35 	else if (!strncmp(boot_sector + 3, "EXTLINUX", 8))
36 	    strlcpy(buffer, "EXTLINUX", buffer_size - 1);
37 	else if (!strncmp(boot_sector + 3, "MSWIN4.1", 8))
38 	    strlcpy(buffer, "MSWIN4.1", buffer_size - 1);
39 	else
40 	    return -1;
41 	/* Add more... */
42 
43 	buffer[buffer_size - 1] = '\0';
44 	return 0;
45     }
46 }
47