rev |
line source |
pascal@13747
|
1 --- com32/menu/readconfig.c
|
pascal@13747
|
2 +++ com32/menu/readconfig.c
|
pascal@19192
|
3 @@ -23,6 +23,7 @@
|
pascal@19192
|
4 #include <com32.h>
|
pascal@19192
|
5 #include <syslinux/adv.h>
|
pascal@19192
|
6 #include <syslinux/config.h>
|
pascal@19192
|
7 +#include <syslinux/disk.h>
|
pascal@19192
|
8
|
pascal@19192
|
9 #include "menu.h"
|
pascal@19192
|
10
|
pascal@19192
|
11 @@ -874,6 +875,31 @@
|
pascal@13747
|
12 }
|
pascal@13747
|
13 } else if (looking_at(p, "start")) {
|
pascal@13747
|
14 start_menu = m;
|
pascal@13747
|
15 + } else if ((ep = looking_at(p, "startifnoarg"))) {
|
pascal@19192
|
16 + const union syslinux_derivative_info *sdi;
|
pascal@19192
|
17 + int custom = 0;
|
pascal@13747
|
18 + size_t size;
|
pascal@13747
|
19 + int slot;
|
pascal@19192
|
20 + sdi = syslinux_derivative_info();
|
pascal@19192
|
21 + if (sdi->c.filesystem == SYSLINUX_FS_ISOLINUX) {
|
pascal@19192
|
22 + struct disk_info diskinfo;
|
pascal@19192
|
23 + char *custom_buffer;
|
pascal@19192
|
24 + int got_config;
|
pascal@19192
|
25 +
|
pascal@19192
|
26 + disk_get_params(sdi->iso.drive_number, &diskinfo);
|
pascal@19192
|
27 + custom_buffer = disk_read_sectors(&diskinfo, 32768 / diskinfo.bps, 1);
|
pascal@19192
|
28 + got_config = (16 + *(unsigned long *) (custom_buffer + 80))
|
pascal@19192
|
29 + * 2048 / diskinfo.bps;
|
pascal@19192
|
30 + free(custom_buffer);
|
pascal@19192
|
31 + custom_buffer = disk_read_sectors(&diskinfo, got_config, 1);
|
pascal@19192
|
32 + if (!memcmp(custom_buffer,"#!boot ",7)) {
|
pascal@19192
|
33 + custom++;
|
pascal@19192
|
34 + }
|
pascal@19192
|
35 + free(custom_buffer);
|
pascal@19192
|
36 + }
|
pascal@13747
|
37 + slot = strtoul(ep, &ep, 0);
|
pascal@19192
|
38 + if (!custom && !syslinux_getadv(slot, &size))
|
pascal@13747
|
39 + start_menu = m;
|
pascal@13747
|
40 } else if (looking_at(p, "help")) {
|
pascal@13747
|
41 if (ld.label) {
|
pascal@13747
|
42 ld.action = MA_HELP;
|