tizen 2.3.1 release accepted/tizen_2.4_mobile tizen_2.3.1 tizen_2.4 accepted/tizen/2.4/mobile/20151029.035336 submit/tizen_2.3.1/20150915.075449 submit/tizen_2.4/20151028.063346 tizen_2.3.1_release tizen_2.4_mobile_release
authorjk7744.park <jk7744.park@samsung.com>
Tue, 8 Sep 2015 13:06:03 +0000 (22:06 +0900)
committerjk7744.park <jk7744.park@samsung.com>
Tue, 8 Sep 2015 13:06:03 +0000 (22:06 +0900)
245 files changed:
.gitignore [deleted file]
MCONFIG [moved from mk/syslinux.mk with 96% similarity]
MCONFIG.build [moved from mk/build.mk with 97% similarity]
MCONFIG.embedded [moved from mk/embedded.mk with 98% similarity]
Makefile
NEWS
com32/MCONFIG [moved from mk/com32.mk with 98% similarity]
com32/Makefile
com32/cmenu/Makefile
com32/cmenu/complex.c32
com32/cmenu/display.c32
com32/cmenu/libmenu/com32io.o
com32/cmenu/libmenu/des.o
com32/cmenu/libmenu/help.o
com32/cmenu/libmenu/libmenu.a
com32/cmenu/libmenu/menu.o
com32/cmenu/libmenu/passwords.o
com32/cmenu/libmenu/syslnx.o
com32/cmenu/libmenu/tui.o
com32/cmenu/simple.c32
com32/cmenu/test.c32
com32/cmenu/test2.c32
com32/gdbstub/Makefile
com32/gfxboot/Makefile
com32/gfxboot/gfxboot.c
com32/gfxboot/gfxboot.c32
com32/gplinclude/acpi/acpi.h
com32/gplinclude/cpuid.h
com32/gplinclude/zzjson/zzjson.h [deleted file]
com32/gpllib/Makefile
com32/gpllib/acpi/acpi.c
com32/gpllib/cpuid.c
com32/gpllib/zzjson/zzjson_create.c [deleted file]
com32/gpllib/zzjson/zzjson_free.c [deleted file]
com32/gpllib/zzjson/zzjson_parse.c [deleted file]
com32/gpllib/zzjson/zzjson_print.c [deleted file]
com32/gpllib/zzjson/zzjson_query.c [deleted file]
com32/hdt/Makefile
com32/hdt/floppy/hdt.cfg
com32/hdt/hdt-cli-acpi.c
com32/hdt/hdt-cli-hdt.c
com32/hdt/hdt-cli.c
com32/hdt/hdt-cli.h
com32/hdt/hdt-common.c
com32/hdt/hdt-common.h
com32/hdt/hdt-dump-acpi.c [deleted file]
com32/hdt/hdt-dump-cpu.c [deleted file]
com32/hdt/hdt-dump-disks.c [deleted file]
com32/hdt/hdt-dump-dmi.c [deleted file]
com32/hdt/hdt-dump-hdt.c [deleted file]
com32/hdt/hdt-dump-kernel.c [deleted file]
com32/hdt/hdt-dump-memory.c [deleted file]
com32/hdt/hdt-dump-pci.c [deleted file]
com32/hdt/hdt-dump-pxe.c [deleted file]
com32/hdt/hdt-dump-syslinux.c [deleted file]
com32/hdt/hdt-dump-vesa.c [deleted file]
com32/hdt/hdt-dump-vpd.c [deleted file]
com32/hdt/hdt-dump.c [deleted file]
com32/hdt/hdt-dump.h [deleted file]
com32/hdt/hdt-menu-acpi.c
com32/hdt/hdt-menu-disk.c
com32/hdt/hdt-menu-pxe.c
com32/hdt/hdt-menu.c
com32/hdt/hdt.c32
com32/hdt/hdt.h
com32/include/bitsize/stddef.h
com32/include/bitsize/stdint.h
com32/include/bitsize/stdintconst.h
com32/include/bitsize/stdintlimits.h
com32/include/bufprintf.h [deleted file]
com32/include/cpufeature.h
com32/include/ctype.h
com32/include/dprintf.h
com32/include/netinet/in.h
com32/include/stdint.h
com32/include/syslinux/movebits.h
com32/lib/MCONFIG [moved from mk/lib.mk with 98% similarity]
com32/lib/Makefile
com32/lib/bufprintf.c [deleted file]
com32/lib/chrreplace.c [deleted file]
com32/lib/dprintf.c
com32/lib/inet.c [deleted file]
com32/lib/pci/scan.c
com32/lib/syslinux/dump_mmap.c
com32/lib/syslinux/dump_movelist.c
com32/lib/syslinux/load_linux.c
com32/lib/syslinux/movebits.c
com32/lib/syslinux/shuffle.c
com32/lib/syslinux/zonelist.c
com32/lib/vdprintf.c
com32/libupload/.gitignore [deleted file]
com32/libupload/Makefile [deleted file]
com32/libupload/tftp.h [deleted file]
com32/libupload/upload_backend.h [deleted file]
com32/libutil/Makefile
com32/libutil/libutil_com.a
com32/libutil/libutil_lnx.a
com32/lua/src/Makefile
com32/lua/src/lua.c32
com32/mboot/Makefile
com32/mboot/map.c
com32/mboot/mboot.c32
com32/menu/Makefile
com32/menu/menu.c32
com32/menu/vesamenu.c32
com32/modules/Makefile
com32/modules/cat.c32
com32/modules/chain.c
com32/modules/chain.c32
com32/modules/config.c32
com32/modules/cpuid.c32
com32/modules/cpuidtest.c32
com32/modules/disk.c32
com32/modules/dmitest.c32
com32/modules/elf.c
com32/modules/elf.c32
com32/modules/ethersel.c
com32/modules/ethersel.c32
com32/modules/host.c32
com32/modules/ifcpu.c32
com32/modules/ifmemdsk.c [deleted file]
com32/modules/linux.c32
com32/modules/ls.c32
com32/modules/meminfo.c32
com32/modules/pcitest.c
com32/modules/pcitest.c32
com32/modules/pmload.c
com32/modules/pmload.c32
com32/modules/sdi.c32
com32/modules/vesainfo.c32
com32/modules/vpdtest.c32
com32/modules/zzjson.c [deleted file]
com32/rosh/MCONFIG [moved from mk/rosh.mk with 97% similarity]
com32/rosh/Makefile
com32/rosh/rosh.c32
com32/samples/Makefile
com32/samples/advdump.c32
com32/samples/entrydump.c32
com32/samples/fancyhello.c32
com32/samples/fancyhello.lnx
com32/samples/hello.c32
com32/samples/keytest.c32
com32/samples/keytest.lnx
com32/samples/resolv.c32
com32/samples/serialinfo.c32
com32/sysdump/Makefile
com32/sysdump/acpi.c
com32/sysdump/backend.h [new file with mode: 0644]
com32/sysdump/be_srec.c [moved from com32/libupload/upload_srec.c with 91% similarity]
com32/sysdump/be_tftp.c [moved from com32/libupload/upload_tftp.c with 70% similarity]
com32/sysdump/be_ymodem.c [moved from com32/libupload/upload_ymodem.c with 96% similarity]
com32/sysdump/cpio.c [moved from com32/libupload/cpio.c with 75% similarity]
com32/sysdump/cpuid.c
com32/sysdump/ctime.c [moved from com32/libupload/ctime.c with 100% similarity]
com32/sysdump/ctime.h [moved from com32/libupload/ctime.h with 100% similarity]
com32/sysdump/data.h [new file with mode: 0644]
com32/sysdump/dmi.c
com32/sysdump/main.c
com32/sysdump/memmap.c
com32/sysdump/memory.c
com32/sysdump/pci.c
com32/sysdump/serial.c [moved from com32/libupload/serial.c with 100% similarity]
com32/sysdump/serial.h [moved from com32/libupload/serial.h with 100% similarity]
com32/sysdump/srecsend.h [moved from com32/libupload/srecsend.h with 100% similarity]
com32/sysdump/sysdump.c32
com32/sysdump/sysdump.h
com32/sysdump/vesa.c
com32/sysdump/ymodem.txt [moved from com32/libupload/ymodem.txt with 100% similarity]
com32/sysdump/zout.c [moved from com32/libupload/zout.c with 80% similarity]
com32/tools/Makefile
core/Makefile
core/diskboot.inc
core/diskfs.inc
core/diskstart.inc
core/head.inc
core/init.inc
core/isolinux-debug.bin
core/isolinux.asm
core/isolinux.bin
core/ldlinux.bin
core/ldlinux.bss
core/ldlinux.sys
core/pxelinux.0
core/pxelinux.bin
core/ui.inc
diag/geodsp/Makefile
diag/geodsp/geodsp1s.lst [new file with mode: 0644]
diag/geodsp/geodspms.lst [new file with mode: 0644]
diag/geodsp/mk-lba-img [new file with mode: 0755]
diag/geodsp/mk-lba-img.c
diag/mbr/Makefile
doc/isolinux.txt
doc/logo/syslinux-100.png [deleted file]
dos/Makefile
dos/syslinux.com
dosutil/Makefile
extlinux/Makefile
extlinux/btrfs.h
extlinux/extlinux
extlinux/main.c
gpxe/gpxelinux.0
gpxe/gpxelinuxk.0
libinstaller/Makefile
libinstaller/syslxint.h
libinstaller/syslxmod.c
linux/Makefile
linux/syslinux
linux/syslinux-nomtools
lzo/Makefile
mbr/Makefile
mbr/isohdpfx.S
mbr/isohdpfx.bin
mbr/isohdpfx_c.bin
mbr/isohdpfx_f.bin
mbr/isohdppx.bin
mbr/isohdppx_c.bin
mbr/isohdppx_f.bin
memdisk/Makefile
memdisk/memdisk
memdump/Makefile
memdump/memdump.com
modules/Makefile
mtools/Makefile
mtools/syslinux
packaging/0001-btrfs-Correctly-determine-the-installation-subvolume.patch [new file with mode: 0644]
packaging/0002-syslinux-4.05-avoid-ext2_fs.h.patch [new file with mode: 0644]
packaging/correct-uuid-link-lib.patch [deleted file]
packaging/syslinux.changes [deleted file]
packaging/syslinux.spec
sample/Makefile
syslinux.spec [deleted file]
utils/Makefile
utils/gethostip
utils/isohybrid
utils/isohybrid.c
utils/isohybrid.h
utils/isohybrid.pl
utils/memdiskfind
utils/ppmtolss16
version
version.gen
version.h
version.mk
win32/syslinux.exe
win64/syslinux64.exe

diff --git a/.gitignore b/.gitignore
deleted file mode 100644 (file)
index 2443538..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-*.0
-*.a
-*.bin
-*.bss
-*.c32
-*.com
-*.cp
-*.d
-*.elf
-*.exe
-*.gen
-*.img
-*.img.xz
-*.lib
-*.lnx
-*.lo
-*.lsr
-*.lst
-*.map
-*.o
-*.obj
-*.orig
-*.raw
-*.rej
-*.s
-*.sec
-*.sys
-*_bin.c
-*~
-\#*
-.\#*
-.depend
-/com32/lib/sys/vesa/alphatbl.c
-/diag/geodsp/mk-lba-img
-/extlinux/extlinux
-/memdisk/memdisk
-/mtools/syslinux
-/release
-/sample/syslogo.lss
-/linux/syslinux
-/linux/syslinux-nomtools
-/utils/gethostip
-/utils/isohdpfx.c
-/utils/isohybrid
-/utils/isohybrid.pl
-/utils/memdiskfind
-/utils/mkdiskimage
-/version.h
-/version.mk
similarity index 96%
rename from mk/syslinux.mk
rename to MCONFIG
index 6d87187..a71fd13 100644 (file)
+++ b/MCONFIG
@@ -53,9 +53,7 @@ OBJCOPY  = objcopy
 AR       = ar
 NM       = nm
 RANLIB   = ranlib
-STRIP   = strip
 GZIPPROG = gzip
-XZ      = xz
 PNGTOPNM = pngtopnm
 MCOPY    = mcopy
 MFORMAT  = mformat
@@ -79,7 +77,7 @@ UMAKEDEPS = -Wp,-MT,$@,-MMD,$(dir $@).$(notdir $@).d
 
 # Items that are only appropriate during development; this file is
 # removed when tarballs are generated.
--include $(MAKEDIR)/devel.mk
+-include $(topdir)/MCONFIG.devel
 
 # Local additions, like -DDEBUG can go here
--include $(MAKEDIR)/local.mk
+-include $(topdir)/MCONFIG.local
similarity index 97%
rename from mk/build.mk
rename to MCONFIG.build
index 0ca82be..d1abff2 100644 (file)
@@ -14,7 +14,7 @@
 ## Right now we don't distinguish between "build" system and the "host"
 ## system, although we really should...
 ##
-include $(MAKEDIR)/syslinux.mk
+include $(topdir)/MCONFIG
 
 OPTFLAGS   = -g -Os
 INCLUDES   =
similarity index 98%
rename from mk/embedded.mk
rename to MCONFIG.embedded
index e8f3ae3..9f5846d 100644 (file)
@@ -14,7 +14,7 @@
 ## Make configuration for embedded directories
 ##
 
-include $(MAKEDIR)/syslinux.mk
+include $(topdir)/MCONFIG
 
 GCCOPT    := $(call gcc_ok,-m32,)
 GCCOPT    += $(call gcc_ok,-ffreestanding,)
index 48b3420..60a5956 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -15,8 +15,7 @@
 # Main Makefile for SYSLINUX
 #
 topdir = .
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/syslinux.mk
+include $(topdir)/MCONFIG
 -include $(topdir)/version.mk
 
 #
@@ -98,13 +97,6 @@ installer:
 
 installer-local: $(ITARGET) $(BINFILES)
 
-strip:
-       $(MAKE) strip-local
-       set -e ; for i in $(ISUBDIRS); do $(MAKE) -C $$i strip ; done
-       -ls -l $(BOBJECTS) $(IOBJECTS)
-
-strip-local:
-
 version.gen: version version.pl
        $(PERL) version.pl $< $@ '%define < @'
 version.h: version version.pl
diff --git a/NEWS b/NEWS
index c89da2d..94c47ab 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,20 +2,6 @@ Starting with 1.47, changes marked with SYSLINUX, PXELINUX, ISOLINUX
 or EXTLINUX apply to that specific program only; other changes apply
 to all derivatives.
 
-Changes in 4.05:
-       * HDT updated, and now supports uploading data to a TFTP
-         server.
-       * ISOLINUX: remove the .img file support; it has been broken
-         on virtually all systems since the beginning, and has been
-         totally broken since 4.00 at least.  Use MEMDISK instead.
-       * chain.c32: Support chaining ReactOS' FreeLdr (Shao Miller)
-       * isohybrid: -m option to add support for Mac EFI booting.
-        * ifmemdsk.c32: Choose boot option based on presence of
-         MEMDISK.
-       * Remove bogus distributed mk-lba-img binary.
-       * The Syslinux project has a new, cool logo by Abi
-         "ixxvil" Rasheed (doc/logo/*).
-
 Changes in 4.04:
        * PXELINUX: Fix handling of unqualified DNS names.
        * PXELINUX: Fix timer bug when PXELINUX might be unloaded
similarity index 98%
rename from mk/com32.mk
rename to com32/MCONFIG
index 4a6caae..a74ed32 100644 (file)
@@ -15,7 +15,7 @@
 ## COM32 common configurables
 ##
 
-include $(MAKEDIR)/syslinux.mk
+include $(topdir)/MCONFIG
 
 GCCOPT := $(call gcc_ok,-std=gnu99,)
 GCCOPT += $(call gcc_ok,-m32,)
index da632a1..b090c40 100644 (file)
@@ -1,4 +1,4 @@
-SUBDIRS = libupload tools lib gpllib libutil modules mboot menu samples rosh cmenu \
+SUBDIRS = tools lib gpllib libutil modules mboot menu samples rosh cmenu \
          hdt gfxboot sysdump lua/src
 
 all tidy dist clean spotless install:
index 446bbcd..794af74 100644 (file)
 
 NOGPL := 1
 
-# This must be defined before com32.mk is included
+# This must be defined before MCONFIG is included
 LIBS   = libmenu/libmenu.a
 
 topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/com32.mk
+include ../MCONFIG
 
 CFLAGS   += -I./libmenu
 
index 14bf8fb..325c718 100755 (executable)
Binary files a/com32/cmenu/complex.c32 and b/com32/cmenu/complex.c32 differ
index c5bc1c3..0cabacb 100755 (executable)
Binary files a/com32/cmenu/display.c32 and b/com32/cmenu/display.c32 differ
index 49fcced..e84966d 100644 (file)
Binary files a/com32/cmenu/libmenu/com32io.o and b/com32/cmenu/libmenu/com32io.o differ
index c77fe15..fab2367 100644 (file)
Binary files a/com32/cmenu/libmenu/des.o and b/com32/cmenu/libmenu/des.o differ
index daa5b5a..28c4586 100644 (file)
Binary files a/com32/cmenu/libmenu/help.o and b/com32/cmenu/libmenu/help.o differ
index ad5a828..ea72169 100644 (file)
Binary files a/com32/cmenu/libmenu/libmenu.a and b/com32/cmenu/libmenu/libmenu.a differ
index ad5e37e..3dd53a9 100644 (file)
Binary files a/com32/cmenu/libmenu/menu.o and b/com32/cmenu/libmenu/menu.o differ
index 37c26e6..c8826fa 100644 (file)
Binary files a/com32/cmenu/libmenu/passwords.o and b/com32/cmenu/libmenu/passwords.o differ
index 8476179..cd56075 100644 (file)
Binary files a/com32/cmenu/libmenu/syslnx.o and b/com32/cmenu/libmenu/syslnx.o differ
index 119abb4..07b19c9 100644 (file)
Binary files a/com32/cmenu/libmenu/tui.o and b/com32/cmenu/libmenu/tui.o differ
index 4e731c7..abed02b 100755 (executable)
Binary files a/com32/cmenu/simple.c32 and b/com32/cmenu/simple.c32 differ
index a52fde5..b46e988 100755 (executable)
Binary files a/com32/cmenu/test.c32 and b/com32/cmenu/test.c32 differ
index 04c2ec6..01aeaa1 100755 (executable)
Binary files a/com32/cmenu/test2.c32 and b/com32/cmenu/test2.c32 differ
index 38d003c..5513876 100644 (file)
@@ -15,8 +15,7 @@
 ##
 
 topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/com32.mk
+include ../MCONFIG
 
 CFLAGS += -fPIE
 
index 183115f..73133e1 100644 (file)
@@ -12,8 +12,7 @@
 ## -----------------------------------------------------------------------
 
 topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/com32.mk
+include ../MCONFIG
 
 MODULES          = gfxboot.c32
 
index 35d180a..3749920 100644 (file)
@@ -102,8 +102,6 @@ typedef struct __attribute__ ((packed)) {
                                //    0: GFX_CB_MENU_INIT accepts 32 bit addresses
                                //    1: knows about xmem_start, xmem_end
   uint16_t reserved_1;         // 62:
-  uint32_t gfxboot_cwd;                // 64: if set, points to current gfxboot working directory relative
-                               //     to syslinux working directory
 } gfx_config_t;
 
 
@@ -183,7 +181,6 @@ int main(int argc, char **argv)
 {
   int menu_index;
   const union syslinux_derivative_info *sdi;
-  char working_dir[256];
 
   openconsole(&dev_stdcon_r, &dev_stdcon_w);
 
@@ -227,10 +224,6 @@ int main(int argc, char **argv)
     return 0;
   }
 
-  if(getcwd(working_dir, sizeof working_dir)) {
-    gfx_config.gfxboot_cwd = (uint32_t) working_dir;
-  }
-
   if(gfx_init(argv[1])) {
     printf("Error setting up gfxboot\n");
     if(argc > 2) show_message(argv[2]);
@@ -813,12 +806,6 @@ void boot(int index)
   int i, label_len;
   unsigned ipapp;
   const struct syslinux_ipappend_strings *ipappend;
-  char *gfxboot_cwd = (char *) gfx_config.gfxboot_cwd;
-
-  if(gfxboot_cwd) {
-    chdir(gfxboot_cwd);
-    gfx_config.gfxboot_cwd = 0;
-  }
 
   for(menu_ptr = menu; menu_ptr; menu_ptr = menu_ptr->next, index--) {
     if(!index) break;
@@ -935,15 +922,11 @@ void boot_entry(menu_t *menu_ptr, char *arg)
     *skip_nonspaces(s) = 0;
     initrd_arg = s;
   }
-  else if(initrd_arg) {
-    free(s0);
-    initrd_arg = s0 = strdup(initrd_arg);
-  }
 
   if(initrd_arg) {
     initrd = initramfs_init();
 
-    while((t = strsep(&initrd_arg, ","))) {
+    while((t = strsep(&s, ","))) {
       initrd_buf = load_one(t, &initrd_size);
 
       if(!initrd_buf) {
index 12962c7..1900598 100755 (executable)
Binary files a/com32/gfxboot/gfxboot.c32 and b/com32/gfxboot/gfxboot.c32 differ
index bf3ffdb..94589f3 100644 (file)
@@ -95,5 +95,4 @@ void parse_madt(s_acpi * acpi);
 int search_rsdp(s_acpi *acpi);
 void get_acpi_description_header(uint8_t *q, s_acpi_description_header * adh);
 bool parse_header(uint64_t *address, s_acpi *acpi);
-char *flags_to_string(char *buffer, uint16_t flags);
 #endif
index 6a33e9c..53a0808 100644 (file)
 
 #include <stdbool.h>
 #include <stdint.h>
-#include <stdio.h>
 #include <cpufeature.h>
 #include <sys/bitops.h>
 #include <sys/cpu.h>
-#include <sys/io.h>
 #include <klibc/compiler.h>
 
 #define PAGE_SIZE 4096
 #define CPU_MODEL_SIZE  48
 #define CPU_VENDOR_SIZE 48
 
-#define CPU_FLAGS(m_) \
-m_(bool,  fpu,                         /* Onboard FPU */) \
-m_(bool,  vme,                         /* Virtual Mode Extensions */) \
-m_(bool,  de,                  /* Debugging Extensions */) \
-m_(bool,  pse,                 /* Page Size Extensions */) \
-m_(bool,  tsc,                 /* Time Stamp Counter */) \
-m_(bool,  msr,                 /* Model-Specific Registers, RDMSR, WRMSR */) \
-m_(bool,  pae,                 /* Physical Address Extensions */) \
-m_(bool,  mce,                 /* Machine Check Architecture */) \
-m_(bool,  cx8,                 /* CMPXCHG8 instruction */) \
-m_(bool,  apic,                        /* Onboard APIC */) \
-m_(bool,  sep,                 /* SYSENTER/SYSEXIT */) \
-m_(bool,  mtrr,                        /* Memory Type Range Registers */) \
-m_(bool,  pge,                 /* Page Global Enable */) \
-m_(bool,  mca,                 /* Machine Check Architecture */) \
-m_(bool,  cmov,                        /* CMOV instruction (FCMOVCC and FCOMI too if FPU present) */) \
-m_(bool,  pat,                 /* Page Attribute Table */) \
-m_(bool,  pse_36,              /* 36-bit PSEs */) \
-m_(bool,  psn,                 /* Processor serial number */) \
-m_(bool,  clflsh,              /* Supports the CLFLUSH instruction */) \
-m_(bool,  dts,                 /* Debug Trace Store */) \
-m_(bool,  acpi,                        /* ACPI via MSR */) \
-m_(bool,  pbe,                 /* Pending Break Enable */) \
-m_(bool,  mmx,                 /* Multimedia Extensions */) \
-m_(bool,  fxsr,                        /* FXSAVE and FXRSTOR instructions (fast save and restore of FPU context), and CR4.OSFXSR available */) \
-m_(bool,  sse,                 /* Streaming SIMD Extensions */) \
-m_(bool,  sse2,                        /* Streaming SIMD Extensions 2 */) \
-m_(bool,  ss,                  /* CPU self snoop */) \
-m_(bool,  htt,                 /* Hyper-Threading */) \
-m_(bool,  acc,                 /* Automatic clock control */) \
-m_(bool,  syscall,             /* SYSCALL/SYSRET */) \
-m_(bool,  mp,                  /* MP Capable. */) \
-m_(bool,  nx,                  /* Execute Disable */) \
-m_(bool,  mmxext,              /* AMD MMX extensions */) \
-m_(bool,  fxsr_opt,            /* FXSAVE/FXRSTOR optimizations */) \
-m_(bool,  gbpages,             /* "pdpe1gb" GB pages */) \
-m_(bool,  rdtscp,              /* RDTSCP */) \
-m_(bool,  lm,                  /* Long Mode (x86-64) */) \
-m_(bool,  nowext,              /* AMD 3DNow! extensions */) \
-m_(bool,  now,                 /* 3DNow! */) \
-m_(bool,  smp,                 /* A smp configuration has been found */) \
-m_(bool,  pni,                 /* Streaming SIMD Extensions-3 */) \
-m_(bool,  pclmulqd,            /* PCLMULQDQ instruction */) \
-m_(bool,  dtes64,              /* 64-bit Debug Store */) \
-m_(bool,  vmx,                 /* Hardware virtualization */) \
-m_(bool,  smx,                 /* Safer Mode */) \
-m_(bool,  est,                 /* Enhanced SpeedStep */) \
-m_(bool,  tm2,                 /* Thermal Monitor 2  */) \
-m_(bool,  sse3,                        /* Supplemental SSE-3 */) \
-m_(bool,  cid,                 /* Context ID */) \
-m_(bool,  fma,                 /* Fused multiply-add  */) \
-m_(bool,  cx16,                        /* CMPXCHG16B */) \
-m_(bool,  xtpr,                        /* Send Task Priority Messages */) \
-m_(bool,  pdcm,                        /* Performance Capabilities  */) \
-m_(bool,  dca,                 /* Direct Cache Access */) \
-m_(bool,  xmm4_1,              /* "sse4_1" SSE-4.1 */) \
-m_(bool,  xmm4_2,              /* "sse4_2" SSE-4.2 */) \
-m_(bool,  x2apic,              /* x2APIC */) \
-m_(bool,  movbe,                       /* MOVBE instruction */) \
-m_(bool,  popcnt,              /* POPCNT instruction */) \
-m_(bool,  aes,                 /* AES Instruction */) \
-m_(bool,  xsave,                       /* XSAVE/XRSTOR/XSETBV/XGETBV */) \
-m_(bool,  osxsave,             /* XSAVE enabled in the OS */) \
-m_(bool,  avx,                 /* Advanced Vector Extensions */) \
-m_(bool,  hypervisor,          /* Running on a hypervisor */) \
-m_(bool,  ace2,                        /* Advanced Cryptography Engine v2 */) \
-m_(bool,  ace2_en,             /* ACE v2 enabled */) \
-m_(bool,  phe,                 /* PadLock Hash Engine */) \
-m_(bool,  phe_en,              /* PadLock Hash Engine Enabled */) \
-m_(bool,  pmm,                 /* PadLock Montgomery Multiplier */) \
-m_(bool,  pmm_en,              /* PadLock Montgomery Multiplier enabled */) \
-m_(bool,  svm,                 /* Secure virtual machine */) \
-m_(bool,  extapic,             /* Extended APIC space */) \
-m_(bool,  cr8_legacy,          /* CR8 in 32-bit mode */) \
-m_(bool,  abm,                 /* Advanced bit manipulation */) \
-m_(bool,  sse4a,                       /* SSE4-A */) \
-m_(bool,  misalignsse,         /* Misaligned SSE mode */) \
-m_(bool,  nowprefetch,         /* 3DNow prefetch instructions */) \
-m_(bool,  osvw,                        /* OS Visible Workaround */) \
-m_(bool,  ibs,                 /*  Instruction Based Sampling */) \
-m_(bool,  sse5,                        /* SSE5 */) \
-m_(bool,  skinit,              /* SKINIT/STGI instructions */) \
-m_(bool,  wdt,                 /* Watchdog Timer */) \
-m_(bool,  ida,                 /* Intel Dynamic Acceleration */) \
-m_(bool,  arat,                        /* Always Running APIC Timer */) \
-m_(bool,  tpr_shadow,          /* Intel TPR Shadow */) \
-m_(bool,  vnmi,                        /* Intel Virtual NMI */) \
-m_(bool,  flexpriority,                /* Intel FlexPriority */) \
-m_(bool,  ept,                 /* Intel Extended Page Table */) \
-m_(bool,  vpid,                        /* Intel Virtual Processor ID */)
-
-#define STRUCT_MEMBERS(type_, name_, comment_) type_ name_;
-
-#define STRUCT_MEMBER_NAMES(type_, name_, comment_) #name_ , 
-
-#define STRUCTURE_MEMBER_OFFSETS(type_, name_, comment_) \
-         offsetof(s_cpu_flags, name_),
-
 typedef struct {
-    CPU_FLAGS(STRUCT_MEMBERS)
+    bool fpu;                  /* Onboard FPU */
+    bool vme;                  /* Virtual Mode Extensions */
+    bool de;                   /* Debugging Extensions */
+    bool pse;                  /* Page Size Extensions */
+    bool tsc;                  /* Time Stamp Counter */
+    bool msr;                  /* Model-Specific Registers, RDMSR, WRMSR */
+    bool pae;                  /* Physical Address Extensions */
+    bool mce;                  /* Machine Check Architecture */
+    bool cx8;                  /* CMPXCHG8 instruction */
+    bool apic;                 /* Onboard APIC */
+    bool sep;                  /* SYSENTER/SYSEXIT */
+    bool mtrr;                 /* Memory Type Range Registers */
+    bool pge;                  /* Page Global Enable */
+    bool mca;                  /* Machine Check Architecture */
+    bool cmov;                 /* CMOV instruction (FCMOVCC and FCOMI too if FPU present) */
+    bool pat;                  /* Page Attribute Table */
+    bool pse_36;               /* 36-bit PSEs */
+    bool psn;                  /* Processor serial number */
+    bool clflsh;               /* Supports the CLFLUSH instruction */
+    bool dts;                  /* Debug Trace Store */
+    bool acpi;                 /* ACPI via MSR */
+    bool pbe;                  /* Pending Break Enable */
+    bool mmx;                  /* Multimedia Extensions */
+    bool fxsr;                 /* FXSAVE and FXRSTOR instructions (fast save and restore */
+    /* of FPU context), and CR4.OSFXSR available */
+    bool sse;                  /* Streaming SIMD Extensions */
+    bool sse2;                 /* Streaming SIMD Extensions 2 */
+    bool ss;                   /* CPU self snoop */
+    bool htt;                  /* Hyper-Threading */
+    bool acc;                  /* Automatic clock control */
+    bool syscall;              /* SYSCALL/SYSRET */
+    bool mp;                   /* MP Capable. */
+    bool nx;                   /* Execute Disable */
+    bool mmxext;               /* AMD MMX extensions */
+    bool fxsr_opt;             /* FXSAVE/FXRSTOR optimizations */
+    bool gbpages;              /* "pdpe1gb" GB pages */
+    bool rdtscp;               /* RDTSCP */
+    bool lm;                   /* Long Mode (x86-64) */
+    bool nowext;               /* AMD 3DNow! extensions */
+    bool now;                  /* 3DNow! */
+    bool smp;                  /* A smp configuration has been found */
+    bool pni;                  /* Streaming SIMD Extensions-3 */
+    bool pclmulqd;             /* PCLMULQDQ instruction */
+    bool dtes64;               /* 64-bit Debug Store */
+    bool vmx;                  /* Hardware virtualization */
+    bool smx;                  /* Safer Mode */
+    bool est;                  /* Enhanced SpeedStep */
+    bool tm2;                  /* Thermal Monitor 2  */
+    bool sse3;                 /* Supplemental SSE-3 */
+    bool cid;                  /* Context ID */
+    bool fma;                  /* Fused multiply-add  */
+    bool cx16;                 /* CMPXCHG16B */
+    bool xtpr;                 /* Send Task Priority Messages */
+    bool pdcm;                 /* Performance Capabilities  */
+    bool dca;                  /* Direct Cache Access */
+    bool xmm4_1;               /* "sse4_1" SSE-4.1 */
+    bool xmm4_2;               /* "sse4_2" SSE-4.2 */
+    bool x2apic;               /* x2APIC */
+    bool movbe;                        /* MOVBE instruction */
+    bool popcnt;               /* POPCNT instruction */
+    bool aes;                  /* AES Instruction */
+    bool xsave;                        /* XSAVE/XRSTOR/XSETBV/XGETBV */
+    bool osxsave;              /* XSAVE enabled in the OS */
+    bool avx;                  /* Advanced Vector Extensions */
+    bool hypervisor;           /* Running on a hypervisor */
+    bool ace2;                 /* Advanced Cryptography Engine v2 */
+    bool ace2_en;              /* ACE v2 enabled */
+    bool phe;                  /* PadLock Hash Engine */
+    bool phe_en;               /* PadLock Hash Engine Enabled */
+    bool pmm;                  /* PadLock Montgomery Multiplier */
+    bool pmm_en;               /* PadLock Montgomery Multiplier enabled */
+    bool svm;                  /* Secure virtual machine */
+    bool extapic;              /* Extended APIC space */
+    bool cr8_legacy;           /* CR8 in 32-bit mode */
+    bool abm;                  /* Advanced bit manipulation */
+    bool sse4a;                        /* SSE4-A */
+    bool misalignsse;          /* Misaligned SSE mode */
+    bool nowprefetch;          /* 3DNow prefetch instructions */
+    bool osvw;                 /* OS Visible Workaround */
+    bool ibs;                  /*  Instruction Based Sampling */
+    bool sse5;                 /* SSE5 */
+    bool skinit;               /* SKINIT/STGI instructions */
+    bool wdt;                  /* Watchdog Timer */
+    bool ida;                  /* Intel Dynamic Acceleration */
+    bool arat;                 /* Always Running APIC Timer */
+    bool tpr_shadow;           /* Intel TPR Shadow */
+    bool vnmi;                 /* Intel Virtual NMI */
+    bool flexpriority;         /* Intel FlexPriority */
+    bool ept;                  /* Intel Extended Page Table */
+    bool vpid;                 /* Intel Virtual Processor ID */
 } s_cpu_flags;
 
-extern size_t cpu_flags_offset[];
-extern const char *cpu_flags_names[];
-extern size_t cpu_flags_count;
-
 typedef struct {
     char vendor[CPU_VENDOR_SIZE];
     uint8_t vendor_id;
@@ -150,7 +135,6 @@ typedef struct {
     s_cpu_flags flags;
 } s_cpu;
 
-extern bool get_cpu_flag_value_from_name(s_cpu *cpu, const char * flag);
 /**********************************************************************************/
 /**********************************************************************************/
 /* From this point this is some internal stuff mainly taken from the linux kernel */
@@ -187,37 +171,11 @@ extern bool get_cpu_flag_value_from_name(s_cpu *cpu, const char * flag);
 #define X86_VENDOR_RISE 6
 #define X86_VENDOR_TRANSMETA 7
 #define X86_VENDOR_NSC 8
-#define X86_VENDOR_UNKNOWN 9 
-#define X86_VENDOR_NUM 10 
+#define X86_VENDOR_NUM 9
+#define X86_VENDOR_UNKNOWN 0xff
 
 #define cpu_has(c, bit)                test_bit(bit, (c)->x86_capability)
 
-// Taken from asm/processor-flags.h
-// NSC/Cyrix CPU configuration register indexes
-#define CX86_CCR2       0xc2
-#define CX86_CCR3      0xc3
-#define CX86_DIR0       0xfe
-#define CX86_DIR1       0xff
-
-static const char Cx86_model[][9] = {
-       "Cx486", "Cx486", "5x86 ", "6x86", "MediaGX ", "6x86MX ",
-       "M II ", "Unknown"
-};
-
-static const char Cx486_name[][5] = {
-       "SLC", "DLC", "SLC2", "DLC2", "SRx", "DRx",
-       "SRx2", "DRx2"
-};
-
-static const char Cx486S_name[][4] = {
-       "S", "S2", "Se", "S2e"
-};
-
-static const char Cx486D_name[][4] = {
-       "DX", "DX2", "?", "?", "?", "DX4"
-};
-
-
 /*
  *  CPU type and hardware bug flags. Kept separately for each CPU.
  *  Members of this structure are referenced in head.S, so think twice
@@ -302,16 +260,6 @@ struct intel_mp_floating {
     uint8_t mpf_feature5;      /* Unused (0)                   */
 };
 
-static inline uint8_t getCx86(uint8_t reg) {
-       outb(reg, 0x22);
-       return inb(0x23);
-}
-
-static inline void setCx86(uint8_t reg, uint8_t data) {
-       outb(reg, 0x22);
-       outb(data, 0x23);
-}
-
 extern void get_cpu_vendor(struct cpuinfo_x86 *c);
 extern void detect_cpu(s_cpu * cpu);
 #endif
diff --git a/com32/gplinclude/zzjson/zzjson.h b/com32/gplinclude/zzjson/zzjson.h
deleted file mode 100644 (file)
index d4b32e1..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/* ZZJSON - Copyright (C) 2008 by Ivo van Poorten
- * License: GNU Lesser General Public License version 2.1
- */
-#ifndef ZZJSON_H
-#define ZZJSON_H
-
-#include <stdlib.h>
-
-/* Version: */
-
-#define ZZJSON_VERSION_MAJOR    1
-#define ZZJSON_VERSION_MINOR    1
-#define ZZJSON_VERSION_MICRO    0
-#define ZZJSON_VERSION_INT      ( 1<<16 | 1<<8 | 0 )
-#define ZZJSON_IDENT            "zzjson 1.1.0"
-
-/* Defines: */
-
-#define ZZJSON_ALLOW_EXTRA_COMMA        1
-#define ZZJSON_ALLOW_ILLEGAL_ESCAPE     2
-#define ZZJSON_ALLOW_CONTROL_CHARS      4
-#define ZZJSON_ALLOW_GARBAGE_AT_END     8
-#define ZZJSON_ALLOW_COMMENTS           16
-
-#define ZZJSON_VERY_LOOSE               (-1)
-#define ZZJSON_VERY_STRICT              0
-
-/* Types: */
-
-/* needed by: pa = parser, pr = printer, f = free, q = query, c = create */
-typedef struct ZZJSON_CONFIG {
-    int strictness;                                        // pa
-    void *ihandle;                                         // pa
-    int (*getchar)(void *ihandle);                         // pa
-    int (*ungetchar)(int c, void *ihandle);                // pa
-    void *(*malloc)(size_t size);                          // pa      c
-    void *(*calloc)(size_t nmemb, size_t size);            // pa      c
-    void (*free)(void *ptr);                               // pa    f c
-    void *(*realloc)(void *ptr, size_t size);              // pa
-    void *ehandle;                                         // pa pr   c
-    void (*error)(void *ehandle, const char *format, ...); // pa pr   c
-    void *ohandle;                                         //    pr
-    int (*print)(void *ohandle, const char *format, ...);  //    pr
-    int (*putchar)(int c, void *handle);                   //    pr
-} ZZJSON_CONFIG;
-
-typedef enum ZZJSON_TYPE {
-    ZZJSON_NONE = 0,
-    ZZJSON_OBJECT,
-    ZZJSON_ARRAY,
-    ZZJSON_STRING,
-    ZZJSON_NUMBER_NEGINT,
-    ZZJSON_NUMBER_POSINT,
-    ZZJSON_NUMBER_DOUBLE,
-    ZZJSON_NULL,
-    ZZJSON_TRUE,
-    ZZJSON_FALSE
-} ZZJSON_TYPE;
-
-typedef struct ZZJSON {
-    ZZJSON_TYPE type;
-    union {
-        struct {
-            char *label;
-            struct ZZJSON *val;
-        } object;
-        struct {
-            struct ZZJSON *val;
-        } array;
-        struct {
-            char *string;
-        } string;
-        struct {
-            union {
-                unsigned long long ival;
-                double             dval;
-            } val;
-        } number;
-    } value;
-    struct ZZJSON *next;
-} ZZJSON;
-
-/* Functions: */
-
-ZZJSON *zzjson_parse(ZZJSON_CONFIG *config);
-void zzjson_free(ZZJSON_CONFIG *config, ZZJSON *zzjson);
-int zzjson_print(ZZJSON_CONFIG *config, ZZJSON *zzjson);
-
-ZZJSON *zzjson_object_find_label(ZZJSON *zzjson, char *label);
-ZZJSON *zzjson_object_find_labels(ZZJSON *zzjson, ...); // end with , NULL
-unsigned int zzjson_object_count(ZZJSON *zzjson);
-unsigned int zzjson_array_count(ZZJSON *zzjson);
-
-ZZJSON *zzjson_create_true(ZZJSON_CONFIG *config);
-ZZJSON *zzjson_create_false(ZZJSON_CONFIG *config);
-ZZJSON *zzjson_create_null(ZZJSON_CONFIG *config);
-ZZJSON *zzjson_create_number_d(ZZJSON_CONFIG *config, double d);
-ZZJSON *zzjson_create_number_i(ZZJSON_CONFIG *config, long long i);
-ZZJSON *zzjson_create_string(ZZJSON_CONFIG *config, char *s);
-
-/* list of ZZJSON *'s and end with , NULL */
-ZZJSON *zzjson_create_array(ZZJSON_CONFIG *config, ...);
-
-/* list of char*,ZZJSON* pairs, end with , NULL */
-ZZJSON *zzjson_create_object(ZZJSON_CONFIG *config, ...);
-
-ZZJSON *zzjson_array_prepend(ZZJSON_CONFIG *config, ZZJSON *array,
-                                                    ZZJSON *val);
-ZZJSON *zzjson_array_append (ZZJSON_CONFIG *config, ZZJSON *array,
-                                                    ZZJSON *val);
-
-ZZJSON *zzjson_object_prepend(ZZJSON_CONFIG *config, ZZJSON *object,
-                                        char *label, ZZJSON *val);
-ZZJSON *zzjson_object_append (ZZJSON_CONFIG *config, ZZJSON *object,
-                                        char *label, ZZJSON *val);
-#endif
index 4b7b846..a174061 100644 (file)
@@ -4,12 +4,11 @@
 
 # Include configuration rules
 topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/lib.mk
+include ../lib/MCONFIG
 
-REQFLAGS += -I../gplinclude -I../gplinclude/zzjson
+REQFLAGS += -I../gplinclude
 
-GPLDIRS := . disk dmi vpd acpi zzjson
+GPLDIRS := . disk dmi vpd acpi
 LIBOBJS := $(foreach dir,$(GPLDIRS),$(patsubst %.c,%.o,$(wildcard $(dir)/*.c)))
 
 BINDIR   = /usr/bin
index d2bf29e..8e5ee29 100644 (file)
 #include <memory.h>
 #include "acpi/acpi.h"
 
-/* M1PS flags have to be interpreted as strings */
-char *flags_to_string(char *buffer, uint16_t flags)
-{
-    memset(buffer, 0, sizeof(buffer));
-    strcpy(buffer, "default");
-    if ((flags & POLARITY_ACTIVE_HIGH) == POLARITY_ACTIVE_HIGH)
-       strcpy(buffer, "high");
-    else if ((flags & POLARITY_ACTIVE_LOW) == POLARITY_ACTIVE_LOW)
-       strcpy(buffer, "low");
-    if ((flags & TRIGGER_EDGE) == TRIGGER_EDGE)
-       strncat(buffer, " edge", 5);
-    else if ((flags & TRIGGER_LEVEL) == TRIGGER_LEVEL)
-       strncat(buffer, " level", 6);
-    else
-       strncat(buffer, " default", 8);
-
-    return buffer;
-}
-
 void dbg_printf(const char *fmt, ...)
 {
        va_list args;
index 2abd0bd..2d5b5ce 100644 (file)
 #include <string.h>
 #include "cpuid.h"
 
-const char *cpu_flags_names[] = {
-    CPU_FLAGS(STRUCT_MEMBER_NAMES)
-};
-
-size_t cpu_flags_offset[] = {
-    CPU_FLAGS(STRUCTURE_MEMBER_OFFSETS)
-};
-
-size_t cpu_flags_count = sizeof cpu_flags_names / sizeof *cpu_flags_names;
-
 struct cpu_dev *cpu_devs[X86_VENDOR_NUM] = { };
 
-bool get_cpu_flag_value_from_name(s_cpu *cpu, const char * flag_name) {
-    size_t i;
-    bool cpu_flag_present=false, *flag_value = &cpu_flag_present;
-
-    for (i = 0; i < cpu_flags_count; i++) {
-       if (strcmp(cpu_flags_names[i],flag_name) == 0) {
-               flag_value = (bool *)((char *)&cpu->flags + cpu_flags_offset[i]);
-       }
-    }
-    return *flag_value;
-}
-
-
 /*
 * CPUID functions returning a single datum
 */
@@ -96,48 +73,6 @@ static struct cpu_dev transmeta_cpu_dev = {
     .c_ident = {"GenuineTMx86", "TransmetaCPU"}
 };
 
-static struct cpu_dev nsc_cpu_dev = {
-    .c_vendor = "National Semiconductor",
-    .c_ident = {"Geode by NSC"}
-};
-
-static struct cpu_dev unknown_cpu_dev = {
-    .c_vendor = "Unknown Vendor",
-    .c_ident = {"Unknown CPU"}
-};
-
-/*
- * Read NSC/Cyrix DEVID registers (DIR) to get more detailed info. about the CPU
- */
-void do_cyrix_devid(unsigned char *dir0, unsigned char *dir1)
-{
-       unsigned char ccr2, ccr3;
-
-       /* we test for DEVID by checking whether CCR3 is writable */
-       ccr3 = getCx86(CX86_CCR3);
-       setCx86(CX86_CCR3, ccr3 ^ 0x80);
-       getCx86(0xc0);   /* dummy to change bus */
-
-       if (getCx86(CX86_CCR3) == ccr3) {       /* no DEVID regs. */
-               ccr2 = getCx86(CX86_CCR2);
-               setCx86(CX86_CCR2, ccr2 ^ 0x04);
-               getCx86(0xc0);  /* dummy */
-
-               if (getCx86(CX86_CCR2) == ccr2) /* old Cx486SLC/DLC */
-                       *dir0 = 0xfd;
-               else {                          /* Cx486S A step */
-                       setCx86(CX86_CCR2, ccr2);
-                       *dir0 = 0xfe;
-               }
-       } else {
-               setCx86(CX86_CCR3, ccr3);  /* restore CCR3 */
-
-               /* read DIR0 and DIR1 CPU registers */
-               *dir0 = getCx86(CX86_DIR0);
-               *dir1 = getCx86(CX86_DIR1);
-       }
-}
-
 void init_cpu_devs(void)
 {
     cpu_devs[X86_VENDOR_INTEL] = &intel_cpu_dev;
@@ -148,8 +83,6 @@ void init_cpu_devs(void)
     cpu_devs[X86_VENDOR_CENTAUR] = &centaur_cpu_dev;
     cpu_devs[X86_VENDOR_RISE] = &rise_cpu_dev;
     cpu_devs[X86_VENDOR_TRANSMETA] = &transmeta_cpu_dev;
-    cpu_devs[X86_VENDOR_NSC] = &nsc_cpu_dev;
-    cpu_devs[X86_VENDOR_UNKNOWN] = &unknown_cpu_dev;
 }
 
 void get_cpu_vendor(struct cpuinfo_x86 *c)
@@ -157,7 +90,7 @@ void get_cpu_vendor(struct cpuinfo_x86 *c)
     char *v = c->x86_vendor_id;
     int i;
     init_cpu_devs();
-    for (i = 0; i < X86_VENDOR_NUM-1; i++) {
+    for (i = 0; i < X86_VENDOR_NUM; i++) {
        if (cpu_devs[i]) {
            if (!strcmp(v, cpu_devs[i]->c_ident[0]) ||
                (cpu_devs[i]->c_ident[1] &&
@@ -244,96 +177,6 @@ void detect_cache(uint32_t xlvl, struct cpuinfo_x86 *c)
     c->x86_l2_cache_size = l2size;
 }
 
-void detect_cyrix(struct cpuinfo_x86 *c) {
-       unsigned char dir0, dir0_msn, dir0_lsn, dir1 = 0;
-        char *buf = c->x86_model_id;
-       char Cx86_cb[] = "?.5x Core/Bus Clock";
-       const char cyrix_model_mult1[] = "12??43";
-       const char cyrix_model_mult2[] = "12233445";
-        const char *p = NULL;
-
-       do_cyrix_devid(&dir0, &dir1);
-       dir0_msn = dir0 >> 4; /* identifies CPU "family"   */
-       dir0_lsn = dir0 & 0xf;                /* model or clock multiplier */
-       c->x86_model = (dir1 >> 4) + 1;
-        c->x86_mask = dir1 & 0xf;
-       switch (dir0_msn) {
-               unsigned char tmp;
-
-               case 0: /* Cx486SLC/DLC/SRx/DRx */
-                        p = Cx486_name[dir0_lsn & 7];
-                        break;
-       
-               case 1: /* Cx486S/DX/DX2/DX4 */
-                        p = (dir0_lsn & 8) ? Cx486D_name[dir0_lsn & 5] : Cx486S_name[dir0_lsn & 3];
-                        break;
-
-                case 2: /* 5x86 */
-                        Cx86_cb[2] = cyrix_model_mult1[dir0_lsn & 5];
-                        p = Cx86_cb+2;
-                        break;
-
-               case 3: /* 6x86/6x86L */
-                          Cx86_cb[1] = ' ';
-                          Cx86_cb[2] = cyrix_model_mult1[dir0_lsn & 5];
-                          if (dir1 > 0x21) { /* 686L */
-                                  Cx86_cb[0] = 'L';
-                                  p = Cx86_cb;
-                                  (c->x86_model)++;
-                          } else             /* 686 */
-                                  p = Cx86_cb+1;
-                          
-                          c->coma_bug = 1;
-                          break;
-               case 4:
-                          c->x86_l1_data_cache_size = 16; /* Yep 16K integrated cache thats it */
-                          if (c->cpuid_level != 2) { /* Media GX */
-                                  Cx86_cb[2] = (dir0_lsn & 1) ? '3' : '4';
-                                  p = Cx86_cb+2;
-                          }
-                          break;
-               
-               case 5: /* 6x86MX/M II */
-                          if (dir1 > 7) {
-                                  dir0_msn++;  /* M II */
-                          } else {
-                                  c->coma_bug = 1;      /* 6x86MX, it has the bug. */
-                          }
-
-                          tmp = (!(dir0_lsn & 7) || dir0_lsn & 1) ? 2 : 0;
-                          Cx86_cb[tmp] = cyrix_model_mult2[dir0_lsn & 7];
-                          p = Cx86_cb+tmp;
-                          if (((dir1 & 0x0f) > 4) || ((dir1 & 0xf0) == 0x20))
-                                  (c->x86_model)++;
-                          break;
-               
-               case 0xf:  /* Cyrix 486 without DEVID registers */
-                          switch (dir0_lsn) {
-                                  case 0xd:  /* either a 486SLC or DLC w/o DEVID */
-                                          dir0_msn = 0; 
-                                          p = Cx486_name[(c->hard_math) ? 1 : 0];
-                                          break;
-                                  
-                                  case 0xe:  /* a 486S A step */
-                                          dir0_msn = 0;
-                                          p = Cx486S_name[0];
-                                          break;
-                          }
-                          break;
-                          
-               default:
-                          dir0_msn = 7;
-                          break;
-       }
-
-       /* If the processor is unknown, we keep the model name we got
-        * from the generic call */
-       if (dir0_msn < 7) {     
-               strcpy(buf, Cx86_model[dir0_msn & 7]);
-               if (p) strcat(buf, p);
-       }
-}
-
 void generic_identify(struct cpuinfo_x86 *c)
 {
     uint32_t tfms, xlvl;
@@ -379,13 +222,6 @@ void generic_identify(struct cpuinfo_x86 *c)
            get_model_name(c);  /* Default name */
     }
 
-    /* Specific detection code */
-    switch (c->x86_vendor) {
-           case X86_VENDOR_CYRIX:
-           case X86_VENDOR_NSC: detect_cyrix(c); break;
-           default: break;
-    }
-
     /* Detecting the number of cores */
     switch (c->x86_vendor) {
     case X86_VENDOR_AMD:
@@ -599,12 +435,17 @@ void set_generic_info(struct cpuinfo_x86 *c, s_cpu * cpu)
 void detect_cpu(s_cpu * cpu)
 {
     struct cpuinfo_x86 c;
-    memset(&c,0,sizeof(c));
     c.x86_clflush_size = 32;
+    c.x86_l1_data_cache_size = 0;
+    c.x86_l1_instruction_cache_size = 0;
+    c.x86_l2_cache_size = 0;
     c.x86_vendor = X86_VENDOR_UNKNOWN;
     c.cpuid_level = -1;                /* CPUID not detected */
+    c.x86_model = c.x86_mask = 0;      /* So far unknown... */
     c.x86_num_cores = 1;
-    memset(&cpu->flags, 0, sizeof(s_cpu_flags));
+    memset(&c.x86_capability, 0, sizeof(c.x86_capability));
+    memset(&c.x86_vendor_id, 0, sizeof(c.x86_vendor_id));
+    memset(&c.x86_model_id, 0, sizeof(c.x86_model_id));
 
     if (!have_cpuid_p())
        return;
diff --git a/com32/gpllib/zzjson/zzjson_create.c b/com32/gpllib/zzjson/zzjson_create.c
deleted file mode 100644 (file)
index 7e6bd5b..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/* JSON Create ZZJSON structures
- * ZZJSON - Copyright (C) 2008 by Ivo van Poorten
- * License: GNU Lesser General Public License version 2.1
- */
-
-#include "zzjson.h"
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-
-#ifdef CONFIG_NO_ERROR_MESSAGES
-#define ERROR(x...)
-#else
-#define ERROR(x...)     config->error(config->ehandle, ##x)
-#endif
-#define MEMERROR()      ERROR("out of memory")
-
-static ZZJSON *zzjson_create_templ(ZZJSON_CONFIG *config, ZZJSON_TYPE type) {
-    ZZJSON *zzjson = config->calloc(1, sizeof(ZZJSON));
-    if (!zzjson) MEMERROR();
-    else         zzjson->type = type;
-    return zzjson;
-}
-
-ZZJSON *zzjson_create_true(ZZJSON_CONFIG *config) {
-    return zzjson_create_templ(config, ZZJSON_TRUE);
-}
-
-ZZJSON *zzjson_create_false(ZZJSON_CONFIG *config) {
-    return zzjson_create_templ(config, ZZJSON_FALSE);
-}
-
-ZZJSON *zzjson_create_null(ZZJSON_CONFIG *config) {
-    return zzjson_create_templ(config, ZZJSON_NULL);
-}
-
-ZZJSON *zzjson_create_number_d(ZZJSON_CONFIG *config, double d) {
-    ZZJSON *zzjson = zzjson_create_templ(config, ZZJSON_NUMBER_DOUBLE);
-    if (zzjson)
-        zzjson->value.number.val.dval = d;
-    return zzjson;
-}
-
-ZZJSON *zzjson_create_number_i(ZZJSON_CONFIG *config, long long i) {
-    ZZJSON *zzjson = zzjson_create_templ(config, ZZJSON_NUMBER_NEGINT);
-    if (zzjson) {
-        zzjson->type = i<0LL ? ZZJSON_NUMBER_NEGINT : ZZJSON_NUMBER_POSINT;
-        zzjson->value.number.val.ival = llabs(i);
-    }
-    return zzjson;
-}
-
-/* sdup mimics strdup, but avoids having another function pointer in config */
-static char *sdup(ZZJSON_CONFIG *config, char *s) {
-    size_t slen = strlen(s)+1;
-    char *scopy = config->malloc(slen);
-
-    if (!scopy) MEMERROR();
-    else        memcpy(scopy, s, slen);
-    return scopy;
-}
-
-ZZJSON *zzjson_create_string(ZZJSON_CONFIG *config, char *s) {
-    ZZJSON *zzjson = NULL;
-    char *scopy;
-        
-    if (!(scopy = sdup(config,s))) return zzjson;
-
-    if ((zzjson = zzjson_create_templ(config, ZZJSON_STRING)))
-        zzjson->value.string.string = scopy;
-    else
-        config->free(scopy);
-
-    return zzjson;
-}
-
-ZZJSON *zzjson_create_array(ZZJSON_CONFIG *config, ...) {
-    ZZJSON *zzjson, *retval, *val;
-    va_list ap;
-
-    if (!(zzjson = zzjson_create_templ(config, ZZJSON_ARRAY))) return zzjson;
-    retval = zzjson;
-
-    va_start(ap, config);
-    val = va_arg(ap, ZZJSON *);
-    while (val) {
-        zzjson->value.array.val = val;
-        val = va_arg(ap, ZZJSON *);
-
-        if (val) {
-            ZZJSON *next = zzjson_create_templ(config, ZZJSON_ARRAY);
-            if (!next) {
-                while (retval) {
-                    next = retval->next;
-                    config->free(retval);
-                    retval = next;
-                }
-                break;
-            }
-            zzjson->next = next;
-            zzjson = next;
-        }
-    }
-    va_end(ap);
-    return retval;
-}
-
-ZZJSON *zzjson_create_object(ZZJSON_CONFIG *config, ...) {
-    ZZJSON *zzjson, *retval, *val;
-    char *label, *labelcopy;
-    va_list ap;
-
-    if (!(zzjson = zzjson_create_templ(config, ZZJSON_OBJECT))) return zzjson;
-    retval = zzjson;
-
-    va_start(ap, config);
-    label = va_arg(ap, char *);
-    while (label) {
-        val = va_arg(ap, ZZJSON *);
-        labelcopy = sdup(config, label);
-
-        if (!labelcopy) {
-            zzjson_free(config, retval);
-            retval = NULL;
-            break;
-        }
-
-        zzjson->value.object.label  = labelcopy;
-        zzjson->value.object.val    = val;
-
-        label = va_arg(ap, char *);
-
-        if (label) {
-            ZZJSON *next = zzjson_create_templ(config, ZZJSON_OBJECT);
-            if (!next) {
-                while (retval) {
-                    next = retval->next;
-                    config->free(retval->value.object.label);
-                    config->free(retval);
-                    retval = next;
-                }
-                break;
-            }
-            zzjson->next = next;
-            zzjson = next;
-        }
-    }
-    va_end(ap);
-    return retval;
-}
-
-ZZJSON *zzjson_array_prepend(ZZJSON_CONFIG *config, ZZJSON *array,
-                                                    ZZJSON *val) {
-    ZZJSON *zzjson;
-
-    if (!array->value.array.val) { /* empty array */
-        array->value.array.val = val;
-        return array;
-    }
-
-    zzjson = zzjson_create_templ(config, ZZJSON_ARRAY);
-    if (zzjson) {
-        zzjson->value.array.val = val;
-        zzjson->next = array;
-    }
-    return zzjson;
-}
-
-ZZJSON *zzjson_array_append(ZZJSON_CONFIG *config, ZZJSON *array,
-                                                   ZZJSON *val) {
-    ZZJSON *retval = array, *zzjson;
-
-    if (!array->value.array.val) { /* empty array */
-        array->value.array.val = val;
-        return array;
-    }
-
-    zzjson = zzjson_create_templ(config, ZZJSON_ARRAY);
-    if (!zzjson) return NULL;
-
-    while (array->next) array = array->next;
-
-    zzjson->value.array.val = val;
-    array->next = zzjson;
-
-    return retval;
-}
-
-ZZJSON *zzjson_object_prepend(ZZJSON_CONFIG *config, ZZJSON *object,
-                              char *label, ZZJSON *val) {
-    ZZJSON *zzjson = NULL;
-    char *labelcopy = sdup(config, label);
-
-    if (!labelcopy) return zzjson;
-
-    if (!object->value.object.label) { /* empty object */
-        object->value.object.label  = labelcopy;
-        object->value.object.val    = val;
-        return object;
-    }
-
-    zzjson = zzjson_create_templ(config, ZZJSON_OBJECT);
-    if (zzjson) {
-        zzjson->value.object.label  = labelcopy;
-        zzjson->value.object.val    = val;
-        zzjson->next = object;
-    } else {
-        config->free(labelcopy);
-    }
-    return zzjson;
-}
-
-ZZJSON *zzjson_object_append(ZZJSON_CONFIG *config, ZZJSON *object,
-                             char *label, ZZJSON *val) {
-    ZZJSON *retval = object, *zzjson = NULL;
-    char *labelcopy = sdup(config, label);
-
-    if (!labelcopy) return zzjson;
-
-    if (!object->value.object.label) { /* empty object */
-        object->value.object.label  = labelcopy;
-        object->value.object.val    = val;
-        return object;
-    }
-
-    zzjson = zzjson_create_templ(config, ZZJSON_OBJECT);
-    if (!zzjson) {
-        config->free(labelcopy);
-        return NULL;
-    }
-
-    while (object->next) object = object->next;
-
-    zzjson->value.object.label  = labelcopy;
-    zzjson->value.object.val    = val;
-    object->next = zzjson;
-
-    return retval;
-}
-
diff --git a/com32/gpllib/zzjson/zzjson_free.c b/com32/gpllib/zzjson/zzjson_free.c
deleted file mode 100644 (file)
index 01dfd24..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/* JSON free
- * ZZJSON - Copyright (C) 2008 by Ivo van Poorten
- * License: GNU Lesser General Public License version 2.1
- */
-
-#include "zzjson.h"
-
-void zzjson_free(ZZJSON_CONFIG *config, ZZJSON *zzjson) {
-    while (zzjson) {
-        ZZJSON *next;
-        switch(zzjson->type) {
-            case ZZJSON_OBJECT:
-                config->free(zzjson->value.object.label);
-                zzjson_free(config, zzjson->value.object.val);
-                break;
-            case ZZJSON_ARRAY:
-                zzjson_free(config, zzjson->value.array.val);
-                break;
-            case ZZJSON_STRING:
-                config->free(zzjson->value.string.string);
-                break;
-            default:
-                break;
-        }
-        next = zzjson->next;
-        config->free(zzjson);
-        zzjson = next;
-    }
-}
diff --git a/com32/gpllib/zzjson/zzjson_parse.c b/com32/gpllib/zzjson/zzjson_parse.c
deleted file mode 100644 (file)
index ecb6f61..0000000
+++ /dev/null
@@ -1,490 +0,0 @@
-/* JSON Parser
- * ZZJSON - Copyright (C) 2008-2009 by Ivo van Poorten
- * License: GNU Lesser General Public License version 2.1
- */
-
-#include "zzjson.h"
-#include <ctype.h>
-#include <string.h>
-#include <math.h>
-#include <stdio.h>
-
-#define GETC()          config->getchar(config->ihandle)
-#define UNGETC(c)       config->ungetchar(c, config->ihandle)
-#define SKIPWS()        skipws(config)
-#ifdef CONFIG_NO_ERROR_MESSAGES
-#define ERROR(x...)
-#else
-#define ERROR(x...)     config->error(config->ehandle, ##x)
-#endif
-#define MEMERROR()      ERROR("out of memory")
-
-#define ALLOW_EXTRA_COMMA    (config->strictness & ZZJSON_ALLOW_EXTRA_COMMA)
-#define ALLOW_ILLEGAL_ESCAPE (config->strictness & ZZJSON_ALLOW_ILLEGAL_ESCAPE)
-#define ALLOW_CONTROL_CHARS  (config->strictness & ZZJSON_ALLOW_CONTROL_CHARS)
-#define ALLOW_GARBAGE_AT_END (config->strictness & ZZJSON_ALLOW_GARBAGE_AT_END)
-#define ALLOW_COMMENTS       (config->strictness & ZZJSON_ALLOW_COMMENTS)
-
-static ZZJSON *parse_array(ZZJSON_CONFIG *config);
-static ZZJSON *parse_object(ZZJSON_CONFIG *config);
-
-static void skipws(ZZJSON_CONFIG *config) {
-    int d, c = GETC();
-morews:
-    while (isspace(c)) c = GETC();
-    if (!ALLOW_COMMENTS) goto endws;
-    if (c != '/') goto endws;
-    d = GETC();
-    if (d != '*') goto endws; /* pushing back c will generate a parse error */
-    c = GETC();
-morecomments:
-    while (c != '*') {
-        if (c == EOF) goto endws;
-        c = GETC();
-    }
-    c = GETC();
-    if (c != '/') goto morecomments;
-    c = GETC();
-    if (isspace(c) || c == '/') goto morews;
-endws:
-    UNGETC(c);
-}
-
-static char *parse_string(ZZJSON_CONFIG *config) {
-    unsigned int len = 16, pos = 0;
-    int c;
-    char *str = NULL;
-
-    SKIPWS();
-    c = GETC();
-    if (c != '"') {
-        ERROR("string: expected \" at the start");
-        return NULL;
-    }
-
-    str = config->malloc(len);
-    if (!str) {
-        MEMERROR();
-        return NULL;
-    }
-    c = GETC();
-    while (c > 0 && c != '"') {
-        if (!ALLOW_CONTROL_CHARS && c >= 0 && c <= 31) {
-            ERROR("string: control characters not allowed");
-            goto errout;
-        }
-        if (c == '\\') {
-            c = GETC();
-            switch (c) {
-                case 'b': c = '\b'; break;
-                case 'f': c = '\f'; break;
-                case 'n': c = '\n'; break;
-                case 'r': c = '\r'; break;
-                case 't': c = '\t'; break;
-                case 'u': {
-                    UNGETC(c);    /* ignore \uHHHH, copy verbatim */
-                    c = '\\';
-                    break;
-                }
-                case '\\': case '/': case '"':
-                          break;
-                default:
-                    if (!ALLOW_ILLEGAL_ESCAPE) {
-                        ERROR("string: illegal escape character");
-                        goto errout;
-                    }
-            }
-        }
-        str[pos++] = c;
-        if (pos == len-1) {
-            void *tmp = str;
-            len *= 2;
-            str = config->realloc(str, len);
-            if (!str) {
-                MEMERROR();
-                str = tmp;
-                goto errout;
-            }
-        }
-        c = GETC();
-    }
-    if (c != '"') {
-        ERROR("string: expected \" at the end");
-        goto errout;
-    }
-    str[pos] = 0;
-    return str;
-
-errout:
-    config->free(str);
-    return NULL;
-}
-
-static ZZJSON *parse_string2(ZZJSON_CONFIG *config) {
-    ZZJSON *zzjson = NULL;
-    char *str;
-
-    str = parse_string(config);
-    if (str) {
-        zzjson = config->calloc(1, sizeof(ZZJSON));
-        if (!zzjson) {
-            MEMERROR();
-            config->free(str);
-            return NULL;
-        }
-        zzjson->type = ZZJSON_STRING;
-        zzjson->value.string.string = str;
-    }
-    return zzjson;
-}
-
-static ZZJSON *parse_number(ZZJSON_CONFIG *config) {
-    ZZJSON *zzjson;
-    unsigned long long ival = 0, expo = 0;
-    double dval = 0.0, frac = 0.0, fracshft = 10.0;
-    int c, dbl = 0, sign = 1, signexpo = 1;
-
-    SKIPWS();
-    c = GETC();
-    if (c == '-') {
-        sign = -1;
-        c = GETC();
-    }
-    if (c == '0') {
-        c = GETC();
-        goto skip;
-    }
-
-    if (!isdigit(c)) {
-        ERROR("number: digit expected");
-        return NULL;
-    }
-
-    while (isdigit(c)) {
-        ival *= 10;
-        ival += c - '0';
-        c = GETC();
-    }
-
-skip:
-    if (c != '.') goto skipfrac;
-
-    dbl = 1;
-
-    c = GETC();
-    if (!isdigit(c)) {
-        ERROR("number: digit expected");
-        return NULL;
-    }
-
-    while (isdigit(c)) {
-        frac += (double)(c - '0') / fracshft;
-        fracshft *= 10.0;
-        c = GETC();
-    }
-
-skipfrac:
-    if (c != 'e' && c != 'E') goto skipexpo;
-
-    dbl = 1;
-
-    c = GETC();
-    if (c == '+')
-        c = GETC();
-    else if (c == '-') {
-        signexpo = -1;
-        c = GETC();
-    }
-
-    if (!isdigit(c)) {
-        ERROR("number: digit expected");
-        return NULL;
-    }
-
-    while (isdigit(c)) {
-        expo *= 10;
-        expo += c - '0';
-        c = GETC();
-    }
-
-skipexpo:
-    UNGETC(c);
-
-    if (dbl) {
-        dval = sign * (long long) ival;
-        dval += sign * frac;
-        dval *= pow(10.0, (double) signexpo * expo);
-    }
-
-    zzjson = config->calloc(1, sizeof(ZZJSON));
-    if (!zzjson) {
-        MEMERROR();
-        return NULL;
-    }
-    if (dbl) {
-        zzjson->type = ZZJSON_NUMBER_DOUBLE;
-        zzjson->value.number.val.dval = dval;
-    } else {
-        zzjson->type = sign < 0 ? ZZJSON_NUMBER_NEGINT : ZZJSON_NUMBER_POSINT;
-        zzjson->value.number.val.ival = ival;
-    }
-    
-    return zzjson;
-}
-
-static ZZJSON *parse_literal(ZZJSON_CONFIG *config, char *s, ZZJSON_TYPE t) {
-    char b[strlen(s)+1];
-    unsigned int i;
-
-    for (i=0; i<strlen(s); i++) b[i] = GETC();
-    b[i] = 0;
-
-    if (!strcmp(b,s)) {
-        ZZJSON *zzjson;
-        zzjson = config->calloc(1, sizeof(ZZJSON));
-        if (!zzjson) {
-            MEMERROR();
-            return NULL;
-        }
-        zzjson->type = t;
-        return zzjson;
-    }
-    ERROR("literal: expected %s", s);
-    return NULL;
-}
-
-static ZZJSON *parse_true(ZZJSON_CONFIG *config) {
-    return parse_literal(config, (char *)"true", ZZJSON_TRUE);
-}
-
-static ZZJSON *parse_false(ZZJSON_CONFIG *config) {
-    return parse_literal(config, (char *)"false", ZZJSON_FALSE);
-}
-
-static ZZJSON *parse_null(ZZJSON_CONFIG *config) {
-    return parse_literal(config, (char *)"null", ZZJSON_NULL);
-}
-
-static ZZJSON *parse_value(ZZJSON_CONFIG *config) {
-    ZZJSON *retval = NULL;
-    int c;
-
-    SKIPWS();
-    c = GETC();
-    UNGETC(c);
-    switch (c) {
-        case '"':   retval = parse_string2(config); break;
-        case '0': case '1': case '2': case '3': case '4': case '5':
-        case '6': case '7': case '8': case '9': case '-':
-                    retval = parse_number(config); break;
-        case '{':   retval = parse_object(config); break;
-        case '[':   retval = parse_array(config); break;
-        case 't':   retval = parse_true(config); break;
-        case 'f':   retval = parse_false(config); break;
-        case 'n':   retval = parse_null(config); break;
-    }
-
-    if (!retval) {
-        ERROR("value: invalid value");
-        return retval;
-    }
-
-    return retval;
-}
-
-static ZZJSON *parse_array(ZZJSON_CONFIG *config) {
-    ZZJSON *retval = NULL, **next = &retval;
-    int c;
-
-    SKIPWS();
-    c = GETC();
-    if (c != '[') {
-        ERROR("array: expected '['");
-        return NULL;
-    }
-
-    SKIPWS();
-    c = GETC();
-    while (c > 0 && c != ']') {
-        ZZJSON *zzjson = NULL, *val = NULL;
-
-        UNGETC(c);
-
-        SKIPWS();
-        val = parse_value(config);
-        if (!val) {
-            ERROR("array: value expected");
-            goto errout;
-        }
-
-        SKIPWS();
-        c = GETC();
-        if (c != ',' && c != ']') {
-            ERROR("array: expected ',' or ']'");
-errout_with_val:
-            zzjson_free(config, val);
-            goto errout;
-        }
-        if (c == ',') {
-            SKIPWS();
-            c = GETC();
-            if (c == ']' && !ALLOW_EXTRA_COMMA) {
-                ERROR("array: expected value after ','");
-                goto errout_with_val;
-            }
-        }
-        UNGETC(c);
-
-        zzjson = config->calloc(1, sizeof(ZZJSON));
-        if (!zzjson) {
-            MEMERROR();
-            zzjson_free(config, val);
-            goto errout_with_val;
-        }
-        zzjson->type            = ZZJSON_ARRAY;
-        zzjson->value.array.val = val;
-        *next = zzjson;
-        next = &zzjson->next;
-
-        c = GETC();
-    }
-
-    if (c != ']') {
-        ERROR("array: expected ']'");
-        goto errout;
-    }
-
-    if (!retval) {  /* empty array, [ ] */
-        retval = config->calloc(1, sizeof(ZZJSON));
-        if (!retval) {
-            MEMERROR();
-            return NULL;
-        }
-        retval->type = ZZJSON_ARRAY;
-    }
-            
-    return retval;
-
-errout:
-    zzjson_free(config, retval);
-    return NULL;
-}
-
-static ZZJSON *parse_object(ZZJSON_CONFIG *config) {
-    ZZJSON *retval = NULL;
-    int c;
-    ZZJSON **next = &retval;
-
-    SKIPWS();
-    c = GETC();
-    if (c != '{') {
-        ERROR("object: expected '{'");
-        return NULL;
-    }
-
-    SKIPWS();
-    c = GETC();
-    while (c > 0 && c != '}') {
-        ZZJSON *zzjson = NULL, *val = NULL;
-        char *str;
-
-        UNGETC(c);
-
-        str = parse_string(config);
-        if (!str) {
-            ERROR("object: expected string");
-errout_with_str:
-            config->free(str);
-            goto errout;
-        }
-
-        SKIPWS();
-        c = GETC();
-        if (c != ':') {
-            ERROR("object: expected ':'");
-            goto errout_with_str;
-        }
-
-        SKIPWS();
-        val = parse_value(config);
-        if (!val) {
-            ERROR("object: value expected");
-            goto errout_with_str;
-        }
-
-        SKIPWS();
-        c = GETC();
-        if (c != ',' && c != '}') {
-            ERROR("object: expected ',' or '}'");
-errout_with_str_and_val:
-            zzjson_free(config, val);
-            goto errout_with_str;
-        }
-        if (c == ',') {
-            SKIPWS();
-            c = GETC();
-            if (c == '}' && !ALLOW_EXTRA_COMMA) {
-                ERROR("object: expected pair after ','");
-                goto errout_with_str_and_val;
-            }
-        }
-        UNGETC(c);
-
-        zzjson = config->calloc(1, sizeof(ZZJSON));
-        if (!zzjson) {
-            MEMERROR();
-            goto errout_with_str_and_val;
-        }
-        zzjson->type                = ZZJSON_OBJECT;
-        zzjson->value.object.label  = str;
-        zzjson->value.object.val    = val;
-        *next = zzjson;
-        next = &zzjson->next;
-
-        c = GETC();
-    }
-
-    if (c != '}') {
-        ERROR("object: expected '}'");
-        goto errout;
-    }
-
-    if (!retval) {  /* empty object, { } */
-        retval = config->calloc(1, sizeof(ZZJSON));
-        if (!retval) {
-            MEMERROR();
-            return NULL;
-        }
-        retval->type = ZZJSON_OBJECT;
-    }
-            
-    return retval;
-
-errout:
-    zzjson_free(config, retval);
-    return NULL;
-}
-
-ZZJSON *zzjson_parse(ZZJSON_CONFIG *config) {
-    ZZJSON *retval;
-    int c;
-
-    SKIPWS();   
-    c = GETC();
-    UNGETC(c);
-    if (c == '[')       retval = parse_array(config);
-    else if (c == '{')  retval = parse_object(config);
-    else                { ERROR("expected '[' or '{'"); return NULL; }
-
-    if (!retval) return NULL;
-
-    SKIPWS();
-    c = GETC();
-    if (c >= 0 && !ALLOW_GARBAGE_AT_END) {
-        ERROR("parse: garbage at end of file");
-        zzjson_free(config, retval);
-        return NULL;
-    }
-
-    return retval;
-}
diff --git a/com32/gpllib/zzjson/zzjson_print.c b/com32/gpllib/zzjson/zzjson_print.c
deleted file mode 100644 (file)
index a59b3b0..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/* JSON Printer
- * ZZJSON - Copyright (C) 2008 by Ivo van Poorten
- * License: GNU Lesser General Public License version 2.1
- */
-
-#include "zzjson.h"
-
-#define PRINT(fmt...) if (config->print(config->ohandle, ##fmt) < 0) return -1;
-//#define PUTC(c)       if (config->putchar(c, config->ohandle) < 0) return -1;
-#define PUTC(c)       PRINT("%c",c)
-#define INC 4
-
-static int print_string(ZZJSON_CONFIG *config, char *s) {
-    int c, bs;
-    if (!s) return 0;
-    while ((c = *s++)) {
-        bs = 1;
-        switch (c) {
-//            case '/':                 // useless escape of forward slash
-            case '\\':
-                if (*s == 'u') bs = 0;  // copy \uHHHH verbatim
-                break;
-            case '"':               break;
-            case '\b':  c = 'b';    break;
-            case '\f':  c = 'f';    break;
-            case '\n':  c = 'n';    break;
-            case '\r':  c = 'r';    break;
-            case '\t':  c = 't';    break;
-            default:    bs = 0;     break;
-        }
-        if (bs) PUTC('\\');
-        PUTC(c);
-    }
-    return 0;
-}
-
-static int zzjson_print2(ZZJSON_CONFIG *config, ZZJSON *zzjson,
-                 unsigned int indent, unsigned int objval) {
-    char c = 0, d = 0;
-    if (!zzjson) return -1;
-
-    switch(zzjson->type) {
-        case ZZJSON_OBJECT: c = '{'; d = '}'; break;
-        case ZZJSON_ARRAY:  c = '['; d = ']'; break;
-        default: break;
-    }
-
-    if (c) PRINT("%s%*s%c", indent ? "\n" : "", indent, "", c);
-
-    while (zzjson) {
-        switch(zzjson->type) {
-        case ZZJSON_OBJECT:
-            if (zzjson->value.object.val) {
-                PRINT("\n%*s\"", indent+INC, "");
-                if (print_string(config, zzjson->value.object.label) < 0)
-                    return -1;
-                PRINT("\" :");
-                if (zzjson_print2(config, zzjson->value.object.val,
-                                                indent+INC, 1) < 0) return -1;
-            }
-            break;
-        case ZZJSON_ARRAY:
-            if (zzjson->value.array.val)
-                if (zzjson_print2(config, zzjson->value.array.val,
-                                                indent+INC, 0) < 0) return -1;
-            break;
-        case ZZJSON_STRING:
-            PRINT(objval ? " \"" : "\n%*s\"", indent, "");
-            if (print_string(config, zzjson->value.string.string)<0) return -1;
-            PUTC('"');
-            break;
-        case ZZJSON_FALSE:
-            PRINT(objval ? " false" : "\n%*sfalse", indent, "");
-            break;
-        case ZZJSON_NULL:
-            PRINT(objval ? " null" : "\n%*snull", indent, "");
-            break;
-        case ZZJSON_TRUE:
-            PRINT(objval ? " true" : "\n%*strue", indent, "");
-            break;
-        case ZZJSON_NUMBER_NEGINT:
-        case ZZJSON_NUMBER_POSINT:
-        case ZZJSON_NUMBER_DOUBLE:
-            PRINT(objval ? " " : "\n%*s", indent, "");
-            if (zzjson->type == ZZJSON_NUMBER_DOUBLE) {
-                PRINT("%16.16e", zzjson->value.number.val.dval);
-            } else {
-                if (zzjson->type == ZZJSON_NUMBER_NEGINT) PUTC('-');
-                PRINT("%llu", zzjson->value.number.val.ival);
-            }
-        default:
-            break;
-        }
-        zzjson = zzjson->next;
-        if (zzjson) PUTC(',');
-    }
-
-    if (d) PRINT("\n%*s%c", indent, "", d);
-
-    return 0;
-}
-
-int zzjson_print(ZZJSON_CONFIG *config, ZZJSON *zzjson) {
-    int retval = zzjson_print2(config, zzjson, 0, 0);
-//    if (retval >= 0) retval = config->putchar('\n', config->ohandle);
-#ifndef CONFIG_NO_ERROR_MESSAGES
-    if (retval <  0) config->error(config->ehandle, "print: unable to print");
-#endif
-    return retval;
-}
diff --git a/com32/gpllib/zzjson/zzjson_query.c b/com32/gpllib/zzjson/zzjson_query.c
deleted file mode 100644 (file)
index 35ba7b7..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/* JSON query
- * ZZJSON - Copyright (C) 2008 by Ivo van Poorten
- * License: GNU Lesser General Public License version 2.1
- */
-
-#include "zzjson.h"
-#include <string.h>
-#include <stdarg.h>
-
-ZZJSON *zzjson_object_find_label(ZZJSON *zzjson, char *label) {
-    if (zzjson->type != ZZJSON_OBJECT) return NULL;
-
-    while (zzjson) {
-        char *string = zzjson->value.object.label;
-
-        if (zzjson->type != ZZJSON_OBJECT) return NULL;
-        if (!string)                       return NULL;
-
-        if (!strcmp(string, label))
-            return zzjson->value.object.val;
-        zzjson = zzjson->next;
-    }
-    return NULL;
-}
-
-ZZJSON *zzjson_object_find_labels(ZZJSON *zzjson, ...) {
-    va_list ap;
-    char *lbl;
-
-    va_start(ap, zzjson);
-    lbl = va_arg(ap, char *);
-    while (lbl) {
-        zzjson = zzjson_object_find_label(zzjson, lbl);
-        if (!zzjson) break;
-        lbl = va_arg(ap, char *);
-    }
-    va_end(ap);
-
-    return zzjson;
-}
-
-unsigned int zzjson_object_count(ZZJSON *zzjson) {
-    unsigned int count = 1;
-
-    if (zzjson->type != ZZJSON_OBJECT) return 0;
-    if (!zzjson->value.object.label)   return 0; /* empty { } */
-
-    while ((zzjson = zzjson->next)) count++;
-
-    return count;
-}
-
-unsigned int zzjson_array_count(ZZJSON *zzjson) {
-    unsigned int count = 1;
-
-    if (zzjson->type != ZZJSON_ARRAY) return 0;
-    if (!zzjson->value.array.val)     return 0; /* empty [ ] */
-
-    while ((zzjson = zzjson->next)) count++;
-
-    return count;
-}
-
index f187346..40ea3ac 100644 (file)
 ##
 
 topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/com32.mk
+include ../MCONFIG
 
-LIBS      = ../cmenu/libmenu/libmenu.a ../libupload/libcom32upload.a
-CFLAGS    += -I$(com32)/cmenu/libmenu -I$(com32)
+LIBS      = ../cmenu/libmenu/libmenu.a ../libutil/libutil_com.a \
+            ../lib/libcom32.a $(LIBGCC)
+CFLAGS    += -I$(com32)/cmenu/libmenu
 
 MODULES          = hdt.c32
 TESTFILES =
@@ -28,8 +28,7 @@ TESTFILES =
 OBJS     = $(patsubst %.c,%.o,$(wildcard *.c))
 VERSION   = $(shell $(SED) -n 's/\#define VERSION \"\(.*\)\"/\1/p' hdt.h)
 CODENAME  = $(shell $(SED) -n 's/\#define CODENAME \"\(.*\)\"/\1/p' hdt.h)
-NODASH_VERSION = $(shell echo $(VERSION) | $(SED) -e 's/-/_/g' | $(SED) -e 's/\./_/g')
-SUM_FILE  = hdt-$(VERSION).checksums
+VERSION_C32 = $(shell echo $(VERSION) | $(SED) -e 's/-/_/g' | $(SED) -e 's/\./_/g')
 
 MEMTEST_URL = http://memtest.org/download/4.20/memtest86+-4.20.bin
 MEMTEST     = memtest.bin
@@ -45,7 +44,6 @@ FLOPPY_DIR            ?= floppy
 PCI_IDS_FILE            ?= $(PWD)/$(FLOPPY_DIR)/pci.ids
 GZ_PCI_IDS_FILE         ?= $(PCI_IDS_FILE).gz
 MENU_COM32              ?= $(com32)/menu/menu.c32
-CHAIN_COM32             ?= $(com32)/modules/chain.c32
 ART_DIR                 ?= art/
 QEMU                   ?= qemu-kvm
 
@@ -57,11 +55,11 @@ hdt.elf : $(OBJS) $(LIBS) $(C_LIBS)
 memtest:
        -[ ! -f $(FLOPPY_DIR)/$(MEMTEST) ] && $(WGET) $(MEMTEST_URL) -O $(FLOPPY_DIR)/$(MEMTEST)
 
-hdt.img: hdt.c32 $(FLOPPY_DIR)/hdt.cfg $(FLOPPY_DIR)/mtools.conf $(topdir)/mtools/syslinux $(MENU_COM32) memtest $(CHAIN_COM32)
+hdt.img: hdt.c32 $(FLOPPY_DIR)/hdt.cfg $(FLOPPY_DIR)/mtools.conf $(topdir)/mtools/syslinux $(MENU_COM32) memtest
        rm -f hdt*.img
        $(SED) -e 's/%VERSION%/$(VERSION)/g' $(FLOPPY_DIR)/hdt.cfg |\
        $(SED) -e 's/%CODENAME%/$(CODENAME)/g' > $(FLOPPY_DIR)/syslinux.cfg
-       MTOOLSRC=$(PWD)/$(FLOPPY_DIR)/mtools.conf $(MFORMAT) -v HDT_$(NODASH_VERSION) -f 1440 -C a:
+       MTOOLSRC=$(PWD)/$(FLOPPY_DIR)/mtools.conf $(MFORMAT) -v HDT_$(VERSION) -f 1440 -C a:
        $(topdir)/mtools/syslinux hdt.img
        -[ ! -f $(GZ_PCI_IDS_FILE) ] && cp /usr/share/hwdata/pci.ids $(PCI_IDS_FILE) && $(GZIPPROG) $(PCI_IDS_FILE)
        -[ ! -f $(GZ_PCI_IDS_FILE) ] && cp /usr/share/pci.ids $(PCI_IDS_FILE) && $(GZIPPROG) $(PCI_IDS_FILE)
@@ -69,7 +67,6 @@ hdt.img: hdt.c32 $(FLOPPY_DIR)/hdt.cfg $(FLOPPY_DIR)/mtools.conf $(topdir)/mtool
        -[ -f $(MODULES_PCIMAP_FILE) ] && cat $(MODULES_PCIMAP_FILE) | $(GZIPPROG) - -f | MTOOLSRC=$(PWD)/$(FLOPPY_DIR)/mtools.conf $(MCOPY) - a:modules.pcimap
        MTOOLSRC=$(PWD)/$(FLOPPY_DIR)/mtools.conf $(MCOPY) hdt.c32 a:
        MTOOLSRC=$(PWD)/$(FLOPPY_DIR)/mtools.conf $(MCOPY) $(MENU_COM32) a:
-       MTOOLSRC=$(PWD)/$(FLOPPY_DIR)/mtools.conf $(MCOPY) $(CHAIN_COM32) a:
        @ [ -f $(GZ_PCI_IDS_FILE) ] && MTOOLSRC=$(PWD)/$(FLOPPY_DIR)/mtools.conf $(MCOPY) $(GZ_PCI_IDS_FILE) a:pci.ids || printf "\nThe $(GZ_PCI_IDS_FILE) file is missing and can be downloaded from http://pciids.sourceforge.net and gzipped in\nthe ./com32/hdt/$(FLOPPY_DIR) directory of the extracted Syslinux source.\n\n"
        MTOOLSRC=$(PWD)/$(FLOPPY_DIR)/mtools.conf $(MCOPY) $(FLOPPY_DIR)/syslinux.cfg a:
        MTOOLSRC=$(PWD)/$(FLOPPY_DIR)/mtools.conf $(MCOPY) $(FLOPPY_DIR)/$(MEMTEST) a:
@@ -92,7 +89,6 @@ hdt.iso: hdt.c32 $(topdir)/core/isolinux.bin $(FLOPPY_DIR)/hdt.cfg memtest
        cp hdt.c32 $(ISO_DIR)/$(ISOLINUX_DIR)
        cp $(FLOPPY_DIR)/$(MEMTEST) $(ISO_DIR)/$(ISOLINUX_DIR)
        cp $(MENU_COM32) $(ISO_DIR)/$(ISOLINUX_DIR)
-       cp $(CHAIN_COM32) $(ISO_DIR)/$(ISOLINUX_DIR)
        cp -av $(ART_DIR)/backgnd.png $(ISO_DIR)/$(ISOLINUX_DIR)
        -[ ! -f $(GZ_PCI_IDS_FILE) ] && cp /usr/share/hwdata/pci.ids $(PCI_IDS_FILE) && $(GZIPPROG) $(PCI_IDS_FILE)
        -[ ! -f $(GZ_PCI_IDS_FILE) ] && cp /usr/share/pci.ids $(PCI_IDS_FILE) && $(GZIPPROG) $(PCI_IDS_FILE)
@@ -111,11 +107,7 @@ hdt.iso: hdt.c32 $(topdir)/core/isolinux.bin $(FLOPPY_DIR)/hdt.cfg memtest
        ln -sf hdt-$(VERSION).iso hdt.iso
 
 release: spotless hdt.c32 hdt.img hdt.img.gz hdt.iso
-       mv hdt.c32 hdt_$(NODASH_VERSION).c32
-       md5sum hdt_$(NODASH_VERSION).c32 >$(SUM_FILE)
-       md5sum hdt-$(VERSION).iso >>$(SUM_FILE)
-       md5sum hdt-$(VERSION).img >>$(SUM_FILE)
-       md5sum hdt-$(VERSION).img.gz >>$(SUM_FILE)
+       mv hdt.c32 hdt_$(VERSION_C32).c32
 
 test: hdt.img
        $(QEMU) -fda hdt.img
@@ -131,7 +123,6 @@ spotless: clean
        rm -rf $(ISO_DIR)
        rm -rf $(FLOPPY_DIR)/$(MEMTEST)
        rm -rf $(FLOPPY_DIR)/pci.ids*
-       rm -rf hdt-*checksums
        rm -f *~ \#*
 
 install:
index c876d23..f72a213 100644 (file)
@@ -77,15 +77,6 @@ ENDTEXT
 COM32 hdt.c32
 APPEND modules_pcimap=modules.pcimap modules_alias=modules.alias pciids=pci.ids verbose nomenu
 
-LABEL dump
-MENU LABEL Dump hardware config to TFTP server 
-TEXT HELP
- Starts HDT using the Command Line Interface (CLI) and run 'dump'
- VESA mode is enabled
-ENDTEXT
-COM32 hdt.c32
-APPEND modules_pcimap=modules.pcimap modules_alias=modules.alias pciids=pci.ids quiet vesa nomenu auto='dump'
-
 MENU SEPARATOR
 
 LABEL memtest
index a978bb3..1b608c2 100644 (file)
@@ -37,7 +37,7 @@
 /* Print ACPI's table header in a defined formating */
 static void show_header(void *address, s_acpi_description_header * h)
 {
-    more_printf("%-4s v%03x %-6s %-8s 0x%08x %-7s 0x%08x @ 0x%p\n",
+    more_printf("%-4s v%03x %-6s %-7s 0x%08x %-4s    0x%08x @ 0x%p\n",
                h->signature, h->revision, h->oem_id, h->oem_table_id,
                h->oem_revision, h->creator_id, h->creator_revision, address)
 }
@@ -158,6 +158,25 @@ static void show_local_apic(s_madt * madt)
     }
 }
 
+/* M1PS flags have to be interpreted as strings */
+static char *flags_to_string(char *buffer, uint16_t flags)
+{
+    memset(buffer, 0, sizeof(buffer));
+    strcpy(buffer, "default");
+    if ((flags & POLARITY_ACTIVE_HIGH) == POLARITY_ACTIVE_HIGH)
+       strcpy(buffer, "high");
+    else if ((flags & POLARITY_ACTIVE_LOW) == POLARITY_ACTIVE_LOW)
+       strcpy(buffer, "low");
+    if ((flags & TRIGGER_EDGE) == TRIGGER_EDGE)
+       strncat(buffer, " edge", 5);
+    else if ((flags & TRIGGER_LEVEL) == TRIGGER_LEVEL)
+       strncat(buffer, " level", 6);
+    else
+       strncat(buffer, " default", 8);
+
+    return buffer;
+}
+
 /* Display the local apic NMI configuration */
 static void show_local_apic_nmi(s_madt * madt)
 {
@@ -206,7 +225,7 @@ static void show_io_apic(s_madt * madt)
            break;
        }
 
-       more_printf("IO_APIC[%d] : apic_id[0x%02x] address[0x%08x] %s\n",
+       more_printf("IO_APIC[%d] : apic_id[0x%02x] adress[0x%08x] %s\n",
                    i, sio->io_apic_id, sio->io_apic_address, buffer);
     }
 }
index e975261..6506823 100644 (file)
@@ -250,15 +250,6 @@ static void do_reboot(int argc __unused, char **argv __unused,
     syslinux_reboot(1);
 }
 
-/**
- * do_dump - dump info
- **/
-static void do_dump(int argc __unused, char **argv __unused,
-                     struct s_hardware *hardware)
-{
-    dump(hardware);
-}
-
 /* Default hdt mode */
 struct cli_callback_descr list_hdt_default_modules[] = {
     {
@@ -286,10 +277,6 @@ struct cli_callback_descr list_hdt_default_modules[] = {
      .exec = print_history,
      },
     {
-     .name = CLI_DUMP,
-     .exec = do_dump,
-     },
-    {
      .name = NULL,
      .exec = NULL},
 };
index 330f93c..8b5335e 100644 (file)
@@ -738,7 +738,8 @@ void start_auto_mode(struct s_hardware *hardware)
     int nb_commands = 0;
     char *commands[MAX_NB_AUTO_COMMANDS];
 
-    more_printf("\nEntering Auto mode\n");
+    if (!quiet)
+       more_printf("\nEntering Auto mode\n");
 
     /* Protecting the auto_label from the strtok modifications */
     char *temp = strdup(hardware->auto_label);
index 68b3315..1329109 100644 (file)
@@ -65,7 +65,6 @@
 #define CLI_ACPI "acpi"
 #define CLI_ENABLE "enable"
 #define CLI_DISABLE "disable"
-#define CLI_DUMP "dump"
 
 typedef enum {
     INVALID_MODE,
index aac50eb..f1557b8 100644 (file)
@@ -106,12 +106,6 @@ void detect_parameters(const int argc, const char *argv[],
            max_console_lines = MAX_CLI_LINES;
        } else if (!strncmp(argv[i], "nomenu", 6)) {
            menumode = false;
-       } else if (!strncmp(argv[i], "dump_path=", 10)) {
-           strlcpy(hardware->dump_path, argv[i] + 10,
-                   sizeof(hardware->dump_path));
-       } else if (!strncmp(argv[i], "tftp_ip=", 8)) {
-           strlcpy(hardware->tftp_ip, argv[i] + 8,
-                   sizeof(hardware->tftp_ip));
        } else if (!strncmp(argv[i], "auto=", 5)) {
            /* The auto= parameter is separated in several argv[]
             * as it can contains spaces.
@@ -121,19 +115,25 @@ void detect_parameters(const int argc, const char *argv[],
             */
 
            automode=true;
-           char *argument = (char*)argv[i]+6;
            /* Extracting the first parameter */
-           strcpy(hardware->auto_label, argument);
+           strcpy(hardware->auto_label, argv[i] + 6);
+           strcat(hardware->auto_label, " ");
+           char *pos;
+           i++;
 
            /* While we can't find the other AUTO_DELIMITER, let's process the argv[] */
-           while ((strchr(argument, AUTO_DELIMITER) == NULL) && (i+1<argc)) {
-               i++;
-               argument = (char *)argv[i];
+           while (((pos = strstr(argv[i], AUTO_DELIMITER)) == NULL)
+                  && (i < argc)) {
+               strcat(hardware->auto_label, argv[i]);
                strcat(hardware->auto_label, " ");
-               strcat(hardware->auto_label, argument);
-           } 
+               i++;
+           }
 
-            hardware->auto_label[strlen(hardware->auto_label) - 1] = 0;
+           /* If we didn't reach the end of the line, let's grab the last item */
+           if (i < argc) {
+               strcat(hardware->auto_label, argv[i]);
+               hardware->auto_label[strlen(hardware->auto_label) - 1] = 0;
+           }
        }
     }
 }
@@ -203,10 +203,7 @@ void init_hardware(struct s_hardware *hardware)
           sizeof hardware->modules_alias_path);
     memset(hardware->memtest_label, 0, sizeof hardware->memtest_label);
     memset(hardware->auto_label, 0, sizeof hardware->auto_label);
-    memset(hardware->dump_path, 0, sizeof hardware->dump_path);
     memset(hardware->vesa_background, 0, sizeof hardware->vesa_background);
-    memset(hardware->tftp_ip, 0, sizeof hardware->tftp_ip);
-    strcat(hardware->dump_path, "hdt");
     strcat(hardware->pciids_path, "pci.ids");
     strcat(hardware->modules_pcimap_path, "modules.pcimap");
     strcat(hardware->modules_alias_path, "modules.alias");
@@ -655,7 +652,7 @@ char *del_multi_spaces(char *p)
      * As we search for a double spacing
      * we have to be sure then string is
      * long enough to be processed */
-    while (*p && *(p + 1)) {
+    while (*p && *p + 1) {
 
        /* If we have two consecutive spaces */
        if ((*p == ' ') && (*(p + 1) == ' ')) {
index d37fcc8..df7d2c9 100644 (file)
 #include "cpuid.h"
 #include "dmi/dmi.h"
 #include "hdt-ata.h"
-#include <lib/sys/vesa/vesa.h>
+#include "../lib/sys/vesa/vesa.h"
 #include <vpd/vpd.h>
 #include <libansi.h>
 #include <acpi/acpi.h>
-#include <libupload/upload_backend.h>
 
 /* Declare a variable or data structure as unused. */
 #define __unused __attribute__ (( unused ))
 
 /* This two values are used for switching for the menu to the CLI mode */
 #define HDT_SWITCH_TO_CLI "hdt_switch_to_cli"
-#define HDT_DUMP "hdt_dump"
 #define HDT_RETURN_TO_CLI 100
 #define MAX_VESA_MODES 255
 
@@ -73,7 +71,7 @@
 /* The char that separate two commands */
 #define AUTO_SEPARATOR ";"
 /* The char that surround the list of commands */
-#define AUTO_DELIMITER '\'' 
+#define AUTO_DELIMITER "'"
 
 /* Graphic to load in background when using the vesa mode */
 #define CLI_DEFAULT_BACKGROUND "backgnd.png"
@@ -82,8 +80,6 @@
 #define MAX_CLI_LINES 20
 #define MAX_VESA_CLI_LINES 24
 
-struct upload_backend *upload;
-
 /* Defines if the cli is quiet*/
 bool quiet;
 
@@ -213,8 +209,6 @@ struct s_hardware {
     char modules_pcimap_path[255];
     char modules_alias_path[255];
     char pciids_path[255];
-    char dump_path[255]; /* Dump path on the tftp server */
-    char tftp_ip[255];   /* IP address of tftp server (dump mode) */
     char memtest_label[255];
     char auto_label[AUTO_COMMAND_SIZE];
     char vesa_background[255];
@@ -242,5 +236,4 @@ int detect_vesa(struct s_hardware *hardware);
 void detect_memory(struct s_hardware *hardware);
 void init_console(struct s_hardware *hardware);
 void detect_hardware(struct s_hardware *hardware);
-void dump(struct s_hardware *hardware);
 #endif
diff --git a/com32/hdt/hdt-dump-acpi.c b/com32/hdt/hdt-dump-acpi.c
deleted file mode 100644 (file)
index 4cbaf66..0000000
+++ /dev/null
@@ -1,600 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include "hdt-common.h"
-#include "hdt-dump.h"
-
-void show_header(char *name, void *address, s_acpi_description_header *h, ZZJSON_CONFIG *config, ZZJSON **item)
-{
-       char signature[10]={0};
-       char revision[10]={0};
-       char s_address[16]={0};
-       char oem_id[16]={0};
-       char oem_table_id[16]={0};
-       char oem_revision[16]={0};
-       char creator_revision[16]={0};
-       char creator_id[16]={0};
-       snprintf(signature,sizeof(signature),"%s",h->signature);
-       snprintf(revision,sizeof(revision),"0x%03x",h->revision);
-       snprintf(oem_id,sizeof(oem_id),"%s",h->oem_id);
-       snprintf(oem_table_id,sizeof(oem_table_id),"%s",h->oem_table_id);
-       snprintf(creator_id,sizeof(creator_id),"%s",h->creator_id);
-       snprintf(oem_revision,sizeof(oem_revision),"0x%08x",h->oem_revision);
-       snprintf(creator_revision,sizeof(creator_revision),"0x%08x",h->creator_revision);
-       snprintf(s_address,sizeof(s_address),"%p",address);
-
-       char address_name[32]={0};
-       char signature_name[32]={0};
-       char revision_name[32]={0};
-       char oem_id_name[32]={0};
-       char oem_table_id_name[32]={0};
-       char oem_revision_name[32]={0};
-       char creator_revision_name[32]={0};
-       char creator_id_name[32]={0};
-       snprintf(signature_name,sizeof(signature_name),"acpi.%s.signature",name);
-       snprintf(revision_name,sizeof(revision_name),"acpi.%s.revision",name);
-       snprintf(address_name,sizeof(address_name),"acpi.%s.address",name);
-       snprintf(oem_id_name,sizeof(oem_id_name),"acpi.%s.oem_id",name);
-       snprintf(oem_table_id_name,sizeof(oem_table_id_name),"acpi.%s.oem_table_id",name);
-       snprintf(oem_revision_name,sizeof(oem_revision_name),"acpi.%s.oem_revision",name);
-       snprintf(creator_revision_name,sizeof(creator_revision_name),"acpi.%s.creator_revision",name);
-       snprintf(creator_id_name,sizeof(creator_id_name),"acpi.%s.creator_id",name);
-
-       APPEND_ARRAY
-               add_as(signature_name,signature)
-               add_as(revision_name,revision)
-               add_as(oem_id_name,oem_id)
-               add_as(oem_table_id_name,oem_table_id)
-               add_as(oem_revision_name,oem_revision)
-               add_as(creator_id_name,creator_id)
-               add_as(creator_revision_name,creator_revision)
-               add_as(address_name,s_address)
-       END_OF_APPEND;
-
-       FLUSH_OBJECT;
-
-}
-
-void dump_rsdt(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->rsdt.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","rsdt")
-               add_as("acpi.rsdt.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->rsdt.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       show_header("rsdt",acpi->rsdt.address, &acpi->rsdt.header, config, item);       
-}
-
-void dump_xsdt(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->xsdt.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","xsdt")
-               add_as("acpi.xsdt.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->xsdt.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       show_header("xsdt",acpi->xsdt.address, &acpi->xsdt.header, config, item);       
-}
-
-void dump_fadt(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->rsdt.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","fadt")
-               add_as("acpi.fadt.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->fadt.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       show_header("fadt",acpi->fadt.address, &acpi->fadt.header, config, item);       
-}
-
-void dump_dsdt(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->dsdt.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","dsdt")
-               add_as("acpi.dsdt.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->dsdt.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       show_header("dsdt",acpi->dsdt.address, &acpi->dsdt.header, config, item);       
-}
-
-void dump_sbst(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->sbst.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","sbst")
-               add_as("acpi.sbst.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->sbst.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       show_header("sbst",acpi->sbst.address, &acpi->sbst.header, config, item);       
-}
-
-void dump_ecdt(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->ecdt.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","ecdt")
-               add_as("acpi.ecdt.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->ecdt.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       show_header("ecdt",acpi->ecdt.address, &acpi->ecdt.header, config, item);       
-}
-
-void dump_hpet(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->hpet.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","hpet")
-               add_as("acpi.hpet.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->hpet.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       show_header("hpet",acpi->hpet.address, &acpi->hpet.header, config, item);       
-}
-
-void dump_tcpa(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->tcpa.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","tcpa")
-               add_as("acpi.tcpa.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->tcpa.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       show_header("tcpa",acpi->tcpa.address, &acpi->tcpa.header, config, item);       
-}
-
-void dump_mcfg(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->mcfg.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","mcfg")
-               add_as("acpi.mcfg.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->mcfg.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       show_header("mcfg",acpi->mcfg.address, &acpi->mcfg.header, config, item);       
-}
-
-void dump_slic(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->slic.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","slic")
-               add_as("acpi.slic.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->slic.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       show_header("slic",acpi->slic.address, &acpi->slic.header, config, item);       
-}
-
-
-void dump_boot(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->boot.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","boot")
-               add_as("acpi.boot.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->boot.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       show_header("boot",acpi->boot.address, &acpi->boot.header, config, item);       
-}
-
-void dump_madt(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->madt.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","madt")
-               add_as("acpi.madt.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->madt.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       show_header("madt",acpi->madt.address, &acpi->madt.header, config, item);       
-}
-
-void dump_ssdt(s_ssdt *ssdt, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (ssdt->valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","ssdt")
-               add_as("acpi.ssdt.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (ssdt->valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       show_header("ssdt",ssdt->address, &ssdt->header, config, item); 
-}
-
-void dump_rsdp(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->rsdp.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","rsdp")
-               add_as("acpi.rsdp.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->rsdp.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       s_rsdp *r = &acpi->rsdp;
-       char revision[10]={0};
-       char address[16]={0};
-       char oem_id[16]={0};
-       snprintf(revision,sizeof(revision),"0x%03x",r->revision);
-       snprintf(address,sizeof(address),"%p",r->address);
-       snprintf(oem_id,sizeof(oem_id),"%s",r->oem_id);
-       APPEND_ARRAY
-               add_as("acpi.rsdp.revision",revision)
-               add_as("acpi.rsdp.oem_id",oem_id)
-               add_as("acpi.rsdp.address",address)
-       END_OF_APPEND;
-
-       FLUSH_OBJECT;
-
-}
-
-void dump_facs(s_acpi * acpi, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-       char valid[8]={0};
-       snprintf(valid,sizeof(valid),"%s","false");
-       if (acpi->facs.valid) {
-               snprintf(valid,sizeof(valid),"%s","true");
-       }
-       CREATE_ARRAY
-               add_as("acpi.item","facs")
-               add_as("acpi.facs.is_valid",valid)
-       END_OF_ARRAY;
-       
-       if (acpi->facs.valid==false) {
-               FLUSH_OBJECT;
-               return;
-       }
-
-       s_facs *fa = &acpi->facs;
-       char address[16]={0};
-       snprintf(address,sizeof(address),"%p",fa->address);
-       APPEND_ARRAY
-               add_as("acpi.facs.address",address)
-       END_OF_APPEND;
-
-       FLUSH_OBJECT;
-
-}
-
-void dump_interrupt_source_override(s_madt * madt, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-    CREATE_ARRAY
-       add_as("acpi.item","interrupt_source_override")
-       add_ai("acpi.interrupt_source_override.count", madt->interrupt_source_override_count)
-    END_OF_ARRAY;
-
-    if (madt->interrupt_source_override_count == 0) {
-           FLUSH_OBJECT;
-           return;
-    }
-
-    /* Let's process each interrupt source override */
-    for (int i = 0; i < madt->interrupt_source_override_count; i++) {
-       s_interrupt_source_override *siso = &madt->interrupt_source_override[i];
-       char buffer[20] = {0};
-       char bus_type[10]= {0};
-       
-       /* Spec report bus type 0 as ISA */
-       if (siso->bus == 0)
-           strcpy(bus_type, "ISA");
-       else
-           strcpy(bus_type, "unknown");
-
-       APPEND_ARRAY
-               add_as("acpi.interrupt_source_override.bus_type",bus_type)
-               add_ai("acpi.interrupt_source_override.bus",siso->bus)
-               add_ai("acpi.interrupt_source_override.bus_irq",siso->source)
-               add_ai("acpi.interrupt_source_override.global_irq",siso->global_system_interrupt)
-               add_as("acpi.interrupt_source_override.flags",flags_to_string(buffer,siso->flags))
-       END_OF_APPEND;
-    }
-    FLUSH_OBJECT;
-}
-
-void dump_io_apic(s_madt * madt, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-    CREATE_ARRAY
-       add_as("acpi.item","io_apic")
-       add_ai("acpi.io_apic.count", madt->io_apic_count)
-    END_OF_ARRAY;
-
-    if (madt->io_apic_count == 0) {
-           FLUSH_OBJECT;
-           return;
-    }
-
-    /* For all IO APICS */
-    for (int i = 0; i < madt->io_apic_count; i++) {
-       s_io_apic *sio = &madt->io_apic[i];
-       char buffer[15]={0};
-       memset(buffer, 0, sizeof(buffer));
-       /* GSI base reports the GSI configuration
-        * Let's interpret it as string */
-       switch (sio->global_system_interrupt_base) {
-       case 0:
-           strcpy(buffer, "0-23");
-           break;
-       case 24:
-           strcpy(buffer,"24-39");
-           break;
-       case 40:
-           strcpy(buffer, "40-55");
-           break;
-       default:
-           strcpy(buffer,"Unknown");
-           break;
-       }
-
-       char apic_id[16] = { 0 };
-       char address[16] = { 0 };
-       snprintf(apic_id,sizeof(apic_id),"0x%02x",sio->io_apic_id);
-       snprintf(address,sizeof(address),"0x%08x",sio->io_apic_address);
-       APPEND_ARRAY
-               add_ai("acpi.io_apic.number",i)
-               add_as("acpi.io_apic.apic_id",apic_id)
-               add_as("acpi.io_apic.adress",address)
-               add_as("acpi.io_apic.gsi",buffer)
-       END_OF_APPEND;
-    }
-    FLUSH_OBJECT;
-}
-
-void dump_local_apic_nmi(s_madt * madt, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-    CREATE_ARRAY
-       add_as("acpi.item","local_apic_nmi")
-       add_ai("acpi.local_apic_nmi.count", madt->local_apic_nmi_count)
-    END_OF_ARRAY;
-
-    if (madt->local_apic_nmi_count == 0) {
-           FLUSH_OBJECT;
-           return;
-    }
-
-    for (int i = 0; i < madt->local_apic_nmi_count; i++) {
-       s_local_apic_nmi *slan = &madt->local_apic_nmi[i];
-       char buffer[20]={0};
-       char acpi_id[16] = { 0 };
-       char local_apic_lint[16] = { 0 };
-       snprintf(acpi_id, sizeof(acpi_id), "0x%02x", slan->acpi_processor_id);
-       snprintf(local_apic_lint, sizeof(local_apic_lint), "0x%02x", slan->local_apic_lint);
-       APPEND_ARRAY
-               add_as("acpi.processor_id", acpi_id)
-               add_as("acpi.local_apic_nmi.flags", flags_to_string(buffer,slan->flags))
-               add_as("acpi.local_apic_nmi.lint",local_apic_lint)
-       END_OF_APPEND;
-    }
-
-    FLUSH_OBJECT;
-}
-
-void dump_local_apic(s_madt * madt, ZZJSON_CONFIG * config, ZZJSON ** item)
-{
-    char buffer[16] = { 0 };
-    snprintf(buffer, sizeof(buffer), "0x%08x", madt->local_apic_address);
-
-    CREATE_ARRAY
-       add_as("acpi.item","local_apic")
-       add_as("acpi.local_apic.address", buffer)
-       add_ai("acpi.processor_local_apic.count", madt->processor_local_apic_count)
-    END_OF_ARRAY;
-
-    if (madt->processor_local_apic_count ==0) {
-        FLUSH_OBJECT;
-       return;
-    }
-
-    /* For all detected logical CPU */
-    for (int i = 0; i < madt->processor_local_apic_count; i++) {
-       s_processor_local_apic *sla = &madt->processor_local_apic[i];
-       char lapic_status[16] = { 0 };
-       char acpi_id[16] = { 0 };
-       char apic_id[16] = { 0 };
-
-       snprintf(lapic_status,sizeof(lapic_status),"%s","disabled");
-       /* Let's check if the flags reports the cpu as enabled */
-       if ((sla->flags & PROCESSOR_LOCAL_APIC_ENABLE) ==
-           PROCESSOR_LOCAL_APIC_ENABLE)
-           snprintf(lapic_status,sizeof(lapic_status),"%s","enabled");
-       snprintf(acpi_id, sizeof(acpi_id), "0x%02x", sla->acpi_id);
-       snprintf(apic_id, sizeof(apic_id), "0x%02x", sla->apic_id);
-       APPEND_ARRAY
-               add_ai("acpi.cpu.apic_id", sla->apic_id)
-               add_as("acpi.cpu.apic_id (hex)", apic_id)
-               add_as("acpi.cpu.acpi_id (hex)", acpi_id)
-               add_as("acpi.lapic.enabled", lapic_status)
-       END_OF_APPEND;
-    }
-    FLUSH_OBJECT;
-}
-
-void dump_acpi(struct s_hardware *hardware, ZZJSON_CONFIG * config,
-              ZZJSON ** item)
-{
-    CREATE_NEW_OBJECT;
-    add_hb(is_acpi_valid);
-    if (hardware->is_acpi_valid == false)
-       goto exit;
-
-    s_madt *madt = &hardware->acpi.madt;
-    add_b("acpi.apic.detected", madt->valid);
-    if (madt->valid == false) {
-       goto exit;
-    }
-
-    FLUSH_OBJECT;
-
-    dump_local_apic(madt, config, item);
-    dump_local_apic_nmi(madt, config, item);
-    dump_io_apic(madt, config, item);
-    dump_interrupt_source_override(madt, config, item);
-
-    dump_rsdp(&hardware->acpi,config,item);
-    dump_rsdt(&hardware->acpi,config,item);
-    dump_xsdt(&hardware->acpi,config,item);
-    dump_fadt(&hardware->acpi,config,item);
-    dump_dsdt(&hardware->acpi,config,item);
-    dump_sbst(&hardware->acpi,config,item);
-    dump_ecdt(&hardware->acpi,config,item);
-    dump_hpet(&hardware->acpi,config,item);
-    dump_tcpa(&hardware->acpi,config,item);
-    dump_mcfg(&hardware->acpi,config,item);
-    dump_slic(&hardware->acpi,config,item);
-    dump_boot(&hardware->acpi,config,item);
-    dump_madt(&hardware->acpi,config,item);
-    for (int i = 0; i < hardware->acpi.ssdt_count; i++) {
-            if ((hardware->acpi.ssdt[i] != NULL) && (hardware->acpi.ssdt[i]->valid))
-                   dump_ssdt(hardware->acpi.ssdt[i], config, item);
-    }
-    dump_facs(&hardware->acpi,config,item);
-
-exit:
-    to_cpio("acpi");
-}
diff --git a/com32/hdt/hdt-dump-cpu.c b/com32/hdt/hdt-dump-cpu.c
deleted file mode 100644 (file)
index 33d561c..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include "hdt-common.h"
-#include "hdt-dump.h"
-
-void dump_cpu(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-        CREATE_NEW_OBJECT;
-       add_hs(cpu.vendor);
-       add_hs(cpu.model);
-       add_hi(cpu.vendor_id);
-       add_hi(cpu.family);
-       add_hi(cpu.model_id);
-       add_hi(cpu.stepping);
-       add_hi(cpu.num_cores);
-       add_hi(cpu.l1_data_cache_size);
-       add_hi(cpu.l1_instruction_cache_size);
-       add_hi(cpu.l2_cache_size);
-       size_t i;
-       for (i = 0; i < cpu_flags_count; i++) {
-               char temp[128]={0};
-               snprintf(temp,sizeof(temp),"cpu.flags.%s",cpu_flags_names[i]);
-               add_b(temp,get_cpu_flag_value_from_name(&hardware->cpu,cpu_flags_names[i]));
-       }
-       FLUSH_OBJECT;
-       to_cpio("cpu");
-}
diff --git a/com32/hdt/hdt-dump-disks.c b/com32/hdt/hdt-dump-disks.c
deleted file mode 100644 (file)
index dcbcaa9..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include "hdt-common.h"
-#include "hdt-dump.h"
-#include "hdt-util.h"
-
-ZZJSON_CONFIG *config;
-ZZJSON **item;
-
-static void show_partition_information(struct driveinfo *drive_info,
-                                       struct part_entry *ptab,
-                                       int partition_offset,
-                                       int nb_partitions_seen) {
-    char size[11] = {0};
-    char bootloader_name[9] = {0};
-    char ostype[64]={0};
-    char *parttype;
-    unsigned int start, end;
-
-    int i = nb_partitions_seen;
-    start = partition_offset;
-    end = start + ptab->length - 1;
-
-    if (ptab->length > 0)
-        sectors_to_size(ptab->length, size);
-
-    get_label(ptab->ostype, &parttype);
-    get_bootloader_string(drive_info, ptab, bootloader_name, 9);
-
-    snprintf(ostype,sizeof(ostype),"%02X",ptab->ostype);
-
-    APPEND_ARRAY
-           add_ai("partition->number",i)
-           add_ai("partition->sector_start",start)
-           add_ai("partition->sector_end",end)
-           add_as("partition->size",size)
-           add_as("partition->type",parttype)
-           add_as("partition->os_type",ostype)
-    END_OF_APPEND;
-    free(parttype);
-}
-
-
-
-void show_disk(struct s_hardware *hardware, ZZJSON_CONFIG *conf, ZZJSON **it, int drive) {
-       config=conf;
-       item=it;
-       int i = drive - 0x80;
-       struct driveinfo *d = &hardware->disk_info[i];
-       char mbr_name[50]={0};
-       char disk_size[11]={0};
-
-       get_mbr_string(hardware->mbr_ids[i], &mbr_name,sizeof(mbr_name));
-       if ((int)d->edd_params.sectors > 0)
-               sectors_to_size((int)d->edd_params.sectors, disk_size);
-
-       char disk[5]={0};
-       char edd_version[5]={0};
-       snprintf(disk,sizeof(disk),"0x%X",d->disk);
-       snprintf(edd_version,sizeof(edd_version),"%X",d->edd_version);
-       zzjson_print(config, *item);
-       zzjson_free(config, *item);
-
-       CREATE_ARRAY
-               add_as("disk->number",disk) 
-               add_ai("disk->cylinders",d->legacy_max_cylinder +1) 
-               add_ai("disk->heads",d->legacy_max_head +1)
-               add_ai("disk->sectors_per_track",d->legacy_sectors_per_track)
-               add_as("disk->edd_version",edd_version)
-               add_as("disk->size",disk_size)
-               add_ai("disk->bytes_per_sector",(int)d->edd_params.bytes_per_sector)
-               add_ai("disk->sectors_per_track",(int)d->edd_params.sectors_per_track)
-               add_as("disk->host_bus",remove_spaces((char *)d->edd_params.host_bus_type))
-               add_as("disk->interface_type",remove_spaces((char *)d->edd_params.interface_type))
-               add_as("disk->mbr_name",mbr_name)
-               add_ai("disk->mbr_id",hardware->mbr_ids[i])
-       END_OF_ARRAY;
-
-       if (parse_partition_table(d, &show_partition_information)) {
-               if (errno_disk) { 
-                       APPEND_ARRAY
-                               add_as("disk->error", "IO Error")
-                       END_OF_APPEND;
-               } else  {
-                       APPEND_ARRAY
-                               add_as("disk->error", "Unrecognized Partition Layout")
-                       END_OF_APPEND;
-               }
-       }
-}
-
-void dump_disks(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-       bool found=false;
-       for (int drive = 0x80; drive < 0xff; drive++) {
-               if (hardware->disk_info[drive - 0x80].cbios) {
-                       if (found==false) {
-                               CREATE_NEW_OBJECT;
-                               add_b("disks->is_valid",true);
-                                       found=true;
-                       }
-                       show_disk(hardware, config, item, drive);
-               }
-       }
-
-       if (found==false) {
-               CREATE_NEW_OBJECT;
-               add_b("disks->is_valid",false);
-               FLUSH_OBJECT;
-       }
-       to_cpio("disks");
-}
diff --git a/com32/hdt/hdt-dump-dmi.c b/com32/hdt/hdt-dump-dmi.c
deleted file mode 100644 (file)
index 6e5c1ce..0000000
+++ /dev/null
@@ -1,447 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include "hdt-common.h"
-#include "hdt-dump.h"
-
-void dump_hardware_security(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-       if (!hardware->dmi.hardware_security.filled) {
-                       CREATE_NEW_OBJECT;
-                               add_s("dmi.warning","No hardware security structure found");
-                       FLUSH_OBJECT;
-                       return;
-       }
-       
-       CREATE_NEW_OBJECT;
-               add_s("dmi.item","hardware_security");
-               add_hs(dmi.hardware_security.power_on_passwd_status);
-               add_hs(dmi.hardware_security.keyboard_passwd_status);
-               add_hs(dmi.hardware_security.administrator_passwd_status);
-               add_hs(dmi.hardware_security.front_panel_reset_status);
-       FLUSH_OBJECT;
-}
-
-void dump_oem_strings(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-       if (strlen(hardware->dmi.oem_strings) == 0) {
-                       CREATE_NEW_OBJECT;
-                               add_s("dmi.warning","No OEM structure found");
-                       FLUSH_OBJECT;
-                       return;
-       }
-       CREATE_NEW_OBJECT;
-               add_s("dmi.item","OEM");
-               add_hs(dmi.oem_strings);
-       FLUSH_OBJECT;
-}
-
-void dump_memory_size(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-       CREATE_NEW_OBJECT;
-               add_s("dmi.item","memory size");
-               add_i("dmi.memory_size (KB)",hardware->detected_memory_size);
-               add_i("dmi.memory_size (MB)",(hardware->detected_memory_size + (1 << 9)) >> 10);
-       FLUSH_OBJECT;
-}
-
-void dump_memory_modules(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-       if (hardware->dmi.memory_module_count == 0) {
-                       CREATE_NEW_OBJECT;
-                               add_s("dmi.warning","No memory module structure found");
-                       FLUSH_OBJECT;
-                       return;
-       }
-
-       for (int module=0; module<hardware->dmi.memory_module_count;module++) {
-               if (hardware->dmi.memory_module[module].filled == false) {
-                       char msg[64]={0};
-                       snprintf(msg,sizeof(msg),"Module %d doesn't contain any information", module);
-
-                       CREATE_NEW_OBJECT;
-                               add_s("dmi.warning",msg);
-                       FLUSH_OBJECT;
-                       continue;
-               }
-
-               CREATE_NEW_OBJECT;
-               add_i("Memory module", module);
-               add_s("dmi.memory_module.socket_designation", hardware->dmi.memory_module[module].socket_designation);
-               add_s("dmi.memory_module.bank_connections", hardware->dmi.memory_module[module].bank_connections);
-               add_s("dmi.memory_module.speed", hardware->dmi.memory_module[module].speed);
-               add_s("dmi.memory_module.type", hardware->dmi.memory_module[module].type);
-               add_s("dmi.memory_module.installed_size", hardware->dmi.memory_module[module].installed_size);
-               add_s("dmi.memory_module.enabled_size", hardware->dmi.memory_module[module].enabled_size);
-               add_s("dmi.memory_module.error_status", hardware->dmi.memory_module[module].error_status);
-               FLUSH_OBJECT;
-       }
-}
-       
-void dump_cache(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-       if (hardware->dmi.cache_count == 0) {
-                       CREATE_NEW_OBJECT;
-                               add_s("dmi.warning","No cache structure found");
-                       FLUSH_OBJECT;
-                       return;
-       }
-
-       for (int cache=0; cache<hardware->dmi.cache_count;cache++) {
-               CREATE_NEW_OBJECT;
-               add_i("Cache", cache);
-               add_s("dmi.cache.socket_designation", hardware->dmi.cache[cache].socket_designation);
-               add_s("dmi.cache.configuration", hardware->dmi.cache[cache].configuration);
-               add_s("dmi.cache.mode", hardware->dmi.cache[cache].mode);
-               add_s("dmi.cache.location", hardware->dmi.cache[cache].location);
-               add_i("dmi.cache.installed_size (KB)", hardware->dmi.cache[cache].installed_size);
-               add_i("dmi.cache.max_size (KB)", hardware->dmi.cache[cache].max_size);
-               add_s("dmi.cache.supported_sram_types", hardware->dmi.cache[cache].supported_sram_types);
-               add_s("dmi.cache.installed_sram_types", hardware->dmi.cache[cache].installed_sram_types);
-               add_i("dmi.cache.speed (ns)", hardware->dmi.cache[cache].speed);
-               add_s("dmi.cache.error_correction_type", hardware->dmi.cache[cache].error_correction_type);
-               add_s("dmi.cache.system_type", hardware->dmi.cache[cache].system_type);
-               add_s("dmi.cache.associativity", hardware->dmi.cache[cache].associativity);
-               FLUSH_OBJECT;
-       }
-}
-void dump_memory_banks(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-       if (hardware->dmi.memory_count == 0) {
-                       CREATE_NEW_OBJECT;
-                               add_s("dmi.warning","No memory bank structure found");
-                       FLUSH_OBJECT;
-                       return;
-       }
-
-       for (int bank=0; bank<hardware->dmi.memory_count;bank++) {
-
-               if (hardware->dmi.memory[bank].filled == false) {
-                       char msg[64]={0};
-                       snprintf(msg,sizeof(msg),"Bank %d doesn't contain any information", bank);
-
-                       CREATE_NEW_OBJECT;
-                               add_s("dmi.warning",msg);
-                       FLUSH_OBJECT;
-                       continue;
-               }
-
-               CREATE_NEW_OBJECT;
-               add_i("Memory Bank", bank);
-               add_s("dmi.memory.form_factor", hardware->dmi.memory[bank].form_factor);
-               add_s("dmi.memory.type", hardware->dmi.memory[bank].type);
-               add_s("dmi.memory.type_detail", hardware->dmi.memory[bank].type_detail);
-               add_s("dmi.memory.speed", hardware->dmi.memory[bank].speed);
-               add_s("dmi.memory.size", hardware->dmi.memory[bank].size);
-               add_s("dmi.memory.device_set", hardware->dmi.memory[bank].device_set);
-               add_s("dmi.memory.device_locator", hardware->dmi.memory[bank].device_locator);
-               add_s("dmi.memory.bank_locator", hardware->dmi.memory[bank].bank_locator);
-               add_s("dmi.memory.total_width", hardware->dmi.memory[bank].total_width);
-               add_s("dmi.memory.data_width", hardware->dmi.memory[bank].data_width);
-               add_s("dmi.memory.error", hardware->dmi.memory[bank].error);
-               add_s("dmi.memory.vendor", hardware->dmi.memory[bank].manufacturer);
-               add_s("dmi.memory.serial", hardware->dmi.memory[bank].serial);
-               add_s("dmi.memory.asset_tag", hardware->dmi.memory[bank].asset_tag);
-               add_s("dmi.memory.part_number", hardware->dmi.memory[bank].part_number);
-               FLUSH_OBJECT;
-       }
-}
-
-void dump_processor(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-       if (hardware->dmi.processor.filled == false) {
-               CREATE_NEW_OBJECT;
-                       add_s("dmi.warning","no processor structure found");
-               FLUSH_OBJECT;
-               return;
-       }
-
-       char voltage[16]={0};
-       snprintf(voltage,sizeof(voltage),"%d.%02d",
-               hardware->dmi.processor.voltage_mv / 1000,
-               hardware->dmi.processor.voltage_mv - ((hardware->dmi.processor.voltage_mv / 1000) * 1000));
-
-       CREATE_NEW_OBJECT;
-       add_s("dmi.item","processor");
-       add_hs(dmi.processor.socket_designation);
-       add_hs(dmi.processor.type);
-       add_hs(dmi.processor.family);
-       add_hs(dmi.processor.manufacturer);
-       add_hs(dmi.processor.version);
-       add_hi(dmi.processor.external_clock);
-       add_hi(dmi.processor.max_speed);
-       add_hi(dmi.processor.current_speed);
-       add_hi(dmi.processor.signature.type);
-       add_hi(dmi.processor.signature.family);
-       add_hi(dmi.processor.signature.model);
-       add_hi(dmi.processor.signature.stepping);
-       add_hi(dmi.processor.signature.minor_stepping);
-       add_s("dmi.processor.voltage",voltage);
-       add_hs(dmi.processor.status);
-       add_hs(dmi.processor.upgrade);
-       add_hs(dmi.processor.cache1);
-       add_hs(dmi.processor.cache2);
-       add_hs(dmi.processor.cache3);
-       add_hs(dmi.processor.serial);
-       add_hs(dmi.processor.part_number);
-       add_hi(dmi.processor.core_count);
-       add_hi(dmi.processor.core_enabled);
-       add_hi(dmi.processor.thread_count);
-       add_hs(dmi.processor.id);
-       for (int i = 0; i < PROCESSOR_FLAGS_ELEMENTS; i++) {
-               if (((bool *) (&hardware->dmi.processor.cpu_flags))[i] == true) {
-                   add_s("dmi.processor.flag",(char *)cpu_flags_strings[i]);
-               }
-       }
-       FLUSH_OBJECT;
-}
-
-void dump_battery(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-       if (hardware->dmi.battery.filled == false) {
-               CREATE_NEW_OBJECT;
-                       add_s("dmi.warning","no battery structure found");
-               FLUSH_OBJECT;
-               return;
-       }
-
-       CREATE_NEW_OBJECT;
-       add_s("dmi.item","battery");
-       add_hs(dmi.battery.manufacturer);
-       add_hs(dmi.battery.manufacture_date);
-       add_hs(dmi.battery.serial);
-       add_hs(dmi.battery.name);
-       add_hs(dmi.battery.chemistry);
-       add_hs(dmi.battery.design_capacity);
-       add_hs(dmi.battery.design_voltage);
-       add_hs(dmi.battery.sbds);
-       add_hs(dmi.battery.sbds_manufacture_date);
-       add_hs(dmi.battery.sbds_chemistry);
-       add_hs(dmi.battery.maximum_error);
-       add_hs(dmi.battery.oem_info);
-       FLUSH_OBJECT;
-}
-
-void dump_ipmi(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-       if (hardware->dmi.ipmi.filled == false) {
-               CREATE_NEW_OBJECT;
-                       add_s("dmi.warning","no IPMI structure found");
-               FLUSH_OBJECT;
-               return;
-       }
-
-       char spec_ver[16]={0};
-       char i2c[16]={0};
-       char base[16]={0};
-       snprintf(spec_ver,sizeof(spec_ver),"%u.%u",
-                       hardware->dmi.ipmi.major_specification_version,
-                       hardware->dmi.ipmi.minor_specification_version);
-
-       snprintf(i2c,sizeof(i2c),"0x%02x", hardware->dmi.ipmi.I2C_slave_address);
-       snprintf(base,sizeof(base),"%08X%08X",
-                       (uint32_t)(hardware->dmi.ipmi.base_address >> 32),
-                       (uint32_t)((hardware->dmi.ipmi.base_address & 0xFFFF) & ~1));
-
-       CREATE_NEW_OBJECT;
-       add_s("dmi.item","ipmi");
-       add_hs(dmi.ipmi.interface_type);
-       add_s("dmi.ipmi.spec_version",spec_ver);
-       add_hi(dmi.ipmi.I2C_slave_address);
-       add_hi(dmi.ipmi.nv_address);
-       add_s("dmi.ipmi.base_address",base);
-       add_hi(dmi.ipmi.irq);
-       FLUSH_OBJECT;
-}
-
-void dump_chassis(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-       if (hardware->dmi.chassis.filled == false) {
-               CREATE_NEW_OBJECT;
-                       add_s("dmi.warning","no chassis structure found");
-               FLUSH_OBJECT;
-               return;
-       }
-
-       CREATE_NEW_OBJECT;
-       add_s("dmi.item","bios");
-       add_hs(dmi.chassis.manufacturer);
-       add_hs(dmi.chassis.type);
-       add_hs(dmi.chassis.lock);
-       add_hs(dmi.chassis.version);
-       add_hs(dmi.chassis.serial);
-       add_s("dmi.chassis.asset_tag",del_multi_spaces(hardware->dmi.chassis.asset_tag));
-       add_hs(dmi.chassis.boot_up_state);
-       add_hs(dmi.chassis.power_supply_state);
-       add_hs(dmi.chassis.thermal_state);
-       add_hs(dmi.chassis.security_status);
-       add_hs(dmi.chassis.oem_information);
-       add_hi(dmi.chassis.height);
-       add_hi(dmi.chassis.nb_power_cords);
-       FLUSH_OBJECT;
-}
-
-void dump_bios(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-       if (hardware->dmi.bios.filled == false) {
-               CREATE_NEW_OBJECT;
-                       add_s("dmi.warning","no bios structure found");
-               FLUSH_OBJECT;
-               return;
-       }
-       char address[16]={0};
-       char runtime[16]={0};
-       char rom[16]={0};
-       snprintf(address,sizeof(address),"0x%04X0",hardware->dmi.bios.address);
-       snprintf(runtime,sizeof(runtime),"%u %s",hardware->dmi.bios.runtime_size, hardware->dmi.bios.runtime_size_unit);
-       snprintf(rom,sizeof(rom),"%u %s",hardware->dmi.bios.rom_size, hardware->dmi.bios.rom_size_unit);
-
-       CREATE_NEW_OBJECT;
-       add_s("dmi.item","bios");
-       add_hs(dmi.bios.vendor);
-       add_hs(dmi.bios.version);
-       add_hs(dmi.bios.release_date);
-       add_hs(dmi.bios.bios_revision);
-       add_hs(dmi.bios.firmware_revision);
-       add_s("dmi.bios.address",address);
-       add_s("dmi.bios.runtime_size",runtime);
-       add_s("dmi.bios.rom_size",rom);
-       for (int i = 0; i < BIOS_CHAR_NB_ELEMENTS; i++) {
-               if (((bool *) (&hardware->dmi.bios.characteristics))[i] == true) {
-                       add_s("dmi.bios.characteristics",(char *)bios_charac_strings[i]);
-               }
-       }
-       
-       for (int i = 0; i < BIOS_CHAR_X1_NB_ELEMENTS; i++) {
-               if (((bool *) (&hardware->dmi.bios.characteristics_x1))[i] == true) {
-                       add_s("dmi.bios.characteristics",(char *)bios_charac_x1_strings[i]);
-               }
-       }
-
-       for (int i = 0; i < BIOS_CHAR_X2_NB_ELEMENTS; i++) {
-               if (((bool *) (&hardware->dmi.bios.characteristics_x2))[i] == true) {
-                       add_s("dmi.bios.characteristics",(char *)bios_charac_x2_strings[i]);
-               }
-       }
-       FLUSH_OBJECT;
-}
-
-void dump_system(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-       if (hardware->dmi.system.filled == false) {
-               CREATE_NEW_OBJECT;
-                       add_s("dmi.warning","no system structure found");
-               FLUSH_OBJECT;
-               return;
-       }
-       char system_reset_status[10]={0};
-       char watchdog_timer[15]={0};
-       snprintf(system_reset_status,sizeof(system_reset_status),"%s", (hardware->dmi.system.system_reset.status ? "Enabled" :"Disabled"));
-       snprintf(watchdog_timer,sizeof(watchdog_timer),"%s", (hardware->dmi.system.system_reset.watchdog ? "Present" :"Not Present"));
-
-       CREATE_NEW_OBJECT;
-       add_s("dmi.item","system");
-       add_hs(dmi.system.manufacturer);
-       add_hs(dmi.system.product_name);
-       add_hs(dmi.system.version);
-       add_hs(dmi.system.serial);
-       add_hs(dmi.system.uuid);
-       add_hs(dmi.system.wakeup_type);
-       add_hs(dmi.system.sku_number);
-       add_hs(dmi.system.family);
-       add_hs(dmi.system.configuration_options);
-       add_s("dmi.system.system_reset.status",system_reset_status);
-       add_s("dmi.system.system_reset.watchdog",watchdog_timer);
-       add_hs(dmi.system.system_reset.boot_option);
-       add_hs(dmi.system.system_reset.boot_option_on_limit);
-       add_hs(dmi.system.system_reset.reset_count);
-       add_hs(dmi.system.system_reset.reset_limit);
-       add_hs(dmi.system.system_reset.timer_interval);
-       add_hs(dmi.system.system_reset.timeout);
-       add_hs(dmi.system.system_boot_status);
-       FLUSH_OBJECT;
-}
-
-void dump_base_board(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-       if (hardware->dmi.base_board.filled == false) {
-               CREATE_NEW_OBJECT;
-                       add_s("dmi.warning","no base_board structure found");
-               FLUSH_OBJECT;
-               return;
-       }
-
-       CREATE_NEW_OBJECT;
-       add_s("dmi.item","base_board");
-       add_hs(dmi.base_board.manufacturer);
-       add_hs(dmi.base_board.product_name);
-       add_hs(dmi.base_board.version);
-       add_hs(dmi.base_board.serial);
-       add_hs(dmi.base_board.asset_tag);
-       add_hs(dmi.base_board.location);
-       add_hs(dmi.base_board.type);
-       for (int i = 0; i < BASE_BOARD_NB_ELEMENTS; i++) {
-               if (((bool *) (&hardware->dmi.base_board.features))[i] == true) {
-                       add_s("dmi.base_board.features",(char *)base_board_features_strings[i]);
-               }
-       }
-
-       for (unsigned int i = 0; i < sizeof hardware->dmi.base_board.devices_information /
-                        sizeof *hardware->dmi.base_board.devices_information; i++) {
-               if (strlen(hardware->dmi.base_board.devices_information[i].type)) {
-                       add_s("dmi.base_board.devices_information.type", hardware->dmi.base_board.devices_information[i].type);
-                       add_i("dmi.base_board.devices_information.status", hardware->dmi.base_board.devices_information[i].status);
-                       add_s("dmi.base_board.devices_information.description", hardware->dmi.base_board.devices_information[i].description);
-               }
-       }
-       FLUSH_OBJECT;
-}
-
-void dump_dmi(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-       CREATE_NEW_OBJECT;
-       add_hb(is_dmi_valid);
-
-       if (hardware->is_dmi_valid == false) {
-               FLUSH_OBJECT;
-               goto exit;
-       } else {
-               char buffer[8]={0};
-               snprintf(buffer,sizeof(buffer),"%d.%d",hardware->dmi.dmitable.major_version, hardware->dmi.dmitable.minor_version);
-               add_s("dmi.version",buffer);
-               FLUSH_OBJECT;
-       }
-
-       dump_base_board(hardware,config,item);
-       dump_system(hardware,config,item);
-       dump_bios(hardware,config,item);
-       dump_chassis(hardware,config,item);
-       dump_ipmi(hardware,config,item);
-       dump_battery(hardware,config,item);
-       dump_processor(hardware,config,item);
-       dump_cache(hardware,config,item);
-       dump_memory_banks(hardware,config,item);
-       dump_memory_modules(hardware,config,item);
-       dump_memory_size(hardware,config,item);
-       dump_oem_strings(hardware,config,item);
-       dump_hardware_security(hardware,config,item);
-exit:
-       to_cpio("dmi");
-}
diff --git a/com32/hdt/hdt-dump-hdt.c b/com32/hdt/hdt-dump-hdt.c
deleted file mode 100644 (file)
index d081ebd..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include "hdt-common.h"
-#include "hdt-dump.h"
-#include <syslinux/config.h>
-
-void dump_hdt(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-       (void) hardware;
-       CREATE_NEW_OBJECT;
-       add_s("hdt.product_name",PRODUCT_NAME);
-       add_s("hdt.version",VERSION);
-       add_s("hdt.code_name",CODENAME);
-       add_s("hdt.author", AUTHOR);
-       add_s("hdt.core_developer", CORE_DEVELOPER);
-       char *contributors[NB_CONTRIBUTORS] = CONTRIBUTORS;
-       for (int c = 0; c < NB_CONTRIBUTORS; c++) {
-               add_s("hdt.contributor", contributors[c]);
-       }
-       add_s("hdt.website",WEBSITE_URL);
-       add_s("hdt.irc_channel",IRC_CHANNEL);
-       FLUSH_OBJECT
-       to_cpio("hdt");
-}
diff --git a/com32/hdt/hdt-dump-kernel.c b/com32/hdt/hdt-dump-kernel.c
deleted file mode 100644 (file)
index e0df832..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include "hdt-common.h"
-#include "hdt-dump.h"
-
-void dump_kernel(struct s_hardware *hardware, ZZJSON_CONFIG * config,
-                ZZJSON ** item)
-{
-    struct pci_device *pci_device = NULL;
-    CREATE_ARRAY
-           add_as("Linux Kernel modules", "")
-    END_OF_ARRAY;
-
-    if (hardware->pci_ids_return_code == -ENOPCIIDS) {
-       APPEND_ARRAY 
-               add_as("Error", "No pci.ids file")
-       END_OF_APPEND FLUSH_OBJECT;
-       return;
-    }
-
-    if ((hardware->modules_pcimap_return_code == -ENOMODULESPCIMAP)
-       &&(hardware->modules_pcimap_return_code == -ENOMODULESALIAS)) {
-       APPEND_ARRAY
-               add_as("Error", "No modules.pcimap or modules.alias file")
-       END_OF_APPEND FLUSH_OBJECT;
-       return;
-
-       }
-
-    /* For every detected pci device, compute its submenu */
-    for_each_pci_func(pci_device, hardware->pci_domain) {
-       if (pci_device == NULL)
-           continue;
-       for (int kmod = 0;
-            kmod < pci_device->dev_info->linux_kernel_module_count; kmod++) {
-           APPEND_ARRAY
-                   add_as(pci_device->dev_info->category_name, pci_device->dev_info->linux_kernel_module[kmod])
-           END_OF_APPEND;
-       }
-    }
-    FLUSH_OBJECT;
-    to_cpio("kernel");
-}
diff --git a/com32/hdt/hdt-dump-memory.c b/com32/hdt/hdt-dump-memory.c
deleted file mode 100644 (file)
index 5095d3c..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include <memory.h>
-#include "hdt-common.h"
-#include "hdt-dump.h"
-
-void dump_88(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-       (void) hardware;
-       int mem_size = 0;
-       CREATE_NEW_OBJECT;
-       if (detect_memory_88(&mem_size)) {
-               add_s("memory.error","8800h memory configuration is invalid");
-               FLUSH_OBJECT
-               return;
-       }
-
-       add_s("dmi.item","memory via 88");
-       add_i("memory.size (KiB)", mem_size);
-       add_i("memory.size (MiB)", mem_size >> 10);
-       FLUSH_OBJECT;
-}
-
-void dump_e801(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-       (void) hardware;
-       int mem_low, mem_high = 0;
-       CREATE_NEW_OBJECT;
-       if (detect_memory_e801(&mem_low,&mem_high)) {
-               add_s("memory.error","e801 memory configuration is invalid");
-               FLUSH_OBJECT;
-               return;
-       }
-
-       add_s("dmi.item","memory via e801");
-       add_i("memory.total.size (KiB)", mem_low + (mem_high << 6));
-       add_i("memory.total.size (MiB)", (mem_low >> 10) + (mem_high >> 4));
-       add_i("memory.low.size (KiB)", mem_low );
-       add_i("memory.low.size (MiB)", mem_low >> 10);
-       add_i("memory.high.size (KiB)", mem_high << 6);
-       add_i("memory.high.size (MiB)", mem_high >> 4);
-       FLUSH_OBJECT;
-
-}
-void dump_e820(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-    
-       (void) hardware;
-       struct e820entry map[E820MAX];
-       struct e820entry nm[E820MAX];
-       unsigned long memsize = 0;
-       int count = 0;
-       char type[14] = {0};
-       
-       detect_memory_e820(map, E820MAX, &count);
-       memsize = memsize_e820(map, count);
-       
-       CREATE_NEW_OBJECT;
-               add_s("dmi.item","memory via e820");
-               add_i("memory.total.size (KiB)", memsize);
-               add_i("memory.total.size (MiB)", (memsize + (1 << 9)) >> 10);
-       FLUSH_OBJECT;
-
-       for (int i = 0; i < count; i++) {
-               get_type(map[i].type, type, sizeof(type));
-               char begin[24]={0};
-               char size[24]={0};
-               char end[24]={0};
-               snprintf(begin,sizeof(begin),"0x%016llx",map[i].addr);
-               snprintf(size,sizeof(size),"0x%016llx",map[i].size);
-               snprintf(end,sizeof(end),"0x%016llx",map[i].addr+map[i].size);
-               CREATE_NEW_OBJECT;
-                       add_s("memory.segment.start",begin);
-                       add_s("memory.segment.size ",size);
-                       add_s("memory.segment.end  ",end);
-                       add_s("memory.segment.type ",remove_spaces(type));
-               FLUSH_OBJECT;
-       }
-
-       int nr = sanitize_e820_map(map, nm, count);
-       for (int i = 0; i < nr; i++) {
-               get_type(nm[i].type, type, sizeof(type));
-               char begin[24]={0};
-               char size[24]={0};
-               char end[24]={0};
-               snprintf(begin,sizeof(begin),"0x%016llx",nm[i].addr);
-               snprintf(size,sizeof(size),"0x%016llx",nm[i].size);
-               snprintf(end,sizeof(end),"0x%016llx",nm[i].addr+nm[i].size);
-               CREATE_NEW_OBJECT;
-                       add_s("sanitized_memory.segment.start",begin);
-                       add_s("sanitized_memory.segment.size ",size);
-                       add_s("sanitized_memory.segment.end  ",end);
-                       add_s("sanitized_memory.segment.type ",remove_spaces(type));
-               FLUSH_OBJECT;
-       }
-}
-
-void dump_memory(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-       CREATE_NEW_OBJECT;
-               add_s("Memory configuration","true");
-       FLUSH_OBJECT;
-
-       dump_88(hardware,config,item);
-       dump_e801(hardware,config,item);
-       dump_e820(hardware,config,item);
-       to_cpio("memory");
-}
diff --git a/com32/hdt/hdt-dump-pci.c b/com32/hdt/hdt-dump-pci.c
deleted file mode 100644 (file)
index b1f18fd..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include "hdt-common.h"
-#include "hdt-dump.h"
-
-void dump_pci(struct s_hardware *hardware, ZZJSON_CONFIG * config,
-             ZZJSON ** item)
-{
-    int i = 1;
-    struct pci_device *pci_device=NULL;
-    char kernel_modules[LINUX_KERNEL_MODULE_SIZE *
-                       MAX_KERNEL_MODULES_PER_PCI_DEVICE];
-    bool nopciids = false;
-    bool nomodulespcimap = false;
-    bool nomodulesalias = false;
-    bool nomodulesfile = false;
-    int bus = 0, slot = 0, func = 0;
-    
-    if (hardware->pci_ids_return_code == -ENOPCIIDS) {
-       nopciids = true;
-    }
-    if (hardware->modules_pcimap_return_code == -ENOMODULESPCIMAP) {
-       nomodulespcimap = true;
-    }
-    if (hardware->modules_pcimap_return_code == -ENOMODULESALIAS) {
-       nomodulesalias = true;
-    }
-
-    nomodulesfile = nomodulespcimap && nomodulesalias;
-
-    CREATE_NEW_OBJECT;
-
-    add_i("pci_device.count", hardware->nb_pci_devices);
-
-    FLUSH_OBJECT;
-    /* For every detected pci device, compute its submenu */
-    for_each_pci_func(pci_device, hardware->pci_domain) {
-       if (pci_device == NULL)
-           continue;
-       char v[10] = { 0 };
-       char sv[10] = { 0 };
-       char p[10] = { 0 };
-       char sp[10] = { 0 };
-       char c[10] = { 0 };
-       char r[10] = { 0 };
-
-       CREATE_NEW_OBJECT;
-       bus = __pci_bus;
-       slot = __pci_slot;
-       func = __pci_func;
-
-       memset(kernel_modules, 0, sizeof kernel_modules);
-       for (int kmod = 0;
-            kmod < pci_device->dev_info->linux_kernel_module_count; kmod++) {
-           if (kmod > 0) {
-               strncat(kernel_modules, " | ", 3);
-           }
-           strncat(kernel_modules,
-                   pci_device->dev_info->linux_kernel_module[kmod],
-                   LINUX_KERNEL_MODULE_SIZE - 1);
-       }
-       if (pci_device->dev_info->linux_kernel_module_count == 0)
-           strlcpy(kernel_modules, "unknown", 7);
-
-       add_i("pci_device.number", i);
-       if (nopciids == false) {
-           add_s("pci_device.vendor_name", pci_device->dev_info->vendor_name);
-           add_s("pci_device.product_name",
-                  pci_device->dev_info->product_name);
-       }
-       if (nomodulesfile == false) {
-           add_s("pci_device.class_name", pci_device->dev_info->class_name);
-           add_s("pci_device.kernel_module", kernel_modules);
-       }
-
-       snprintf(v, sizeof(v), "%04x", pci_device->vendor);
-       snprintf(p, sizeof(p), "%04x", pci_device->product);
-       snprintf(sv, sizeof(sv), "%04x", pci_device->sub_vendor);
-       snprintf(sp, sizeof(sp), "%04x", pci_device->sub_product);
-       snprintf(c, sizeof(c), "%02x.%02x.%02x",
-                pci_device->class[2],
-                pci_device->class[1], pci_device->class[0]);
-       snprintf(r, sizeof(r), "%02x", pci_device->revision);
-       add_s("pci_device.vendor_id", v);
-       add_s("pci_device.product_id", p);
-       add_s("pci_device.sub_vendor_id", sv);
-       add_s("pci_device.sub_product_id", sp);
-       add_s("pci_device.class_id", c);
-       add_s("pci_device.revision", r);
-       if ((pci_device->dev_info->irq > 0)
-           && (pci_device->dev_info->irq < 255))
-           add_i("pci_device.irq", pci_device->dev_info->irq);
-
-       add_i("pci_device.latency", pci_device->dev_info->latency);
-       add_i("pci_device.bus", bus);
-       add_i("pci_device.slot", slot);
-       add_i("pci_device.func", func);
-
-       if (hardware->is_pxe_valid == true) {
-           if ((hardware->pxe.pci_device != NULL)
-               && (hardware->pxe.pci_device == pci_device)) {
-               add_hs(pxe.mac_addr);
-               add_s("pxe", "Current boot device");
-           }
-       }
-       i++;
-       FLUSH_OBJECT;
-    }
-    to_cpio("pci");
-}
diff --git a/com32/hdt/hdt-dump-pxe.c b/com32/hdt/hdt-dump-pxe.c
deleted file mode 100644 (file)
index 4e25c94..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include "hdt-common.h"
-#include "hdt-dump.h"
-#include <sys/gpxe.h>
-#include <netinet/in.h>
-
-void dump_pxe(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-       struct in_addr in;
-
-       CREATE_NEW_OBJECT;
-       add_hb(is_pxe_valid);
-       if (hardware->is_pxe_valid) {
-               char buffer[32] = {0};
-               snprintf(buffer,sizeof(buffer),"0x%x",hardware->pxe.vendor_id);
-               add_s("pxe.vendor_id",buffer);
-               snprintf(buffer,sizeof(buffer),"0x%x",hardware->pxe.product_id);
-               add_s("pxe.product_id",buffer);
-               snprintf(buffer,sizeof(buffer),"0x%x",hardware->pxe.subvendor_id);
-               add_s("pxe.subvendor_id",buffer);
-               snprintf(buffer,sizeof(buffer),"0x%x",hardware->pxe.subproduct_id);
-               add_s("pxe.subproduct_id",buffer);
-
-               if (hardware->pci_ids_return_code == -ENOPCIIDS || (hardware->pxe.pci_device == NULL)) { 
-                       add_s("Manufacturer_name","no_pci_ids_file or no device found");
-                       add_s("Product_name","no_pci_ids_file or no device found");
-               } else {
-                       add_s("Manufacturer_name", hardware->pxe.pci_device->dev_info->vendor_name);
-                       add_s("Product_name", hardware->pxe.pci_device->dev_info->product_name);
-               }
-
-               add_hi(pxe.rev);
-               add_hi(pxe.pci_bus);
-               add_hi(pxe.pci_dev);
-               add_hi(pxe.pci_func);
-               add_hi(pxe.base_class);
-               add_hi(pxe.sub_class);
-               add_hi(pxe.prog_intf);
-               add_hi(pxe.nictype);
-               add_hs(pxe.mac_addr);
-       
-               in.s_addr = hardware->pxe.dhcpdata.cip;
-               add_s("pxe.client_ip", inet_ntoa(in));
-               in.s_addr = hardware->pxe.dhcpdata.sip;
-               add_s("pxe.next_server_ip",inet_ntoa(in));
-               in.s_addr = hardware->pxe.dhcpdata.gip;
-               add_s("pxe.relay_agent_ip",inet_ntoa(in));
-               memcpy(&in, hardware->pxe.ip_addr, sizeof in);
-               add_s("pxe.ipaddr",inet_ntoa(in));
-               add_b("gpxe_detected",is_gpxe());
-       }
-       FLUSH_OBJECT;
-       to_cpio("pxe");
-}
diff --git a/com32/hdt/hdt-dump-syslinux.c b/com32/hdt/hdt-dump-syslinux.c
deleted file mode 100644 (file)
index 7cef925..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include "hdt-common.h"
-#include "hdt-dump.h"
-#include <syslinux/config.h>
-
-void dump_syslinux(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-       CREATE_NEW_OBJECT;
-       add_hs(syslinux_fs);
-       add_hs(sv->version_string);
-       add_hi(sv->version);
-       add_hi(sv->max_api);
-       add_hs(sv->copyright_string);
-       FLUSH_OBJECT
-       to_cpio("syslinux");
-}
diff --git a/com32/hdt/hdt-dump-vesa.c b/com32/hdt/hdt-dump-vesa.c
deleted file mode 100644 (file)
index 97d56c9..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include "hdt-common.h"
-#include "hdt-dump.h"
-#include <syslinux/config.h>
-
-void dump_vesa(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-       CREATE_NEW_OBJECT;
-       add_hb(is_vesa_valid);
-       if (hardware->is_vesa_valid) {
-               char buffer[64]={0};
-               snprintf(buffer,sizeof(buffer),"%d.%d", hardware->vesa.major_version, hardware->vesa.minor_version);
-               add_s("vesa.version",buffer);
-               add_hs(vesa.vendor);
-               add_hs(vesa.product);
-               add_hs(vesa.product_revision);
-               add_hi(vesa.software_rev);
-               memset(buffer,0,sizeof(buffer));
-               snprintf(buffer,sizeof(buffer),"%d KB",hardware->vesa.total_memory*64);
-               add_s("vesa.memory",buffer);
-               add_i("vesa.modes",hardware->vesa.vmi_count);
-               FLUSH_OBJECT;
-               for (int i = 0; i < hardware->vesa.vmi_count; i++) {
-                       struct vesa_mode_info *mi = &hardware->vesa.vmi[i].mi;
-                       if ((mi->h_res == 0) || (mi->v_res == 0))
-                               continue;
-                       CREATE_NEW_OBJECT;
-                       memset(buffer,0,sizeof(buffer));
-                       snprintf(buffer,sizeof(buffer),"0x%04x",hardware->vesa.vmi[i].mode + 0x200);
-                       add_s("vesa.kernel_mode",buffer);
-                       add_i("vesa.hres",mi->h_res);
-                       add_i("vesa.vres",mi->v_res);
-                       add_i("vesa.bpp",mi->bpp);
-                       FLUSH_OBJECT;
-               }
-       } else {
-               FLUSH_OBJECT;
-       }
-       to_cpio("vesa");
-}
diff --git a/com32/hdt/hdt-dump-vpd.c b/com32/hdt/hdt-dump-vpd.c
deleted file mode 100644 (file)
index 36451c8..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include "hdt-common.h"
-#include "hdt-dump.h"
-
-void dump_vpd(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
-
-       CREATE_NEW_OBJECT;
-       add_hb(is_vpd_valid);
-       if (hardware->is_vpd_valid) {
-               add_hs(vpd.bios_build_id);
-               add_hs(vpd.bios_release_date);
-               add_hs(vpd.bios_version);
-               add_hs(vpd.default_flash_filename);
-               add_hs(vpd.box_serial_number);
-               add_hs(vpd.motherboard_serial_number);
-               add_hs(vpd.machine_type_model);
-       }
-       FLUSH_OBJECT;
-       to_cpio("vpd");
-}
diff --git a/com32/hdt/hdt-dump.c b/com32/hdt/hdt-dump.c
deleted file mode 100644 (file)
index 8c22140..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <getkey.h>
-#include <syslinux/config.h>
-#include "hdt-common.h"
-#include "hdt-dump.h"
-
-struct print_buf p_buf;
-
-void compute_filename(struct s_hardware *hardware, char *filename, int size) {
-
-   snprintf(filename,size,"%s/",hardware->dump_path);
-
-    if (hardware->is_pxe_valid) {
-           strncat(filename, hardware->pxe.mac_addr, sizeof(hardware->pxe.mac_addr));
-           strncat(filename, "+", 1);
-    } 
-    
-    if (hardware->is_dmi_valid) {
-           strncat(filename, remove_spaces(hardware->dmi.system.product_name), sizeof(hardware->dmi.system.manufacturer));
-           strncat(filename, "+", 1);
-           strncat(filename, remove_spaces(hardware->dmi.system.manufacturer), sizeof(hardware->dmi.system.product_name));
-    }
-
-    /* We replace the ":" in the filename by some "-"
-     * This will avoid Microsoft FS turning crazy */
-    chrreplace(filename,':','-');
-
-    /* Avoid space to make filename easier to manipulate */
-    chrreplace(filename,' ','_');
-
-}
-
-int dumpprintf(FILE *p, const char *format, ...) {
-   va_list ap;
-   int rv;
-
-  (void) p;  
-   va_start(ap, format);
-   rv = vbufprintf(&p_buf,format, ap);
-   va_end(ap);
-   return rv;
-}
-
-void to_cpio(char *filename) { 
-   cpio_writefile(upload,filename,p_buf.buf,p_buf.len);
-   if ((p_buf.buf) && (p_buf.len > 0)){ 
-      memset(p_buf.buf,0,p_buf.len);
-      free(p_buf.buf); 
-      p_buf.buf=NULL;
-      p_buf.size=0;
-      p_buf.len=0;
-   }
-}
-
-void flush (ZZJSON_CONFIG *config, ZZJSON ** item) { 
-   zzjson_print(config, *item);
-   zzjson_free(config, *item);
-   *item=NULL;
-}
-
-/**
- * dump - dump info
- **/
-void dump(struct s_hardware *hardware)
-{
-    if (hardware->is_pxe_valid==false) {
-           printf("PXE stack was not detected, Dump feature is not available\n");
-           return;
-    }
-
-    const union syslinux_derivative_info *sdi = syslinux_derivative_info();
-    int err=0;
-    ZZJSON *json = NULL;
-    ZZJSON_CONFIG config = { ZZJSON_VERY_STRICT, NULL,
-               (int(*)(void*)) fgetc,
-               NULL,
-               malloc, calloc, free, realloc,
-               stderr, NULL, stdout,
-               (int(*)(void *,const char*,...)) dumpprintf,
-               (int(*)(int,void*)) fputc 
-    };
-
-    memset(&p_buf,0,sizeof(p_buf));
-
-    /* By now, we only support TFTP reporting */
-    upload=&upload_tftp;
-    upload->name="tftp";
-
-    /* The following defines the behavior of the reporting */
-    char *arg[64];
-    char filename[512]={0};
-    compute_filename(hardware, filename, sizeof(filename));
-
-    /* The filename */
-    arg[0] = filename;
-    /* The server to upload the file */
-    if (strlen(hardware->tftp_ip) != 0) {
-           arg[1] = hardware->tftp_ip;
-           arg[2] = NULL;
-    } else {
-           arg[1] = NULL;
-           snprintf(hardware->tftp_ip, sizeof(hardware->tftp_ip),
-                           "%u.%u.%u.%u",
-                           ((uint8_t *)&sdi->pxe.ipinfo->serverip)[0],
-                           ((uint8_t *)&sdi->pxe.ipinfo->serverip)[1],
-                           ((uint8_t *)&sdi->pxe.ipinfo->serverip)[2],
-                           ((uint8_t *)&sdi->pxe.ipinfo->serverip)[3]);
-
-    }
-
-    /* We initiate the cpio to send */
-    cpio_init(upload,(const char **)arg);
-
-    dump_cpu(hardware, &config, &json);
-    dump_pxe(hardware, &config, &json);
-    dump_syslinux(hardware, &config, &json);
-    dump_vpd(hardware, &config, &json);
-    dump_vesa(hardware, &config, &json);
-    dump_disks(hardware, &config, &json);
-    dump_dmi(hardware, &config, &json);
-    dump_memory(hardware, &config, &json);
-    dump_pci(hardware, &config, &json);
-    dump_acpi(hardware, &config, &json);
-    dump_kernel(hardware, &config, &json);
-    dump_hdt(hardware, &config, &json);
-
-    /* We close & flush the file to send */
-    cpio_close(upload);
-
-    if ((err=flush_data(upload)) != TFTP_OK) {
-       /* As we manage a tftp connection, let's display the associated error message */
-       more_printf("Dump failed !\n");
-       more_printf("TFTP ERROR on  : %s:/%s \n",hardware->tftp_ip, filename);
-       more_printf("TFTP ERROR msg : %s \n",tftp_string_error_message[-err]);
-    } else {
-       more_printf("Dump file sent at %s:/%s\n",hardware->tftp_ip, filename);
-    }
-}
diff --git a/com32/hdt/hdt-dump.h b/com32/hdt/hdt-dump.h
deleted file mode 100644 (file)
index f9669da..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 20011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <bufprintf.h>
-#include <zzjson/zzjson.h>
-#include "hdt-common.h"
-
-// Macros to manipulate Arrays
-#define APPEND_ARRAY ZZJSON *temp_array; temp_array = zzjson_array_append(config, *item, zzjson_create_object(config,
-#define APPEND_OBJECT_ARRAY(value) ZZJSON *temp_ar; temp_ar = zzjson_array_append(config, *item, value); *item=temp_ar; 
-#define CREATE_ARRAY *item = zzjson_create_array(config, zzjson_create_object(config, 
-#define add_ai(name,value) name,zzjson_create_number_i(config,value),
-#define add_ahi(value) add_ai(#value,hardware->value)
-#define add_as(name,value) name,zzjson_create_string(config,value),
-#define add_ahs(value) add_as(#value,hardware->value)
-#define END_OF_ARRAY NULL),NULL)
-#define END_OF_APPEND NULL)); *item=temp_array;
-
-// Macros to manipulate objects
-#define CREATE_NEW_OBJECT   *item = zzjson_create_object(config, NULL);
-#define FLUSH_OBJECT flush(config, item); 
-
-// Macros to manipulate integers as objects
-#define add_i(name,value) *item = zzjson_object_append(config, *item, name, zzjson_create_number_i(config, value))
-#define add_hi(value) add_i(#value,hardware->value)
-
-// Macros to manipulate strings as objects
-#define add_s(name,value) *item = zzjson_object_append(config, *item, name, zzjson_create_string(config, value))
-#define add_hs(value) add_s(#value,(char *)hardware->value)
-
-// Macros to manipulate bool as objects
-#define add_bool_true(name) *item = zzjson_object_append(config, *item, (char *)name, zzjson_create_true(config))
-#define add_bool_false(name) *item = zzjson_object_append(config, *item, (char*)name, zzjson_create_false(config))
-#define add_b(name,value) if (value==true) {add_bool_true(name);} else {add_bool_false(name);}
-#define add_hb(value) add_b(#value,hardware->value)
-
-extern struct print_buf p_buf;
-
-void print_and_flush(ZZJSON_CONFIG *config, ZZJSON **item);
-int dumpprintf(FILE *p, const char *format, ...);
-void flush (ZZJSON_CONFIG *config, ZZJSON ** item);
-void to_cpio(char *filename);
-
-void dump_cpu(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item);
-void dump_pxe(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item);
-void dump_syslinux(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item);
-void dump_vpd(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item);
-void dump_vesa(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item);
-void dump_disks(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item);
-void dump_dmi(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item);
-void dump_memory(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item);
-void dump_pci(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item);
-void dump_acpi(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item);
-void dump_kernel(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item);
-void dump_hdt(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item);
-void dump(struct s_hardware *hardware);
index 8e0ba18..16bcf73 100644 (file)
@@ -32,7 +32,7 @@ void compute_table(struct s_my_menu *menu, void *address, s_acpi_description_hea
     char buffer[SUBMENULEN + 1] = { 0 };
     char statbuffer[STATLEN + 1] = { 0 };
 
-    snprintf(buffer, sizeof buffer, "%-4s v%03x %-6s %-8s %-7s %08x", 
+    snprintf(buffer, sizeof buffer, "%-4s v%03x %-6s %-7s %-7s %08x", 
                    h->signature, h->revision, h->oem_id, h->oem_table_id, h->creator_id, h->creator_revision);
     snprintf(statbuffer, sizeof statbuffer, "%-4s v%03x %-6s %-7s 0x%08x %-4s    0x%08x @ 0x%p", 
                    h->signature, h->revision, h->oem_id, h->oem_table_id,
@@ -52,7 +52,7 @@ static void compute_acpi_tables(struct s_my_menu *menu,
 
     char buffer[SUBMENULEN + 1] = { 0 };
 
-    snprintf(buffer, sizeof buffer, "%-4s %-4s %-6s %-8s %-7s %-8s", 
+    snprintf(buffer, sizeof buffer, "%-4s %-4s %-6s %-7s %-7s %-8s", 
                    "ACPI", "rev", "oem", "table_id", "creator", "creator_rev");
     add_item(buffer, "Description", OPT_INACTIVE, NULL, 0);
     menu->items_count++;
index 0716b43..b0b4a5a 100644 (file)
@@ -120,9 +120,9 @@ static void compute_partition_information(struct driveinfo *drive_info,
        add_item(buffer, statbuffer, OPT_INACTIVE, NULL, 0);
     }
 
-    snprintf(buffer, sizeof buffer, "Boot Flag   : %s",
+    snprintf(buffer, sizeof buffer, "Bootable    : %s",
             (ptab->active_flag == 0x80) ? "Yes" : "No");
-    snprintf(statbuffer, sizeof statbuffer, "Boot Flag: %s",
+    snprintf(statbuffer, sizeof statbuffer, "Bootable: %s",
             (ptab->active_flag == 0x80) ? "Yes" : "No");
     add_item(buffer, statbuffer, OPT_INACTIVE, NULL, 0);
 
@@ -243,12 +243,12 @@ void compute_disks(struct s_hdt_menu *menu, struct s_hardware *hardware)
     if (hardware->disks_count == 0)
        return;
 
-    for (int drive = 0x80; drive < 0xff; drive++) {
-       if (!hardware->disk_info[drive - 0x80].cbios)
+    for (int i = 0; i < hardware->disks_count; i++) {
+       if (!hardware->disk_info[i].cbios)
            continue;           /* Invalid geometry */
        compute_disk_module
            ((struct s_my_menu *)&(menu->disk_sub_menu), nb_sub_disk_menu,
-            hardware, drive - 0x80);
+            hardware, i);
        nb_sub_disk_menu++;
     }
 
index 12d8b11..426bfe0 100644 (file)
@@ -34,7 +34,7 @@ void compute_PXE(struct s_my_menu *menu, struct s_hardware *hardware)
 {
     char buffer[SUBMENULEN + 1];
     char infobar[STATLEN + 1];
-    char gpxe[4]={0};
+    char gpxe[4];
 
     if (hardware->is_pxe_valid == false)
        return;
@@ -113,8 +113,8 @@ void compute_PXE(struct s_my_menu *menu, struct s_hardware *hardware)
     add_item(buffer, infobar, OPT_INACTIVE, NULL, 0);
     menu->items_count++;
 
-    if (is_gpxe()) snprintf(gpxe,sizeof(gpxe),"%s","Yes");
-    else snprintf (gpxe, sizeof(gpxe), "%s", "No");
+    if (is_gpxe()) strcat(gpxe,"Yes");
+    else strcat (gpxe,"No");
 
     snprintf(buffer, sizeof buffer, "gPXE Detected: %s", gpxe);
     snprintf(infobar, sizeof infobar, "gPXE Detected: %s", gpxe);
index 50b3eaa..0fdee03 100644 (file)
@@ -62,12 +62,6 @@ int start_menu_mode(struct s_hardware *hardware, char *version_string)
                (curr->data, HDT_SWITCH_TO_CLI, sizeof(HDT_SWITCH_TO_CLI))) {
                return HDT_RETURN_TO_CLI;
            }
-           /* Tweak, we want to start the dump mode */
-           if (!strncmp
-               (curr->data, HDT_DUMP, sizeof(HDT_DUMP))) {
-                   dump(hardware);
-               return 0;
-           }
            if (!strncmp
                (curr->data, HDT_REBOOT, sizeof(HDT_REBOOT))) {
                syslinux_reboot(1);
@@ -295,12 +289,6 @@ void compute_main_menu(struct s_hdt_menu *hdt_menu, struct s_hardware *hardware)
 
     add_item("S<w>itch to CLI", "Switch to Command Line", OPT_RUN,
             HDT_SWITCH_TO_CLI, 0);
-
-    if (hardware->is_pxe_valid == true) {
-    add_item("<D>ump to tftp", "Dump to tftp", OPT_RUN,
-            HDT_DUMP, 0);
-    }
-
     add_item("<A>bout", "About Menu", OPT_SUBMENU, NULL,
             hdt_menu->about_menu.menu);
     add_item("<R>eboot", "Reboot", OPT_RUN, HDT_REBOOT, 0);
index dd9f801..ca3835d 100755 (executable)
Binary files a/com32/hdt/hdt.c32 and b/com32/hdt/hdt.c32 differ
index 7b35236..dd48948 100644 (file)
@@ -33,8 +33,8 @@
 #define AUTHOR "Erwan Velu"
 #define CORE_DEVELOPER "Pierre-Alexandre Meyer"
 #define CONTACT "hdt@zytor.com"
-#define VERSION "0.5.0"
-#define CODENAME "Van De Keizer"
+#define VERSION "0.4.1"
+#define CODENAME "chouffe"
 #define NB_CONTRIBUTORS 3
 #define CONTRIBUTORS {"Sebastien Gonzalve (Patches)", "Gert Hulselmans (Tests)", "Alexander Andino (Design)"}
 #define WEBSITE_URL "http://hdt-project.org"
index 213e8ab..caa5e72 100644 (file)
@@ -6,9 +6,13 @@
 #define _BITSIZE_STDDEF_H
 
 #define _SIZE_T
+#if defined(__s390__) || defined(__hppa__) || defined(__cris__)
+typedef unsigned long size_t;
+#else
 typedef unsigned int size_t;
+#endif
 
 #define _PTRDIFF_T
-typedef signed long ptrdiff_t;
+typedef signed int ptrdiff_t;
 
 #endif /* _BITSIZE_STDDEF_H */
index 8e444b6..8cbfc5d 100644 (file)
@@ -5,24 +5,24 @@
 #ifndef _BITSIZE_STDINT_H
 #define _BITSIZE_STDINT_H
 
-typedef signed char            int8_t;
-typedef short int              int16_t;
-typedef int                    int32_t;
-typedef long long int          int64_t;
+typedef signed char int8_t;
+typedef short int int16_t;
+typedef int int32_t;
+typedef long long int int64_t;
 
-typedef unsigned char          uint8_t;
-typedef unsigned short int     uint16_t;
-typedef unsigned int           uint32_t;
-typedef unsigned long long int uint64_t;
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long long int uint64_t;
 
-typedef int                    int_fast16_t;
-typedef int                    int_fast32_t;
+typedef int int_fast16_t;
+typedef int int_fast32_t;
 
-typedef unsigned int           uint_fast16_t;
-typedef unsigned int           uint_fast32_t;
+typedef unsigned int uint_fast16_t;
+typedef unsigned int uint_fast32_t;
 
-typedef int                    intptr_t;
-typedef unsigned int           uintptr_t;
+typedef int intptr_t;
+typedef unsigned int uintptr_t;
 
 #define __INT64_C(c)   c ## LL
 #define __UINT64_C(c)  c ## ULL
@@ -31,4 +31,4 @@ typedef unsigned int          uintptr_t;
 #define __PRIFAST_RANK ""
 #define __PRIPTR_RANK  ""
 
-#endif                         /* _BITSIZE_STDINT_H */
+#endif /* _BITSIZE_STDINT_H */
index 7db63bd..8157dd0 100644 (file)
@@ -15,4 +15,4 @@
 #define UINTPTR_C(c)    UINT32_C(c)
 #define PTRDIFF_C(c)     INT32_C(c)
 
-#endif                         /* _BITSIZE_STDINTCONST_H */
+#endif /* _BITSIZE_STDINTCONST_H */
index d85094d..b44fe01 100644 (file)
@@ -19,4 +19,4 @@
 #define PTRDIFF_MIN    INT32_MIN
 #define PTRDIFF_MAX    INT32_MAX
 
-#endif                         /* _BITSIZE_STDINTLIMITS_H */
+#endif /* _BITSIZE_STDINTLIMITS_H */
diff --git a/com32/include/bufprintf.h b/com32/include/bufprintf.h
deleted file mode 100644 (file)
index 5cbeaa4..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#define BUFPAD 4096
-
-struct print_buf {
-    char *buf;
-    size_t len;
-    size_t size;
-};
-
-int vbufprintf(struct print_buf *buf, const char *format, va_list ap);
-int bufprintf(struct print_buf *buf, const char *format, ...);
index 83263c2..df9dd3d 100644 (file)
@@ -7,7 +7,7 @@
 #ifndef __ASM_I386_CPUFEATURE_H
 #define __ASM_I386_CPUFEATURE_H
 
-#define NCAPINTS       9       /* N 32-bit words worth of info */
+#define NCAPINTS       7       /* N 32-bit words worth of info */
 
 /* Intel-defined CPU features, CPUID level 0x00000001 (edx), word 0 */
 #define X86_FEATURE_FPU                (0*32+ 0)       /* Onboard FPU */
index 6e0645e..83bbda1 100644 (file)
@@ -117,6 +117,5 @@ __ctype_inline int tolower(int __c)
 }
 
 __extern char *skipspace(const char *p);
-__extern void chrreplace(char *source, char old, char new);
 
 #endif /* _CTYPE_H */
index b8a3b84..30a21ad 100644 (file)
@@ -7,30 +7,16 @@
 
 #ifdef DEBUG
 
-# include <stdio.h>
+#include <stdio.h>
 
-# ifdef DEBUG_STDIO
-#  define dprintf  printf
-#  define vdprintf vprintf
-# else
 void dprintf(const char *, ...);
 void vdprintf(const char *, va_list);
-# endif
 
 #else
 
-# define dprintf(fmt, ...)     ((void)(0))
-# define vdprintf(fmt, ap)     ((void)(0))
+#define dprintf(fmt, ...)      ((void)(0))
+#define vdprintf(fmt, ap)      ((void)(0))
 
 #endif /* DEBUG */
 
-# if DEBUG >= 2
-/* Really verbose debugging... */
-#  define dprintf2  dprintf
-#  define vdprintf2 vdprintf
-# else
-#  define dprintf2(fmt, ...)   ((void)(0))
-#  define vdprintf2(fmt, ap)   ((void)(0))
-# endif
-
 #endif /* _DPRINTF_H */
index d2af351..ccf0475 100644 (file)
@@ -5,7 +5,6 @@
 
 #include <stdint.h>
 #include <klibc/compiler.h>
-#include <klibc/extern.h>
 
 #define __htons_macro(v) ((uint16_t)                                   \
                          (((uint16_t)(v) << 8) |                       \
@@ -54,6 +53,4 @@ struct in_addr {
     in_addr_t s_addr;
 };
 
-__extern char *inet_ntoa(struct in_addr);
-
 #endif /* _NETINET_IN_H */
index f64f027..a8391bf 100644 (file)
 #ifndef _STDINT_H
 #define _STDINT_H
 
-#include <bitsize/stdint.h>
+/* Exact types */
 
-typedef int8_t         int_least8_t;
-typedef int16_t                int_least16_t;
-typedef int32_t                int_least32_t;
-typedef int64_t                int_least64_t;
+typedef signed char int8_t;
+typedef signed short int16_t;
+typedef signed int int32_t;
+typedef signed long long int64_t;
 
-typedef uint8_t                uint_least8_t;
-typedef uint16_t       uint_least16_t;
-typedef uint32_t       uint_least32_t;
-typedef uint64_t       uint_least64_t;
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long long uint64_t;
 
-typedef int8_t         int_fast8_t;
-typedef int64_t                int_fast64_t;
+/* Small types */
 
-typedef uint8_t                uint_fast8_t;
-typedef uint64_t       uint_fast64_t;
+typedef signed char int_least8_t;
+typedef signed short int_least16_t;
+typedef signed int int_least32_t;
+typedef signed long long int_least64_t;
 
-typedef int64_t                intmax_t;
-typedef uint64_t       uintmax_t;
+typedef unsigned char uint_least8_t;
+typedef unsigned short uint_least16_t;
+typedef unsigned int uint_least32_t;
+typedef unsigned long long uint_least64_t;
 
-#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
+/* Fast types */
 
-#define INT8_MIN       (-128)
-#define INT16_MIN      (-32768)
-#define INT32_MIN      (-2147483647-1)
-#define INT64_MIN      (__INT64_C(-9223372036854775807)-1)
+typedef signed char int_fast8_t;
+typedef signed short int_fast16_t;
+typedef signed int int_fast32_t;
+typedef signed long long int_fast64_t;
 
-#define INT8_MAX       (127)
-#define INT16_MAX      (32767)
-#define INT32_MAX      (2147483647)
-#define INT64_MAX      (__INT64_C(9223372036854775807))
+typedef unsigned char uint_fast8_t;
+typedef unsigned short uint_fast16_t;
+typedef unsigned int uint_fast32_t;
+typedef unsigned long long uint_fast64_t;
 
-#define UINT8_MAX      (255U)
-#define UINT16_MAX     (65535U)
-#define UINT32_MAX     (4294967295U)
-#define UINT64_MAX     (__UINT64_C(18446744073709551615))
+/* Pointer types */
 
-#define INT_LEAST8_MIN INT8_MIN
-#define INT_LEAST16_MIN        INT16_MIN
-#define INT_LEAST32_MIN        INT32_MIN
-#define INT_LEAST64_MIN        INT64_MIN
+typedef int32_t intptr_t;
+typedef uint32_t uintptr_t;
 
-#define INT_LEAST8_MAX INT8_MAX
-#define INT_LEAST16_MAX        INT16_MAX
-#define INT_LEAST32_MAX        INT32_MAX
-#define INT_LEAST64_MAX        INT64_MAX
+/* Maximal types */
 
-#define UINT_LEAST8_MAX         UINT8_MAX
-#define UINT_LEAST16_MAX UINT16_MAX
-#define UINT_LEAST32_MAX UINT32_MAX
-#define UINT_LEAST64_MAX UINT64_MAX
+typedef int64_t intmax_t;
+typedef uint64_t uintmax_t;
 
-#define INT_FAST8_MIN  INT8_MIN
-#define INT_FAST64_MIN INT64_MIN
+/*
+ * To be strictly correct...
+ */
+#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
 
-#define INT_FAST8_MAX  INT8_MAX
-#define INT_FAST64_MAX INT64_MAX
+# define INT8_MIN               (-128)
+# define INT16_MIN              (-32767-1)
+# define INT32_MIN              (-2147483647-1)
+# define INT64_MIN              (-9223372036854775807LL-1)
 
-#define UINT_FAST8_MAX UINT8_MAX
-#define UINT_FAST64_MAX UINT64_MAX
+# define INT8_MAX               (127)
+# define INT16_MAX              (32767)
+# define INT32_MAX              (2147483647)
+# define INT64_MAX              (9223372036854775807LL)
 
-#define INTMAX_MIN     INT64_MIN
-#define INTMAX_MAX     INT64_MAX
-#define UINTMAX_MAX    UINT64_MAX
+# define UINT8_MAX              (255U)
+# define UINT16_MAX             (65535U)
+# define UINT32_MAX             (4294967295U)
+# define UINT64_MAX             (18446744073709551615ULL)
 
-#include <bitsize/stdintlimits.h>
+# define INT_LEAST8_MIN               (-128)
+# define INT_LEAST16_MIN              (-32767-1)
+# define INT_LEAST32_MIN              (-2147483647-1)
+# define INT_LEAST64_MIN              (-9223372036854775807LL-1)
 
-#endif
+# define INT_LEAST8_MAX               (127)
+# define INT_LEAST16_MAX              (32767)
+# define INT_LEAST32_MAX              (2147483647)
+# define INT_LEAST64_MAX              (9223372036854775807LL)
 
-#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
+# define UINT_LEAST8_MAX              (255U)
+# define UINT_LEAST16_MAX             (65535U)
+# define UINT_LEAST32_MAX             (4294967295U)
+# define UINT_LEAST64_MAX             (18446744073709551615ULL)
 
-#define INT8_C(c)      c
-#define INT16_C(c)     c
-#define INT32_C(c)     c
-#define INT64_C(c)     __INT64_C(c)
+# define INT_FAST8_MIN               (-128)
+# define INT_FAST16_MIN              (-32767-1)
+# define INT_FAST32_MIN              (-2147483647-1)
+# define INT_FAST64_MIN              (-9223372036854775807LL-1)
 
-#define UINT8_C(c)     c ## U
-#define UINT16_C(c)    c ## U
-#define UINT32_C(c)    c ## U
-#define UINT64_C(c)    __UINT64_C(c)
+# define INT_FAST8_MAX               (127)
+# define INT_FAST16_MAX              (32767)
+# define INT_FAST32_MAX              (2147483647)
+# define INT_FAST64_MAX              (9223372036854775807LL)
 
-#define INT_LEAST8_C(c)         INT8_C(c)
-#define INT_LEAST16_C(c) INT16_C(c)
-#define INT_LEAST32_C(c) INT32_C(c)
-#define INT_LEAST64_C(c) INT64_C(c)
+# define UINT_FAST8_MAX              (255U)
+# define UINT_FAST16_MAX             (65535U)
+# define UINT_FAST32_MAX             (4294967295U)
+# define UINT_FAST64_MAX             (18446744073709551615ULL)
 
-#define UINT_LEAST8_C(c)  UINT8_C(c)
-#define UINT_LEAST16_C(c) UINT16_C(c)
-#define UINT_LEAST32_C(c) UINT32_C(c)
-#define UINT_LEAST64_C(c) UINT64_C(c)
+# define INTPTR_MIN            (-2147483647-1)
+# define INTPTR_MAX            (2147483647)
+# define UINTPTR_MAX           (4294967295U)
 
-#define INT_FAST8_C(c) INT8_C(c)
-#define INT_FAST64_C(c) INT64_C(c)
+# define INTMAX_MIN            (-9223372036854775807LL-1)
+# define INTMAX_MAX            (9223372036854775807LL)
+# define UINTMAX_MAX           (18446744073709551615ULL)
 
-#define UINT_FAST8_C(c)  UINT8_C(c)
-#define UINT_FAST64_C(c) UINT64_C(c)
+/* ptrdiff_t limit */
+# define PTRDIFF_MIN           (-2147483647-1)
+# define PTRDIFF_MAX           (2147483647)
+
+/* sig_atomic_t limit */
+# define SIG_ATOMIC_MIN         (-2147483647-1)
+# define SIG_ATOMIC_MAX         (2147483647)
+
+/* size_t limit */
+# define SIZE_MAX              (4294967295U)
+
+#endif /* STDC_LIMIT_MACROS */
+
+#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
 
-#define INTMAX_C(c)    INT64_C(c)
-#define UINTMAX_C(c)   UINT64_C(c)
+# define INT8_C(n)     n
+# define INT16_C(n)    n
+# define INT32_C(n)    n
+# define INT64_C(n)    n ## LL
 
-#include <bitsize/stdintconst.h>
+# define UINT8_C(n)    n ## U
+# define UINT16_C(n)   n ## U
+# define UINT32_C(n)   n ## U
+# define UINT64_C(n)   n ## ULL
 
-#endif
+# define INTMAX_C(n)   n ## LL
+# define UINTMAX_C(n)  n ## ULL
 
-/* Keep the kernel from trying to define these types... */
-#define __BIT_TYPES_DEFINED__
+#endif /* STDC_CONSTANT_MACROS */
 
-#endif                         /* _STDINT_H */
+#endif /* _STDINT_H */
index 8bcdf3e..54ee7ff 100644 (file)
@@ -83,12 +83,7 @@ int syslinux_memmap_find(struct syslinux_memmap *list,
                         addr_t * start, addr_t * len, addr_t align);
 
 /* Debugging functions */
-#ifdef DEBUG
-void syslinux_dump_movelist(struct syslinux_movelist *ml);
-void syslinux_dump_memmap(struct syslinux_memmap *memmap);
-#else
-#define syslinux_dump_movelist(x) ((void)0)
-#define syslinux_dump_memmap(x)          ((void)0)
-#endif
+void syslinux_dump_movelist(FILE * file, struct syslinux_movelist *ml);
+void syslinux_dump_memmap(FILE * file, struct syslinux_memmap *memmap);
 
 #endif /* _SYSLINUX_MOVEBITS_H */
similarity index 98%
rename from mk/lib.mk
rename to com32/lib/MCONFIG
index 48b2a13..44278bd 100644 (file)
--- a/mk/lib.mk
@@ -1,6 +1,6 @@
 # -*- makefile -*-
 
-include $(MAKEDIR)/syslinux.mk
+include $(topdir)/MCONFIG
 
 GCCOPT := $(call gcc_ok,-std=gnu99,)
 GCCOPT += $(call gcc_ok,-m32,)
index 105c2bd..48a166d 100644 (file)
@@ -4,9 +4,8 @@
 
 # Include configuration rules
 NOGPL := 1
-topdir = ../../
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/lib.mk
+topdir = ../..
+include MCONFIG
 
 LIBOBJS = \
        abort.o atexit.o atoi.o atol.o atoll.o calloc.o creat.o         \
@@ -29,9 +28,6 @@ LIBOBJS = \
        asprintf.o vasprintf.o strlcpy.o strlcat.o                      \
        vsscanf.o zalloc.o                                              \
        skipspace.o                                                     \
-       chrreplace.o                                                    \
-       bufprintf.o                                                     \
-       inet.o                                                          \
        \
        lmalloc.o lstrdup.o                                             \
        \
diff --git a/com32/lib/bufprintf.c b/com32/lib/bufprintf.c
deleted file mode 100644 (file)
index 939bcec..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <bufprintf.h>
-
-int vbufprintf(struct print_buf *buf, const char *format, va_list ap)
-{
-    va_list ap2;
-    int rv;
-
-    va_copy(ap2, ap);
-    rv = vsnprintf(NULL, 0, format, ap);
-
-    /* >= to make sure we have space for terminating null */
-    if (rv + buf->len >= buf->size) {
-       size_t newsize = rv + buf->len + BUFPAD;
-       char *newbuf;
-
-       newbuf = realloc(buf->buf, newsize);
-       if (!newbuf)
-           return -1;
-
-       buf->buf = newbuf;
-       buf->size = newsize;
-    }
-
-    rv = vsnprintf(buf->buf + buf->len, buf->size - buf->len, format, ap2);
-    buf->len += rv;
-    return rv;
-}
-
-int bufprintf(struct print_buf *buf, const char *format, ...)
-{
-    va_list ap;
-    int rv;
-
-    va_start(ap, format);
-    rv = vbufprintf(buf, format, ap);
-    va_end(ap);
-    return rv;
-}
diff --git a/com32/lib/chrreplace.c b/com32/lib/chrreplace.c
deleted file mode 100644 (file)
index 65786f9..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <ctype.h>
-
-/* Replace char 'old' by char 'new' in source */
-void chrreplace(char *source, char old, char new) 
-{
-    while (*source) { 
-       source++;
-       if (source[0] == old) source[0]=new;
-    }
-}
-
index aad1174..900c0a4 100644 (file)
@@ -9,7 +9,6 @@
 #define DEBUG 1
 #include <dprintf.h>
 
-#ifndef dprintf
 void dprintf(const char *format, ...)
 {
     va_list ap;
@@ -18,4 +17,3 @@ void dprintf(const char *format, ...)
     vdprintf(format, ap);
     va_end(ap);
 }
-#endif
diff --git a/com32/lib/inet.c b/com32/lib/inet.c
deleted file mode 100644 (file)
index 133645e..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Erwan Velu - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * -----------------------------------------------------------------------
- */
-
-#include <stdio.h>
-#include <netinet/in.h>
-
-char *inet_ntoa(struct in_addr addr)
-{
-    static char buf[16];
-    const uint8_t *bytes = (const uint8_t *)&addr.s_addr;
-
-    sprintf(buf, "%u.%u.%u.%u", bytes[0], bytes[1], bytes[2], bytes[3]);
-    return buf;
-}
index e0974f9..c8334b1 100644 (file)
 #include <stdbool.h>
 #include <ctype.h>
 #include <syslinux/zio.h>
-#include <dprintf.h>
+
+#ifdef DEBUG
+# define dprintf printf
+#else
+# define dprintf(...) ((void)0)
+#endif
 
 #define MAX_LINE 512
 
@@ -61,6 +66,15 @@ static int hex_to_int(char *hexa)
     return strtoul(hexa, NULL, 16);
 }
 
+/* Replace char 'old' by char 'new' in source */
+void chr_replace(char *source, char old, char new) 
+{
+    while (*source) { 
+       source++;
+       if (source[0] == old) source[0]=new;
+    }
+}
+
 /* Try to match any pci device to the appropriate kernel module */
 /* it uses the modules.pcimap from the boot device */
 int get_module_name_from_pcimap(struct pci_domain *domain,
@@ -121,7 +135,7 @@ int get_module_name_from_pcimap(struct pci_domain *domain,
          * in the module name whereas modules.alias is only using '_'.
          * To avoid kernel modules duplication, let's rename all '-' in '_' 
          * to match what modules.alias provides */
-        case 0:chrreplace(result,'-','_');strcpy(module_name,result); break;
+        case 0:chr_replace(result,'-','_');strcpy(module_name,result); break;
         case 1:strcpy(vendor_id,result); break;
         case 2:strcpy(product_id,result); break;
         case 3:strcpy(sub_vendor_id,result); break;
index 85638cd..3f1e340 100644 (file)
 /*
  * dump_mmap.c
  *
- * Writes a syslinux_memmap out to a dprintf.
+ * Writes a syslinux_memmap out to a specified file.  This is
+ * intended for debugging.
  */
 
 #include <stdio.h>
-#include <dprintf.h>
 #include <syslinux/movebits.h>
 
-#ifdef DEBUG
-void syslinux_dump_memmap(struct syslinux_memmap *memmap)
+void syslinux_dump_memmap(FILE * file, struct syslinux_memmap *memmap)
 {
-    dprintf("%10s %10s %10s\n"
+    fprintf(file, "%10s %10s %10s\n"
            "--------------------------------\n", "Start", "Length", "Type");
     while (memmap->next) {
-       dprintf("0x%08x 0x%08x %10d\n", memmap->start,
+       fprintf(file, "0x%08x 0x%08x %10d\n", memmap->start,
                memmap->next->start - memmap->start, memmap->type);
        memmap = memmap->next;
     }
 }
-#endif
index 4042ce9..282d006 100644 (file)
  */
 
 #include <stdio.h>
-#include <dprintf.h>
 #include <syslinux/movebits.h>
 
-#ifdef DEBUG
-void syslinux_dump_movelist(struct syslinux_movelist *ml)
+void syslinux_dump_movelist(FILE * file, struct syslinux_movelist *ml)
 {
-    dprintf("%10s %10s %10s\n"
+    fprintf(file, "%10s %10s %10s\n"
            "--------------------------------\n", "Dest", "Src", "Length");
     while (ml) {
-       dprintf("0x%08x 0x%08x 0x%08x\n", ml->dst, ml->src, ml->len);
+       fprintf(file, "0x%08x 0x%08x 0x%08x\n", ml->dst, ml->src, ml->len);
        ml = ml->next;
     }
 }
-#endif
index 45cd696..c1ce875 100644 (file)
 #include <syslinux/linux.h>
 #include <syslinux/bootrm.h>
 #include <syslinux/movebits.h>
-#include <dprintf.h>
+
+#ifndef DEBUG
+# define DEBUG 0
+#endif
+#if DEBUG
+# include <stdio.h>
+# define dprintf printf
+#else
+# define dprintf(f, ...) ((void)0)
+#endif
 
 struct linux_header {
     uint8_t boot_sector_1[0x0020];
@@ -309,8 +318,10 @@ int syslinux_boot_linux(void *kernel_buf, size_t kernel_size,
     if (!mmap || !amap)
        goto bail;
 
+#if DEBUG
     dprintf("Initial memory map:\n");
-    syslinux_dump_memmap(mmap);
+    syslinux_dump_memmap(stdout, mmap);
+#endif
 
     /* If the user has specified a memory limit, mark that as unavailable.
        Question: should we mark this off-limit in the mmap as well (meaning
@@ -457,14 +468,16 @@ int syslinux_boot_linux(void *kernel_buf, size_t kernel_size,
     /* Linux is OK with sp = 0 = 64K, but perhaps other things aren't... */
     regs.esp.w[0] = min(cmdline_offset, (size_t) 0xfff0);
 
+#if DEBUG
     dprintf("Final memory map:\n");
-    syslinux_dump_memmap(mmap);
+    syslinux_dump_memmap(stdout, mmap);
 
     dprintf("Final available map:\n");
-    syslinux_dump_memmap(amap);
+    syslinux_dump_memmap(stdout, amap);
 
     dprintf("Initial movelist:\n");
-    syslinux_dump_movelist(fraglist);
+    syslinux_dump_movelist(stdout, fraglist);
+#endif
 
     syslinux_shuffle_boot_rm(fraglist, mmap, 0, &regs);
 
index 7a05f3c..bd5ce0e 100644 (file)
 #include <stdbool.h>
 
 #include <syslinux/movebits.h>
-#include <dprintf.h>
+
+#ifndef DEBUG
+# ifdef TEST
+#  define DEBUG 1
+# else
+#  define DEBUG 0
+# endif
+#endif
+
+#if DEBUG
+# include <stdio.h>
+# define dprintf printf
+#else
+# define dprintf(...) ((void)0)
+#endif
 
 static jmp_buf new_movelist_bail;
 
@@ -228,8 +242,10 @@ static void shuffle_dealias(struct syslinux_movelist **fraglist,
     addr_t ps, pe, xs, xe, delta;
     bool advance;
 
+#if DEBUG
     dprintf("Before alias resolution:\n");
-    syslinux_dump_movelist(*fraglist);
+    syslinux_dump_movelist(stdout, *fraglist);
+#endif
 
     *postcopy = NULL;
 
@@ -300,10 +316,12 @@ restart:
        ;
     }
 
+#if DEBUG
     dprintf("After alias resolution:\n");
-    syslinux_dump_movelist(*fraglist);
+    syslinux_dump_movelist(stdout, *fraglist);
     dprintf("Post-shuffle copies:\n");
-    syslinux_dump_movelist(*postcopy);
+    syslinux_dump_movelist(stdout, *postcopy);
+#endif
 }
 
 /*
@@ -431,10 +449,12 @@ nomem:
     /* As long as there are unprocessed fragments in the chain... */
     while ((fp = &frags, f = *fp)) {
 
+#if DEBUG
        dprintf("Current free list:\n");
-       syslinux_dump_memmap(mmap);
+       syslinux_dump_memmap(stdout, mmap);
        dprintf("Current frag list:\n");
-       syslinux_dump_movelist(frags);
+       syslinux_dump_movelist(stdout, frags);
+#endif
 
        /* Scan for fragments which can be discarded without action. */
        if (f->src == f->dst) {
@@ -672,16 +692,16 @@ int main(int argc, char *argv[])
 
     *fep = NULL;
 
-    dprintf("Input move list:\n");
-    syslinux_dump_movelist(frags);
-    dprintf("Input free list:\n");
-    syslinux_dump_memmap(memmap);
+    printf("Input move list:\n");
+    syslinux_dump_movelist(stdout, frags);
+    printf("Input free list:\n");
+    syslinux_dump_memmap(stdout, memmap);
 
     if (syslinux_compute_movelist(&moves, frags, memmap)) {
        printf("Failed to compute a move sequence\n");
        return 1;
     } else {
-       dprintf("Final move list:\n");
+       printf("Final move list:\n");
        syslinux_dump_movelist(stdout, moves);
        return 0;
     }
index e9ee6aa..54a7e65 100644 (file)
 #include <inttypes.h>
 #include <com32.h>
 #include <minmax.h>
-#include <dprintf.h>
 #include <syslinux/movebits.h>
 #include <klibc/compiler.h>
 
+#ifndef DEBUG
+# define DEBUG 0
+#endif
+
+#define dprintf(f, ...) ((void)0)
+#define dprintf2(f, ...) ((void)0)
+
+#if DEBUG
+# include <stdio.h>
+# undef dprintf
+# define dprintf printf
+# if DEBUG > 1
+#  undef dprintf2
+#  define dprintf2 printf
+# endif
+#endif
+
 struct shuffle_descriptor {
     uint32_t dst, src, len;
 };
index 7034c4b..b548211 100644 (file)
 #include <stdlib.h>
 #include <syslinux/align.h>
 #include <syslinux/movebits.h>
-#include <dprintf.h>
+
+#ifndef DEBUG
+# ifdef TEST
+#  define DEBUG 1
+# else
+#  define DEBUG 0
+# endif
+#endif
+
+#if DEBUG
+# include <stdio.h>
+# define dprintf printf
+#else
+# define dprintf(...) ((void)0)
+#endif
 
 /*
  * Create an empty syslinux_memmap list.
@@ -82,8 +96,10 @@ int syslinux_add_memmap(struct syslinux_memmap **list,
     struct syslinux_memmap *range;
     enum syslinux_memmap_types oldtype;
 
+#if DEBUG
     dprintf("Input memmap:\n");
-    syslinux_dump_memmap(*list);
+    syslinux_dump_memmap(stdout, *list);
+#endif
 
     /* Remove this to make len == 0 mean all of memory */
     if (len == 0)
@@ -148,8 +164,10 @@ int syslinux_add_memmap(struct syslinux_memmap **list,
        }
     }
 
+#if DEBUG
     dprintf("After adding (%#x,%#x,%d):\n", start, len, type);
-    syslinux_dump_memmap(*list);
+    syslinux_dump_memmap(stdout, *list);
+#endif
 
     return 0;
 }
index c1f90a6..d74f278 100644 (file)
@@ -14,8 +14,6 @@
 #define DEBUG 1
 #include <dprintf.h>
 
-#ifndef vdprintf
-
 #define BUFFER_SIZE    4096
 
 enum serial_port_regs {
@@ -116,5 +114,3 @@ void vdprintf(const char *format, va_list ap)
     while (rv--)
        debug_putc(*p++);
 }
-
-#endif /* vdprintf */
diff --git a/com32/libupload/.gitignore b/com32/libupload/.gitignore
deleted file mode 100644 (file)
index e0292b1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-*.o
-*.a
diff --git a/com32/libupload/Makefile b/com32/libupload/Makefile
deleted file mode 100644 (file)
index 8305335..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# Include configuration rules
-topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/com32.mk
-
-REQFLAGS += -I./
-
-SUBDIRS := . 
-LIBOBJS := $(foreach dir,$(SUBDIRS),$(patsubst %.c,%.o,$(wildcard $(dir)/*.c)))
-
-BINDIR   = /usr/bin
-LIBDIR   = /usr/lib
-DATADIR  = /usr/share
-AUXDIR   = $(DATADIR)/syslinux
-INCDIR   = /usr/include
-COM32DIR = $(AUXDIR)/com32
-
-all: libcom32upload.a
-
-libcom32upload.a : $(LIBOBJS)
-       rm -f $@
-       $(AR) cq $@ $^
-       $(RANLIB) $@
-
-tidy dist clean:
-       find . \( -name \*.o -o -name \*.a -o -name .\*.d -o -name \*.tmp \) -print0 | \
-               xargs -0r rm -f
-
-spotless: clean
-       rm -f *.a
-       rm -f *~ \#* */*~ */\#*
-
-install: all
-       mkdir -m 755 -p $(INSTALLROOT)$(COM32DIR)
-       install -m 644 libcom32upload.a $(INSTALLROOT)$(COM32DIR)
-       mkdir -p $(INSTALLROOT)$(COM32DIR)/include/
-       cp -r *.h $(INSTALLROOT)$(COM32DIR)/include/
-
--include .*.d */.*.d */*/.*.d
diff --git a/com32/libupload/tftp.h b/com32/libupload/tftp.h
deleted file mode 100644 (file)
index 323dc16..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <stdint.h>
-
-#ifndef UPLOAD_TFTP
-#define UPLOAD_TFTP
-/* TFTP Error codes */
-enum tftp_error_codes {
-TFTP_ERR_UNKNOWN_ERROR = 0, // We have to use the message from the server
-TFTP_ERR_FILE_NOT_FOUND        = 1, /**< File not found */
-TFTP_ERR_ACCESS_DENIED = 2, /**< Access violation */
-TFTP_ERR_DISK_FULL = 3, /**< Disk full or allocation exceeded */
-TFTP_ERR_ILLEGAL_OP = 4, /**< Illegal TFTP operation */
-TFTP_ERR_UNKNOWN_TID = 5, /**< Unknown transfer ID */
-TFTP_ERR_FILE_EXISTS = 6, /**< File already exists */
-TFTP_ERR_UNKNOWN_USER = 7, /**< No such user */
-TFTP_ERR_BAD_OPTS = 8, /**< Option negotiation failed */
-TFTP_ERR_UNABLE_TO_RESOLVE = 9, // Not in RFC, internal usage 
-TFTP_ERR_UNABLE_TO_CONNECT = 10, // Not in RFC, internal usage
-TFTP_OK        = 11, /* Not in RFC */
-};
-
-extern const char *tftp_string_error_message[];
-#endif
diff --git a/com32/libupload/upload_backend.h b/com32/libupload/upload_backend.h
deleted file mode 100644 (file)
index 7ea03e4..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef BACKEND_H
-#define BACKEND_H
-
-#include <stddef.h>
-#include <inttypes.h>
-#include <stdbool.h>
-#include <zlib.h>
-#include "serial.h"
-#include "tftp.h"
-
-/* Backend flags */
-#define BE_NEEDLEN     0x01
-
-struct upload_backend {
-    const char *name;
-    const char *helpmsg;
-    int minargs;
-
-    size_t dbytes;
-    size_t zbytes;
-    const char **argv;
-
-    uint32_t now;
-
-    int (*write)(struct upload_backend *);
-
-    z_stream zstream;
-    char *outbuf;
-    size_t alloc;
-};
-
-/* zout.c */
-int init_data(struct upload_backend *be, const char *argv[]);
-int write_data(struct upload_backend *be, const void *buf, size_t len);
-int flush_data(struct upload_backend *be);
-
-/* cpio.c */
-#define cpio_init init_data
-int cpio_hdr(struct upload_backend *be, uint32_t mode, size_t datalen,
-            const char *filename);
-int cpio_mkdir(struct upload_backend *be, const char *filename);
-int cpio_writefile(struct upload_backend *be, const char *filename,
-                  const void *data, size_t len);
-int cpio_close(struct upload_backend *be);
-#define MODE_FILE      0100644
-#define MODE_DIR       0040755
-
-/* backends.c */
-struct upload_backend *get_upload_backend(const char *name);
-
-/* backends */
-extern struct upload_backend upload_tftp;
-extern struct upload_backend upload_ymodem;
-extern struct upload_backend upload_srec;
-
-#endif /* BACKEND_H */
index 83e23a0..7a6b527 100644 (file)
@@ -30,8 +30,7 @@
 ##
 
 topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/com32.mk
+include ../MCONFIG
 
 LIBOBJS           = ansiline.o ansiraw.o get_key.o keyname.o \
             sha1hash.o unbase64.o \
index 083bc1b..7b6da05 100644 (file)
Binary files a/com32/libutil/libutil_com.a and b/com32/libutil/libutil_com.a differ
index dd31840..1de68ee 100644 (file)
Binary files a/com32/libutil/libutil_lnx.a and b/com32/libutil/libutil_lnx.a differ
index 14b0e33..4081bfe 100644 (file)
@@ -16,9 +16,9 @@
 ##
 
 topdir = ../../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/com32.mk
+include ../../MCONFIG
 
+LIBS      = ../../lib/libcom32.a $(LIBGCC)
 LNXLIBS           = 
 
 # Temporarily allow warnings not being treated as errors
@@ -54,7 +54,7 @@ $(LIBLUA) : $(LIBLUA_OBJS)
        $(AR) cq $@ $^
        $(RANLIB) $@
 
-lua.elf : $(OBJS) $(LIBLUA) $(C_LIBS)
+lua.elf : $(OBJS) $(LIBLUA) $(LIBS) $(C_LIBS)
        $(LD) $(LDFLAGS) -o $@ $^
 
 tidy dist:
index c37606c..11efffb 100755 (executable)
Binary files a/com32/lua/src/lua.c32 and b/com32/lua/src/lua.c32 differ
index b7ee115..7e6c2e9 100644 (file)
@@ -16,9 +16,9 @@
 ##
 
 topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/com32.mk
+include ../MCONFIG
 
+LIBS      = ../libutil/libutil_com.a ../lib/libcom32.a $(LIBGCC)
 LNXLIBS           = ../libutil/libutil_lnx.a
 
 MODULES          = mboot.c32
@@ -28,7 +28,7 @@ OBJS = mboot.o map.o mem.o initvesa.o apm.o solaris.o syslinux.o
 
 all: $(MODULES) $(TESTFILES)
 
-mboot.elf : $(OBJS) $(C_LIBS)
+mboot.elf : $(OBJS) $(LIBS) $(C_LIBS)
        $(LD) $(LDFLAGS) -o $@ $^
 
 tidy dist:
index 99add30..0a71d4c 100644 (file)
@@ -91,9 +91,10 @@ int init_map(void)
        error("Failed to allocate initial memory map!\n");
        return -1;
     }
-
+#if DEBUG
     dprintf("Initial memory map:\n");
-    syslinux_dump_memmap(mmap);
+    syslinux_dump_memmap(stdout, mmap);
+#endif
 
     return 0;
 }
index d60152e..5a0343a 100755 (executable)
Binary files a/com32/mboot/mboot.c32 and b/com32/mboot/mboot.c32 differ
index b67b997..2a03272 100644 (file)
@@ -15,9 +15,9 @@
 ##
 
 topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/com32.mk
+include ../MCONFIG
 
+LIBS      = ../libutil/libutil_com.a ../lib/libcom32.a $(LIBGCC)
 LNXLIBS           = ../libutil/libutil_lnx.a
 
 MODULES          = menu.c32 vesamenu.c32
@@ -28,10 +28,10 @@ COMMONOBJS = menumain.o readconfig.o passwd.o drain.o printmsg.o colors.o \
 
 all: $(MODULES) $(TESTFILES)
 
-menu.elf : menu.o $(COMMONOBJS) $(C_LIBS)
+menu.elf : menu.o $(COMMONOBJS) $(LIBS) $(C_LIBS)
        $(LD) $(LDFLAGS) -o $@ $^
 
-vesamenu.elf : vesamenu.o $(COMMONOBJS) $(C_LIBS)
+vesamenu.elf : vesamenu.o $(COMMONOBJS) $(LIBS) $(C_LIBS)
        $(LD) $(LDFLAGS) -o $@ $^
 
 tidy dist:
index 348c6b8..488824e 100755 (executable)
Binary files a/com32/menu/menu.c32 and b/com32/menu/menu.c32 differ
index c466582..06119cd 100755 (executable)
Binary files a/com32/menu/vesamenu.c32 and b/com32/menu/vesamenu.c32 differ
index e9ce1d1..2d47913 100644 (file)
 ##
 
 topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/com32.mk
+include ../MCONFIG
 
 MODULES          = chain.c32 config.c32 ethersel.c32 dmitest.c32 cpuidtest.c32 \
            disk.c32 pcitest.c32 elf.c32 linux.c32 reboot.c32 pmload.c32 \
            meminfo.c32 sdi.c32 sanboot.c32 ifcpu64.c32 vesainfo.c32 \
            kbdmap.c32 cmd.c32 vpdtest.c32 host.c32 ls.c32 gpxecmd.c32 \
-           ifcpu.c32 cpuid.c32 cat.c32 pwd.c32 ifplop.c32 zzjson.c32 whichsys.c32
+           ifcpu.c32 cpuid.c32 cat.c32 pwd.c32 ifplop.c32 whichsys.c32
 
 TESTFILES =
 
index 63a82ad..804bf62 100755 (executable)
Binary files a/com32/modules/cat.c32 and b/com32/modules/cat.c32 differ
index 2ed0f14..48f53ff 100644 (file)
  *     loads the file <loader> **from the Syslinux filesystem**
  *     instead of loading the boot sector.
  *
- * seg=<segment>[:<offset>][{+@}entry]
- *     loads at <segment>:<offset> and jumps to <seg>:<entry> instead
- *     of the default 0000:7C00.  <offset> and <entry> default to 0 and +0
- *     repectively.  If <entry> start with + (rather than @) then the
- *     entry point address is added to the offset.
+ * seg=<segment>
+ *     loads at and jumps to <seg>:0000 instead of 0000:7C00.
  *
  * isolinux=<loader>
  *     chainload another version/build of the ISOLINUX bootloader and patch
  *
  * keeppxe
  *     keep the PXE and UNDI stacks in memory (PXELINUX only).
- *
- * freeldr=<loader>
- *  loads ReactOS' FreeLdr.sys to 0:8000 and jumps to the PE entry-point
  */
 
 #include <com32.h>
@@ -135,8 +129,6 @@ static struct options {
     const char *loadfile;
     uint16_t keeppxe;
     uint16_t seg;
-    uint16_t offs;
-    uint16_t entry;
     bool isolinux;
     bool cmldr;
     bool grub;
@@ -292,7 +284,7 @@ static void *read_sectors(uint64_t lba, uint8_t count)
        inreg.eax.b[0] = count;
        inreg.eax.b[1] = 0x02;  /* Read */
        inreg.ecx.b[1] = c;
-       inreg.ecx.b[0] = ((c & 0x300) >> 2) | (s + 1);
+       inreg.ecx.b[0] = ((c & 0x300) >> 2) | (s+1);
        inreg.edx.b[1] = h;
        inreg.edx.b[0] = disk_info.disk;
        inreg.ebx.w[0] = OFFS(buf);
@@ -350,7 +342,7 @@ static int write_sector(unsigned int lba, const void *data)
 
        inreg.eax.w[0] = 0x0301;        /* Write one sector */
        inreg.ecx.b[1] = c;
-       inreg.ecx.b[0] = ((c & 0x300) >> 2) | (s + 1);
+       inreg.ecx.b[0] = ((c & 0x300) >> 2) | (s+1);
        inreg.edx.b[1] = h;
        inreg.edx.b[0] = disk_info.disk;
        inreg.ebx.w[0] = OFFS(buf);
@@ -430,7 +422,10 @@ static void mbr_part_dump(const struct part_entry *part)
            chs_head(part->end),
            chs_sector(part->end),
            chs_sector(part->end),
-           part->start_lba, part->start_lba, part->length, part->length);
+           part->start_lba,
+           part->start_lba,
+           part->length,
+           part->length);
 }
 
 /* A DOS MBR */
@@ -569,8 +564,7 @@ static struct disk_part_iter *next_ebr_part(struct disk_part_iter *part)
     }
     /* Success */
     part->lba_data = ebr_table[0].start_lba + ebr_lba;
-    dprintf("Partition %d logical lba %"PRIu64"\n",
-           part->index, part->lba_data);
+    dprintf("Partition %d logical lba %u\n", part->index, part->lba_data);
     part->index++;
     part->record = ebr_table;
     return part;
@@ -631,8 +625,7 @@ static struct disk_part_iter *next_mbr_part(struct disk_part_iter *part)
 
     /* Update parameters to reflect this new partition.  Re-use iterator */
     part->lba_data = table[part->private.mbr_index].start_lba;
-    dprintf("Partition %d primary lba %"PRIu64"\n",
-           part->private.mbr_index, part->lba_data);
+    dprintf("Partition %d primary lba %u\n", part->private.mbr_index, part->lba_data);
     part->index = part->private.mbr_index + 1;
     part->record = table + part->private.mbr_index;
     return part;
@@ -1287,15 +1280,13 @@ Options: file=<loader>      Load and execute file, instead of boot sector\n\
          ntldr=<loader>     Load Windows NTLDR, SETUPLDR.BIN or BOOTMGR\n\
          cmldr=<loader>     Load Recovery Console of Windows NT/2K/XP/2003\n\
          freedos=<loader>   Load FreeDOS KERNEL.SYS\n\
-         freeldr=<loader>   Load ReactOS' FREELDR.SYS\n\
          msdos=<loader>     Load MS-DOS IO.SYS\n\
          pcdos=<loader>     Load PC-DOS IBMBIO.COM\n\
          drmk=<loader>      Load DRMK DELLBIO.BIN\n\
          grub=<loader>      Load GRUB Legacy stage2\n\
          grubcfg=<filename> Set alternative config filename for GRUB Legacy\n\
          grldr=<loader>     Load GRUB4DOS grldr\n\
-         seg=<seg>          Jump to <seg>:0000, instead of 0000:7C00\n\
-         seg=<seg>[:<offs>][{+@}<entry>] also specified offset and entrypoint\n\
+         seg=<segment>      Jump to <seg>:0000, instead of 0000:7C00\n\
          swap               Swap drive numbers, if bootdisk is not fd0/hd0\n\
          hide               Hide primary partitions, except selected partition\n\
          sethidden          Set the FAT/NTFS hidden sectors field\n\
@@ -1331,88 +1322,44 @@ int main(int argc, char *argv[])
     /* Prepare the register set */
     memset(&regs, 0, sizeof regs);
 
-    opt.seg   = 0;
-    opt.offs  = 0x7c00;
-    opt.entry = 0x7c00;
-
     for (i = 1; i < argc; i++) {
        if (!strncmp(argv[i], "file=", 5)) {
            opt.loadfile = argv[i] + 5;
        } else if (!strncmp(argv[i], "seg=", 4)) {
-           uint32_t v;
-           bool add_entry = true;
-           char *ep, *p = argv[i] + 4;
-           
-           v = strtoul(p, &ep, 0);
-           if (ep == p || v < 0x50 || v > 0x9f000) {
-               error("seg: Invalid segment\n");
+           uint32_t segval = strtoul(argv[i] + 4, NULL, 0);
+           if (segval < 0x50 || segval > 0x9f000) {
+               error("Invalid segment\n");
                goto bail;
            }
-           opt.seg = v;
-           opt.offs = opt.entry = 0;
-           if (*ep == ':') {
-               p = ep+1;
-               v = strtoul(p, &ep, 0);
-               if (ep == p) {
-                   error("seg: Invalid offset\n");
-                   goto bail;
-               }
-               opt.offs = v;
-           }
-           if (*ep == '@' || *ep == '+') {
-               add_entry = (*ep == '+');
-               p = ep+1;
-               v = strtoul(p, &ep, 0);
-               if (ep == p) {
-                   error("seg: Invalid entry point\n");
-                   goto bail;
-               }
-               opt.entry = v;
-           }
-           if (add_entry)
-               opt.entry += opt.offs;
+           opt.seg = segval;
        } else if (!strncmp(argv[i], "isolinux=", 9)) {
            opt.loadfile = argv[i] + 9;
            opt.isolinux = true;
        } else if (!strncmp(argv[i], "ntldr=", 6)) {
            opt.seg = 0x2000;   /* NTLDR wants this address */
-           opt.offs = opt.entry = 0;
            opt.loadfile = argv[i] + 6;
            opt.sethidden = true;
        } else if (!strncmp(argv[i], "cmldr=", 6)) {
            opt.seg = 0x2000;   /* CMLDR wants this address */
-           opt.offs = opt.entry = 0;
            opt.loadfile = argv[i] + 6;
            opt.cmldr = true;
            opt.sethidden = true;
        } else if (!strncmp(argv[i], "freedos=", 8)) {
            opt.seg = 0x60;     /* FREEDOS wants this address */
-           opt.offs = opt.entry = 0;
-           opt.loadfile = argv[i] + 8;
-           opt.sethidden = true;
-       } else if (!strncmp(argv[i], "freeldr=", 8)) {
            opt.loadfile = argv[i] + 8;
            opt.sethidden = true;
-           /* The FreeLdr PE wants to be at 0:8000 */
-           opt.seg = 0;
-           opt.offs = 0x8000;
-           /* TODO: Properly parse the PE.  Right now, this is hard-coded */
-           opt.entry = 0x8100;
        } else if (!strncmp(argv[i], "msdos=", 6) ||
                   !strncmp(argv[i], "pcdos=", 6)) {
            opt.seg = 0x70;     /* MS-DOS 2.0+ wants this address */
-           opt.offs = opt.entry = 0;
            opt.loadfile = argv[i] + 6;
            opt.sethidden = true;
        } else if (!strncmp(argv[i], "drmk=", 5)) {
            opt.seg = 0x70;     /* DRMK wants this address */
-           opt.offs = opt.entry = 0;
            opt.loadfile = argv[i] + 5;
            opt.sethidden = true;
            opt.drmk = true;
        } else if (!strncmp(argv[i], "grub=", 5)) {
            opt.seg = 0x800;    /* stage2 wants this address */
-           opt.offs = opt.entry = 0;
            opt.loadfile = argv[i] + 5;
            opt.grub = true;
        } else if (!strncmp(argv[i], "grubcfg=", 8)) {
@@ -1467,20 +1414,11 @@ int main(int argc, char *argv[])
        goto bail;
     }
 
-    /*
-     * Set up initial register values
-     */
-    regs.es = regs.cs = regs.ss = regs.ds = regs.fs = regs.gs = opt.seg;
-    regs.ip = opt.entry;
-
-    /* 
-     * For the special case of the standard 0:7C00 entry point, put
-     * the stack below; otherwise leave the stack pointer at the end
-     * of the segment (sp = 0).
-     */
-    if (opt.seg == 0 && opt.offs == 0x7c00)
-       regs.esp.l = 0x7c00;
-
+    if (opt.seg) {
+       regs.es = regs.cs = regs.ss = regs.ds = regs.fs = regs.gs = opt.seg;
+    } else {
+       regs.ip = regs.esp.l = 0x7c00;
+    }
 
     hd = 0;
     if (!strncmp(drivename, "mbr", 3)) {
@@ -1489,7 +1427,8 @@ int main(int argc, char *argv[])
            error("Unable to find requested MBR signature\n");
            goto bail;
        }
-    } else if (!strncmp(drivename, "guid", 4) || !strncmp(drivename, "uuid", 4)) {
+    } else if (!strncmp(drivename, "guid", 4) ||
+              !strncmp(drivename, "uuid", 4)) {
        if (str_to_guid(drivename + 5, &gpt_guid))
            goto bail;
        drive = find_by_guid(&gpt_guid, &cur_part);
@@ -1591,7 +1530,7 @@ int main(int argc, char *argv[])
     }
 
     /* Do the actual chainloading */
-    load_base = (opt.seg << 4) + opt.offs;
+    load_base = opt.seg ? (opt.seg << 4) : 0x7c00;
 
     if (opt.loadfile) {
        fputs("Loading the boot file...\n", stdout);
@@ -1700,7 +1639,7 @@ int main(int argc, char *argv[])
                char config_file[89];
                /* 0x270: start of code (after jump from 0x200) */
                char codestart[1];
-           } __attribute__ ((packed)) * stage2;
+           } __attribute__ ((packed)) *stage2;
 
            if (data[ndata].size < sizeof(struct grub_stage2_patch_area)) {
                error
@@ -1784,11 +1723,10 @@ int main(int argc, char *argv[])
             * fs_lba should be verified against the disk as some DRMK
             * variants will check and fail if it does not match
             */
-           dprintf("  fs_lba offset is %"PRIu64"\n", fs_lba);
+           dprintf("  fs_lba offset is %d\n", fs_lba);
            /* DRMK only uses a DWORD */
            if (fs_lba > 0xffffffff) {
-               error
-                   ("LBA very large; Only using lower 32 bits; DRMK will probably fail\n");
+               error("LBA very large; Only using lower 32 bits; DRMK will probably fail\n");
            }
            regs.ss = regs.fs = regs.gs = 0;    /* Used before initialized */
            if (!realloc(data[ndata].data, tsize)) {
index 5787c80..2c97cea 100755 (executable)
Binary files a/com32/modules/chain.c32 and b/com32/modules/chain.c32 differ
index 31dac00..1191710 100755 (executable)
Binary files a/com32/modules/config.c32 and b/com32/modules/config.c32 differ
index 9b3810d..97b291e 100755 (executable)
Binary files a/com32/modules/cpuid.c32 and b/com32/modules/cpuid.c32 differ
index 3e8c83e..c4cff67 100755 (executable)
Binary files a/com32/modules/cpuidtest.c32 and b/com32/modules/cpuidtest.c32 differ
index 3f05cdd..da3aa79 100755 (executable)
Binary files a/com32/modules/disk.c32 and b/com32/modules/disk.c32 differ
index 33ae695..c2343e3 100755 (executable)
Binary files a/com32/modules/dmitest.c32 and b/com32/modules/dmitest.c32 differ
index 0ac4517..182afa6 100644 (file)
@@ -120,8 +120,10 @@ int boot_elf(void *ptr, size_t len, char **argv)
     if (!mmap || !amap)
        goto bail;
 
+#if DEBUG
     dprintf("Initial memory map:\n");
-    syslinux_dump_memmap(mmap);
+    syslinux_dump_memmap(stdout, mmap);
+#endif
 
     ph = (Elf32_Phdr *) (cptr + eh->e_phoff);
 
@@ -183,8 +185,10 @@ int boot_elf(void *ptr, size_t len, char **argv)
     if (!stack_frame)
        goto bail;
 
+#if DEBUG
     dprintf("Right before syslinux_memmap_largest()...\n");
-    syslinux_dump_memmap(amap);
+    syslinux_dump_memmap(stdout, amap);
+#endif
 
     if (syslinux_memmap_largest(amap, SMT_FREE, &lstart, &llen))
        goto bail;              /* NO free memory?! */
@@ -235,14 +239,16 @@ int boot_elf(void *ptr, size_t len, char **argv)
     regs.eip = eh->e_entry;
     regs.esp = stack_pointer;
 
+#if DEBUG
     dprintf("Final memory map:\n");
-    syslinux_dump_memmap(mmap);
+    syslinux_dump_memmap(stdout, mmap);
 
     dprintf("Final available map:\n");
-    syslinux_dump_memmap(amap);
+    syslinux_dump_memmap(stdout, amap);
 
     dprintf("Movelist:\n");
-    syslinux_dump_movelist(ml);
+    syslinux_dump_movelist(stdout, ml);
+#endif
 
     /* This should not return... */
     fputs("Booting...\n", stdout);
index b8ec063..a3c64f8 100755 (executable)
Binary files a/com32/modules/elf.c32 and b/com32/modules/elf.c32 differ
index 28dc62c..5c3cf02 100644 (file)
 #include <com32.h>
 #include <syslinux/boot.h>
 #include <syslinux/config.h>
-#include <dprintf.h>
+
+#ifdef DEBUG
+# define dprintf printf
+#else
+# define dprintf(...) ((void)0)
+#endif
 
 #define MAX_LINE 512
 
index 86e5862..3455818 100755 (executable)
Binary files a/com32/modules/ethersel.c32 and b/com32/modules/ethersel.c32 differ
index a8731b8..23fdb83 100755 (executable)
Binary files a/com32/modules/host.c32 and b/com32/modules/host.c32 differ
index 0dbaef4..adca812 100755 (executable)
Binary files a/com32/modules/ifcpu.c32 and b/com32/modules/ifcpu.c32 differ
diff --git a/com32/modules/ifmemdsk.c b/com32/modules/ifmemdsk.c
deleted file mode 100644 (file)
index cfed87f..0000000
+++ /dev/null
@@ -1,392 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2011 Shao Miller - All Rights Reserved
- *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- *   Boston MA 02110-1301, USA; either version 2 of the License, or
- *   (at your option) any later version; incorporated herein by reference.
- *
- * ----------------------------------------------------------------------- */
-
-/****
- * @file ifmemdsk.c
- *
- * This COM32 module detects if there are MEMDISKs established.
- */
-
-static const char usage_text[] = "\
-Usage:\n\
-  ifmemdsk.c32 [<option> [...]] --info [<option> [...]]\n\
-  ifmemdsk.c32 [<option> [...]] [<detected_cmd>] -- [<not_detected_cmd>]\n\
-\n\
-Options:\n\
-  --info  . . . . . Displays info about MEMDISK(s)\n\
-  --safe-hooks . .  Will scan INT 13h \"safe hook\" chain\n\
-  --mbfts . . . . . Will scan memory for MEMDISK mBFTs\n\
-  --no-sequential   Suppresses probing all drive numbers\n\
-\n\
-If a MEMDISK is found, or if a particular MEMDISK is sought by the options\n\
-and is found, then the 'detected_cmd' action will be taken, else the\n\
-'not_detected_cmd' action will be taken.\n\
-\n";
-
-#include <stdio.h>
-#include <string.h>
-#include <alloca.h>
-#include <com32.h>
-#include <console.h>
-#include <syslinux/boot.h>
-
-/* Pull in MEMDISK common structures */
-#include "../../memdisk/mstructs.h"
-
-/*** Macros */
-#define M_GET_DRIVE_PARAMS (0x08)
-#define M_SEGOFFTOPTR(seg, off) (((seg) << 4) + (off))
-#define M_INT13H M_SEGOFFTOPTR(0x0000, 0x0013 * 4)
-#define M_FREEBASEMEM M_SEGOFFTOPTR(0x0040, 0x0013)
-#define M_TOP M_SEGOFFTOPTR(0x9FFF, 0x0000)
-
-/*** Object types */
-typedef struct mdi s_mdi;
-typedef real_addr_t u_segoff;
-typedef struct safe_hook s_safe_hook;
-typedef struct mBFT s_mbft;
-
-/*** Function types */
-typedef int f_find(void);
-
-/*** Function declarations */
-static const s_mdi * installation_check(int);
-static f_find scan_drives;
-static f_find walk_safe_hooks;
-static const s_safe_hook * is_safe_hook(const void *);
-static const s_mdi * is_memdisk_hook(const s_safe_hook *);
-static f_find scan_mbfts;
-static const s_mbft * is_mbft(const void *);
-static f_find do_nothing;
-static void memdisk_info(const s_mdi *);
-static void boot_args(char **);
-static const char * bootloadername(uint8_t);
-
-/*** Structure/union definitions */
-
-/*** Objects */
-static int show_info = 0;
-
-/*** Function definitions */
-
-int main(int argc, char ** argv) {
-    static f_find * do_scan_drives = scan_drives;
-    static f_find * do_walk_safe_hooks = do_nothing;
-    static f_find * do_scan_mbfts = do_nothing;
-    char ** detected_cmd;
-    char ** not_detected_cmd;
-    char ** cmd;
-    char ** cur_arg;
-    int show_usage;
-    int found;
-
-    (void) argc;
-
-    openconsole(&dev_null_r, &dev_stdcon_w);
-
-    detected_cmd = NULL;
-    not_detected_cmd = NULL;
-    show_usage = 1;
-    for (cur_arg = argv + 1; *cur_arg; ++cur_arg) {
-        /* Check for command divider */
-        if (!strcmp(*cur_arg, "--")) {
-            show_usage = 0;
-            *cur_arg = NULL;
-            not_detected_cmd = cur_arg + 1;
-            break;
-          }
-
-        /* Check for '--info' */
-        if (!strcmp(*cur_arg, "--info")) {
-            show_usage = 0;
-            show_info = 1;
-            continue;
-          }
-
-        /* Other options */
-        if (!strcmp(*cur_arg, "--no-sequential")) {
-            do_scan_drives = do_nothing;
-            continue;
-          }
-
-        if (!strcmp(*cur_arg, "--safe-hooks")) {
-            do_walk_safe_hooks = walk_safe_hooks;
-            continue;
-          }
-
-        if (!strcmp(*cur_arg, "--mbfts")) {
-            do_scan_mbfts = scan_mbfts;
-            continue;
-          }
-
-        /* Check for invalid option */
-        if (!memcmp(*cur_arg, "--", sizeof "--" - 1)) {
-            puts("Invalid option!");
-            show_usage = 1;
-            break;
-          }
-
-        /* Set 'detected_cmd' if it's null */
-        if (!detected_cmd)
-          detected_cmd = cur_arg;
-
-        continue;
-      }
-
-    if (show_usage) {
-        fprintf(stderr, usage_text);
-        return 1;
-      }
-
-    found = 0;
-    found += do_walk_safe_hooks();
-    found += do_scan_mbfts();
-    found += do_scan_drives();
-
-    cmd = found ? detected_cmd : not_detected_cmd;
-    if (cmd && *cmd)
-      boot_args(cmd);
-
-    return 0;
-  }
-
-static const s_mdi * installation_check(int drive) {
-    com32sys_t params, results;
-    int found;
-
-    /* Set parameters for INT 0x13 call */
-    memset(&params, 0, sizeof params);
-    params.eax.w[0] = M_GET_DRIVE_PARAMS << 8;
-    params.edx.w[0] = drive;
-    /* 'ME' 'MD' 'IS' 'K?' */
-    params.eax.w[1] = 0x454D;
-    params.ecx.w[1] = 0x444D;
-    params.edx.w[1] = 0x5349;
-    params.ebx.w[1] = 0x3F4B;
-
-    /* Perform the call */
-    __intcall(0x13, &params, &results);
-
-    /* Check result */
-    found = (
-        /* '!M' 'EM' 'DI' 'SK' */
-        results.eax.w[1] == 0x4D21 &&
-        results.ecx.w[1] == 0x4D45 &&
-        results.edx.w[1] == 0x4944 &&
-        results.ebx.w[1] == 0x4B53
-      );
-
-    if (found)
-      return MK_PTR(results.es, results.edi.w[0]);
-
-    return NULL;
-  }
-
-static int scan_drives(void) {
-    int found, drive;
-    const s_mdi * mdi;
-
-    for (found = drive = 0; drive <= 0xFF; ++drive) {
-        mdi = installation_check(drive);
-        if (!mdi)
-          continue;
-
-        memdisk_info(mdi);
-        ++found;
-        continue;
-      }
-
-    return found;
-  }
-
-static int walk_safe_hooks(void) {
-    static const u_segoff * const int13 = (void *) M_INT13H;
-    const void * addr;
-    int found;
-    const s_safe_hook * hook;
-    const s_mdi * mdi;
-
-    /* INT 0x13 vector */
-    addr = MK_PTR(int13->seg_off.segment, int13->seg_off.offset);
-    found = 0;
-    while (addr) {
-        hook = is_safe_hook(addr);
-        if (!hook)
-          break;
-
-        mdi = is_memdisk_hook(hook);
-        if (mdi) {
-            memdisk_info(mdi);
-            ++found;
-          }
-
-        addr = MK_PTR(
-            hook->old_hook.seg_off.segment,
-            hook->old_hook.seg_off.offset
-          );
-        continue;
-      }
-    return found;
-  }
-
-static const s_safe_hook * is_safe_hook(const void * addr) {
-    static const char magic[] = "$INT13SF";
-    const s_safe_hook * const test = addr;
-
-    if (memcmp(test->signature, magic, sizeof magic - 1))
-      return NULL;
-
-    return test;
-  }
-
-static const s_mdi * is_memdisk_hook(const s_safe_hook * hook) {
-    static const char magic[] = "MEMDISK";
-    const s_mbft * mbft;
-
-    if (memcmp(hook->vendor, magic, sizeof magic - 1))
-      return NULL;
-
-    /* An mBFT is always aligned */
-    mbft = MK_PTR(hook->mbft >> 4, 0);
-    return &mbft->mdi;
-  }
-
-static int scan_mbfts(void) {
-    static const uint16_t * const free_base_mem = (void *) M_FREEBASEMEM;
-    static const void * const top = (void *) M_TOP;
-    const void * addr;
-    const s_mbft * mbft;
-    int found;
-
-    found = 0;
-    for (addr = MK_PTR(*free_base_mem << 4, 0); addr < top; addr += 1 << 4) {
-        if (!(mbft = is_mbft(addr)))
-          continue;
-
-        memdisk_info(&mbft->mdi);
-        ++found;
-        continue;
-      }
-
-    return found;
-  }
-
-static const s_mbft * is_mbft(const void * addr) {
-    static const char magic[] = "mBFT";
-    const s_mbft * const test = addr;
-    const uint8_t * ptr, * end;
-    uint8_t chksum;
-
-    if (memcmp(test->acpi.signature, magic, sizeof magic - 1))
-      return NULL;
-
-    if (test->acpi.length != sizeof *test)
-      return NULL;
-
-    end = (void *) (test + 1);
-    chksum = 0;
-    for (ptr = addr; ptr < end; ++ptr)
-      chksum += *ptr;
-    if (chksum)
-      return NULL;
-
-    /* Looks like it's an mBFT! */
-    return test;
-  }
-
-static int do_nothing(void) {
-    return 0;
-  }
-
-static void memdisk_info(const s_mdi * mdi) {
-    const char * cmdline;
-
-    if (!show_info)
-      return;
-
-    cmdline = MK_PTR(
-        mdi->cmdline.seg_off.segment,
-        mdi->cmdline.seg_off.offset
-      );
-    printf(
-        "Found MEMDISK version %u.%02u:\n"
-        "  diskbuf == 0x%08X, disksize == %u sectors\n"
-        "  bootloaderid == 0x%02X (%s),\n"
-        "  cmdline: %s\n",
-        mdi->version_major,
-        mdi->version_minor,
-        mdi->diskbuf,
-        mdi->disksize,
-        mdi->bootloaderid,
-        bootloadername(mdi->bootloaderid),
-        cmdline
-      );
-    return;
-  }
-
-/* This function copyright H. Peter Anvin */
-static void boot_args(char **args)
-{
-    int len = 0, a = 0;
-    char **pp;
-    const char *p;
-    char c, *q, *str;
-
-    for (pp = args; *pp; pp++)
-       len += strlen(*pp) + 1;
-
-    q = str = alloca(len);
-    for (pp = args; *pp; pp++) {
-       p = *pp;
-       while ((c = *p++))
-           *q++ = c;
-       *q++ = ' ';
-       a = 1;
-    }
-    q -= a;
-    *q = '\0';
-
-    if (!str[0])
-       syslinux_run_default();
-    else
-       syslinux_run_command(str);
-}
-
-/* This function copyright H. Peter Anvin */
-static const char *bootloadername(uint8_t id)
-{
-    static const struct {
-       uint8_t id, mask;
-       const char *name;
-    } *lp, list[] = {
-       {0x00, 0xf0, "LILO"}, 
-       {0x10, 0xf0, "LOADLIN"},
-       {0x31, 0xff, "SYSLINUX"},
-       {0x32, 0xff, "PXELINUX"},
-       {0x33, 0xff, "ISOLINUX"},
-       {0x34, 0xff, "EXTLINUX"},
-       {0x30, 0xf0, "Syslinux family"},
-       {0x40, 0xf0, "Etherboot"},
-       {0x50, 0xf0, "ELILO"},
-       {0x70, 0xf0, "GrUB"},
-       {0x80, 0xf0, "U-Boot"},
-       {0xA0, 0xf0, "Gujin"},
-       {0xB0, 0xf0, "Qemu"},
-       {0x00, 0x00, "unknown"}
-    };
-
-    for (lp = list;; lp++) {
-       if (((id ^ lp->id) & lp->mask) == 0)
-           return lp->name;
-    }
-}
-
index a620b61..6af3d22 100755 (executable)
Binary files a/com32/modules/linux.c32 and b/com32/modules/linux.c32 differ
index b112057..d91b976 100755 (executable)
Binary files a/com32/modules/ls.c32 and b/com32/modules/ls.c32 differ
index 761613a..b57b731 100755 (executable)
Binary files a/com32/modules/meminfo.c32 and b/com32/modules/meminfo.c32 differ
index 9921ee6..672023a 100644 (file)
 #include <com32.h>
 #include <sys/pci.h>
 #include <stdbool.h>
-#include <dprintf.h>
+
+#ifdef DEBUG
+# define dprintf printf
+#else
+# define dprintf(...) ((void)0)
+#endif
 
 char display_line = 0;
 #define moreprintf(...)                                \
index 277032c..447b539 100755 (executable)
Binary files a/com32/modules/pcitest.c32 and b/com32/modules/pcitest.c32 differ
index 4c01db0..3064a94 100644 (file)
@@ -81,8 +81,10 @@ int boot_raw(void *ptr, size_t len, addr_t where, char **argv)
     if (!mmap || !amap)
        goto bail;
 
+#if DEBUG
     dprintf("Initial memory map:\n");
-    syslinux_dump_memmap(mmap);
+    syslinux_dump_memmap(stdout, mmap);
+#endif
 
     dprintf("Segment at 0x%08x len 0x%08x\n", where, len);
 
@@ -117,8 +119,10 @@ int boot_raw(void *ptr, size_t len, addr_t where, char **argv)
     if (!stack_frame)
        goto bail;
 
+#if DEBUG
     dprintf("Right before syslinux_memmap_largest()...\n");
-    syslinux_dump_memmap(amap);
+    syslinux_dump_memmap(stdout, amap);
+#endif
 
     if (syslinux_memmap_largest(amap, SMT_FREE, &lstart, &llen))
        goto bail;              /* NO free memory?! */
@@ -169,14 +173,16 @@ int boot_raw(void *ptr, size_t len, addr_t where, char **argv)
     regs.eip = where;
     regs.esp = stack_pointer;
 
+#if DEBUG
     dprintf("Final memory map:\n");
-    syslinux_dump_memmap(mmap);
+    syslinux_dump_memmap(stdout, mmap);
 
     dprintf("Final available map:\n");
-    syslinux_dump_memmap(amap);
+    syslinux_dump_memmap(stdout, amap);
 
     dprintf("Movelist:\n");
-    syslinux_dump_movelist(ml);
+    syslinux_dump_movelist(stdout, ml);
+#endif
 
     /* This should not return... */
     fputs("Booting...\n", stdout);
index 25641ce..c7c2808 100755 (executable)
Binary files a/com32/modules/pmload.c32 and b/com32/modules/pmload.c32 differ
index 92b4a60..7ba57b1 100755 (executable)
Binary files a/com32/modules/sdi.c32 and b/com32/modules/sdi.c32 differ
index d15d8cd..ddcb884 100755 (executable)
Binary files a/com32/modules/vesainfo.c32 and b/com32/modules/vesainfo.c32 differ
index d5fe3f8..e3f4260 100755 (executable)
Binary files a/com32/modules/vpdtest.c32 and b/com32/modules/vpdtest.c32 differ
diff --git a/com32/modules/zzjson.c b/com32/modules/zzjson.c
deleted file mode 100644 (file)
index e2516fa..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Display directory contents
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <console.h>
-#include <string.h>
-#include <com32.h>
-#include <zzjson/zzjson.h>
-#include <stdarg.h>
-
-static void myerror(void *ehandle, const char *format, ...) {
-    va_list ap;
-    fprintf(ehandle, "error: ");
-    va_start(ap, format);
-    vfprintf(ehandle, format, ap);
-    va_end(ap);
-    fputc('\n', ehandle);
-}
-
-
-int main(int argc, char *argv[])
-{
-    openconsole(&dev_rawcon_r, &dev_stdcon_w);
-    (void) argc;
-    (void) argv;
-    ZZJSON  *tmp;
-    ZZJSON_CONFIG config = { ZZJSON_VERY_STRICT, NULL,
-                             (int(*)(void*)) fgetc,
-                             NULL,
-                             malloc, calloc, free, realloc,
-                             stderr, myerror, stdout,
-                             (int(*)(void*,const char*,...)) fprintf,
-                             (int(*)(int,void*)) fputc };
-    
-    do {
-        ZZJSON *tmp2;
-
-        tmp = zzjson_create_array(&config,
-                zzjson_create_number_d(&config, 3.14),
-                zzjson_create_number_i(&config, 1234LL),
-                zzjson_create_number_i(&config, -4321LL),
-                zzjson_create_true(&config),
-                zzjson_create_false(&config),
-                zzjson_create_null(&config),
-                zzjson_create_string(&config, "hello, world"),
-                zzjson_create_object(&config,
-                    "picard", zzjson_create_string(&config, "jean-luc"),
-                    "riker",  zzjson_create_string(&config, "william t."),
-                    NULL),
-                zzjson_create_object(&config, NULL),
-                zzjson_create_array(&config, NULL),
-                NULL );
-
-        if (!tmp) {
-            fprintf(stderr, "error during creation of json tree\n");
-            break;
-        }
-
-        tmp2 = zzjson_array_prepend(&config, tmp,
-                    zzjson_create_string(&config, "prepended string"));
-
-        if (!tmp2) {
-            fprintf(stderr, "error during prepend\n");
-            break;
-        }
-        tmp = tmp2;
-
-        tmp2 = zzjson_array_append(&config, tmp,
-                    zzjson_create_string(&config, "appended string (slow)"));
-
-        if (!tmp2) {
-            fprintf(stderr, "error during append\n");
-            break;
-        }
-        tmp = tmp2;
-
-        zzjson_print(&config, tmp);
-    } while(0);
-    if (tmp) zzjson_free(&config, tmp);
-
-    {
-        tmp = zzjson_create_array(&config, NULL); /* empty array */
-        tmp = zzjson_array_prepend(&config, tmp, zzjson_create_true(&config));
-        zzjson_print(&config, tmp);
-        zzjson_free(&config, tmp);
-    }
-
-    {
-        tmp = zzjson_create_object(&config, NULL); /* empty object */
-        tmp = zzjson_object_prepend(&config, tmp, "hello",
-                                zzjson_create_string(&config, "world"));
-        tmp = zzjson_object_append(&config, tmp, "goodbye",
-                                zzjson_create_string(&config, "cruel world"));
-        zzjson_print(&config, tmp);
-        zzjson_free(&config, tmp);
-    }
-
-    return 0;
-}
-  
similarity index 97%
rename from mk/rosh.mk
rename to com32/rosh/MCONFIG
index 7fdba0f..25c4139 100644 (file)
@@ -15,7 +15,7 @@
 ##
 
 ## Include the COM32 common configurables
-include $(MAKEDIR)/com32.mk
+include ../MCONFIG
 
 # CFLAGS     = $(GCCOPT) $(GCCWARN) -march=i386 \
 #           -fomit-frame-pointer -D__COM32__ \
index 766f68d..f4b7d86 100644 (file)
@@ -17,8 +17,7 @@
 ##
 
 topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/rosh.mk
+include MCONFIG
 
 # from com32/sysdump/Makefile
 # The DATE is set on the make command line when building binaries for
index c699b78..3701488 100755 (executable)
Binary files a/com32/rosh/rosh.c32 and b/com32/rosh/rosh.c32 differ
index 76986d5..bee2b99 100644 (file)
@@ -15,8 +15,7 @@
 ##
 
 topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/com32.mk
+include ../MCONFIG
 
 all:   hello.c32 resolv.c32 serialinfo.c32 \
        localboot.c32 \
index 7466f86..316489c 100755 (executable)
Binary files a/com32/samples/advdump.c32 and b/com32/samples/advdump.c32 differ
index 77cdcb8..08bc7a9 100755 (executable)
Binary files a/com32/samples/entrydump.c32 and b/com32/samples/entrydump.c32 differ
index 900f680..580ec39 100755 (executable)
Binary files a/com32/samples/fancyhello.c32 and b/com32/samples/fancyhello.c32 differ
index 1123f62..3c4f395 100755 (executable)
Binary files a/com32/samples/fancyhello.lnx and b/com32/samples/fancyhello.lnx differ
index 4ef96e0..5219201 100755 (executable)
Binary files a/com32/samples/hello.c32 and b/com32/samples/hello.c32 differ
index d55ef3e..5fc14f0 100755 (executable)
Binary files a/com32/samples/keytest.c32 and b/com32/samples/keytest.c32 differ
index ec504f4..bca1bba 100755 (executable)
Binary files a/com32/samples/keytest.lnx and b/com32/samples/keytest.lnx differ
index eeba5ee..c6b9649 100755 (executable)
Binary files a/com32/samples/resolv.c32 and b/com32/samples/resolv.c32 differ
index 4eebd6b..578ffd6 100755 (executable)
Binary files a/com32/samples/serialinfo.c32 and b/com32/samples/serialinfo.c32 differ
index 98e7f15..bffee3a 100644 (file)
 ##
 
 topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/com32.mk
+include ../MCONFIG
 -include $(topdir)/version.mk
 
-LIBS      = ../libupload/libcom32upload.a
+LIBS      = ../libutil/libutil_com.a ../lib/libcom32.a $(LIBGCC)
 LNXLIBS           = ../libutil/libutil_lnx.a
 
-CFLAGS += -I$(com32) -I$(topdir)
-
 MODULES          = sysdump.c32
 TESTFILES =
 
index 5022233..8671fc8 100644 (file)
@@ -18,6 +18,7 @@
 #include <string.h>
 #include <stdlib.h>
 #include "sysdump.h"
+#include "backend.h"
 #include "rbtree.h"
 
 struct acpi_rsdp {
@@ -150,7 +151,7 @@ static const struct acpi_rsdp *find_rsdp(void)
     return scan_for_rsdp(0xe0000, 0x100000);
 }
 
-static void dump_table(struct upload_backend *be,
+static void dump_table(struct backend *be,
                       const char name[], const void *ptr, uint32_t len)
 {
     char namebuf[64];
@@ -170,7 +171,7 @@ static void dump_table(struct upload_backend *be,
     write_data(be, ptr, len);
 }
 
-static void dump_rsdt(struct upload_backend *be, const struct acpi_rsdp *rsdp)
+static void dump_rsdt(struct backend *be, const struct acpi_rsdp *rsdp)
 {
     const struct acpi_rsdt *rsdt;
     uint32_t i, n;
@@ -195,7 +196,7 @@ static void dump_rsdt(struct upload_backend *be, const struct acpi_rsdp *rsdp)
     }
 }
 
-static void dump_xsdt(struct upload_backend *be, const struct acpi_rsdp *rsdp)
+static void dump_xsdt(struct backend *be, const struct acpi_rsdp *rsdp)
 {
     const struct acpi_xsdt *xsdt;
     uint32_t rsdp_len = rsdp->rev > 0 ? rsdp->len : 20;
@@ -230,7 +231,7 @@ static void dump_xsdt(struct upload_backend *be, const struct acpi_rsdp *rsdp)
     }
 }
 
-void dump_acpi(struct upload_backend *be)
+void dump_acpi(struct backend *be)
 {
     const struct acpi_rsdp *rsdp;
     uint32_t rsdp_len;
diff --git a/com32/sysdump/backend.h b/com32/sysdump/backend.h
new file mode 100644 (file)
index 0000000..f2b3bc2
--- /dev/null
@@ -0,0 +1,55 @@
+#ifndef BACKEND_H
+#define BACKEND_H
+
+#include <stddef.h>
+#include <inttypes.h>
+#include <stdbool.h>
+#include <zlib.h>
+#include "serial.h"
+
+/* Backend flags */
+#define BE_NEEDLEN     0x01
+
+struct backend {
+    const char *name;
+    const char *helpmsg;
+    int minargs;
+
+    size_t dbytes;
+    size_t zbytes;
+    const char **argv;
+
+    uint32_t now;
+
+    int (*write)(struct backend *);
+
+    z_stream zstream;
+    char *outbuf;
+    size_t alloc;
+};
+
+/* zout.c */
+int init_data(struct backend *be, const char *argv[]);
+int write_data(struct backend *be, const void *buf, size_t len);
+int flush_data(struct backend *be);
+
+/* cpio.c */
+#define cpio_init init_data
+int cpio_hdr(struct backend *be, uint32_t mode, size_t datalen,
+            const char *filename);
+int cpio_mkdir(struct backend *be, const char *filename);
+int cpio_writefile(struct backend *be, const char *filename,
+                  const void *data, size_t len);
+int cpio_close(struct backend *be);
+#define MODE_FILE      0100644
+#define MODE_DIR       0040755
+
+/* backends.c */
+struct backend *get_backend(const char *name);
+
+/* backends */
+extern struct backend be_tftp;
+extern struct backend be_ymodem;
+extern struct backend be_srec;
+
+#endif /* BACKEND_H */
similarity index 91%
rename from com32/libupload/upload_srec.c
rename to com32/sysdump/be_srec.c
index c190713..fc69c88 100644 (file)
@@ -6,7 +6,7 @@
 #include <stdio.h>
 #include <inttypes.h>
 #include <minmax.h>
-#include "upload_backend.h"
+#include "backend.h"
 
 /* Write a single S-record */
 static int write_srecord(unsigned int len,  unsigned int alen,
@@ -43,7 +43,7 @@ static int write_srecord(unsigned int len,  unsigned int alen,
     return 0;
 }
 
-static int upload_srec_write(struct upload_backend *be)
+static int be_srec_write(struct backend *be)
 {
     char name[33];
     const char *buf;
@@ -77,9 +77,9 @@ static int upload_srec_write(struct upload_backend *be)
     return 0;
 }
 
-struct upload_backend upload_srec = {
+struct backend be_srec = {
     .name       = "srec",
     .helpmsg    = "[filename]",
     .minargs    = 0,
-    .write      = upload_srec_write,
+    .write      = be_srec_write,
 };
similarity index 70%
rename from com32/libupload/upload_tftp.c
rename to com32/sysdump/be_tftp.c
index 5e73c1c..36a91eb 100644 (file)
@@ -8,7 +8,8 @@
 #include <syslinux/config.h>
 #include <netinet/in.h>
 #include <sys/times.h>
-#include "upload_backend.h"
+
+#include "backend.h"
 
 enum tftp_opcode {
     TFTP_RRQ   = 1,
@@ -18,12 +19,6 @@ enum tftp_opcode {
     TFTP_ERROR = 5,
 };
 
-struct tftp_error {
-       uint16_t opcode;
-       uint16_t errcode;
-       char errmsg[0];
-} __attribute__ (( packed ));
-
 struct tftp_state {
     uint32_t my_ip;
     uint32_t srv_ip;
@@ -33,21 +28,6 @@ struct tftp_state {
     uint16_t seq;
 };
 
-const char *tftp_string_error_message[]={
-"",
-"File not found",
-"Access Denied",
-"Disk Full",
-"Illegal Operation",
-"Unknown Transfert ID",
-"File already exists",
-"Unknown User",
-"Negociation failed",
-"Unable to resolve hostname", // not in RFC
-"Unable to connect", // not in RFC
-"No Error",
-};
-
 #define RCV_BUF        2048
 
 static int send_ack_packet(struct tftp_state *tftp,
@@ -71,7 +51,7 @@ static int send_ack_packet(struct tftp_state *tftp,
     ireg.eax.w[0] = 0x0009;
 
     for (timeout = timeouts ; *timeout ; timeout++) {
-       memset(uw, 0, sizeof *uw);
+       memset(uw, 0, sizeof uw);
        memcpy(uw+1, pkt, len);
        uw->ip = tftp->srv_ip;
        uw->gw = tftp->srv_gw;
@@ -89,7 +69,7 @@ static int send_ack_packet(struct tftp_state *tftp,
        start = times(NULL);
 
        do {
-           memset(ur, 0, sizeof *ur);
+           memset(ur, 0, sizeof ur);
            ur->src_ip = tftp->srv_ip;
            ur->dest_ip = tftp->my_ip;
            ur->s_port = tftp->srv_port;
@@ -111,14 +91,9 @@ static int send_ack_packet(struct tftp_state *tftp,
                if (ntohs(xb[0]) == TFTP_ACK &&
                    ntohs(xb[1]) == tftp->seq) {
                    tftp->srv_port = ur->s_port;
-                   err = TFTP_OK;              /* All good! */
+                   err = 0;            /* All good! */
                    goto done;
-               } else if (ntohs(xb[0]) == TFTP_ERROR) {
-                   struct tftp_error *te = (struct tftp_error *)(ur+1);
-                   if (te->errcode == TFTP_ERR_UNKNOWN_ERROR) {
-                       tftp_string_error_message[TFTP_ERR_UNKNOWN_ERROR]=strdup(te->errmsg);
-                   }
-                   err=-ntohs(te->errcode); // Return the associated error code
+               } else if (ntohs(xb[1]) == TFTP_ERROR) {
                    goto done;
                }
            }
@@ -132,13 +107,12 @@ done:
     return err;
 }
 
-static int upload_tftp_write(struct upload_backend *be)
+static int be_tftp_write(struct backend *be)
 {
     static uint16_t local_port = 0x4000;
     struct tftp_state tftp;
     char buffer[512+4+6];
     int nlen;
-    int err=TFTP_OK;
     const union syslinux_derivative_info *sdi =
        syslinux_derivative_info();
     const char *data = be->outbuf;
@@ -155,30 +129,30 @@ static int upload_tftp_write(struct upload_backend *be)
     if (be->argv[1]) {
        tftp.srv_ip   = pxe_dns(be->argv[1]);
        if (!tftp.srv_ip) {
-//         printf("\nUnable to resolve hostname: %s\n", be->argv[1]);
-           return -TFTP_ERR_UNABLE_TO_RESOLVE;
+           printf("\nUnable to resolve hostname: %s\n", be->argv[1]);
+           return -1;
        }
     } else {
        tftp.srv_ip   = sdi->pxe.ipinfo->serverip;
        if (!tftp.srv_ip) {
-//         printf("\nNo server IP address\n");
-           return -TFTP_ERR_UNABLE_TO_CONNECT;
+           printf("\nNo server IP address\n");
+           return -1;
        }
     }
 
-/*    printf("server %u.%u.%u.%u... ",
+    printf("server %u.%u.%u.%u... ",
           ((uint8_t *)&tftp.srv_ip)[0],
           ((uint8_t *)&tftp.srv_ip)[1],
           ((uint8_t *)&tftp.srv_ip)[2],
-          ((uint8_t *)&tftp.srv_ip)[3]);*/
+          ((uint8_t *)&tftp.srv_ip)[3]);
 
     buffer[0] = 0;
     buffer[1] = TFTP_WRQ;
     nlen = strlcpy(buffer+2, be->argv[0], 512);
     memcpy(buffer+3+nlen, "octet", 6);
 
-    if ((err=send_ack_packet(&tftp, buffer, 2+nlen+1+6))!=TFTP_OK)
-       return err;
+    if (send_ack_packet(&tftp, buffer, 2+nlen+1+6))
+       return -1;
 
     do {
        chunk = len >= 512 ? 512 : len;
@@ -189,16 +163,16 @@ static int upload_tftp_write(struct upload_backend *be)
        data += chunk;
        len -= chunk;
 
-       if ((err=send_ack_packet(&tftp, buffer, chunk+4))!=TFTP_OK)
-           return err;
+       if (send_ack_packet(&tftp, buffer, chunk+4))
+           return -1;
     } while (chunk == 512);
 
-    return TFTP_OK;
+    return 0;
 }
 
-struct upload_backend upload_tftp = {
+struct backend be_tftp = {
     .name       = "tftp",
     .helpmsg    = "filename [tftp_server]",
     .minargs    = 1,
-    .write      = upload_tftp_write,
+    .write      = be_tftp_write,
 };
similarity index 96%
rename from com32/libupload/upload_ymodem.c
rename to com32/sysdump/be_ymodem.c
index c42327d..316b3d4 100644 (file)
@@ -5,7 +5,7 @@
 #include <string.h>
 #include <stdio.h>
 #include <inttypes.h>
-#include "upload_backend.h"
+#include "backend.h"
 #include "serial.h"
 
 enum {
@@ -98,7 +98,7 @@ static void send_ack(struct ymodem_state *ym, const uint8_t *blk, size_t bytes)
     } while (ack_buf == NAK);
 }
 
-static int upload_ymodem_write(struct upload_backend *be)
+static int be_ymodem_write(struct backend *be)
 {
     static const uint8_t eot_buf = EOT;
     uint8_t ack_buf;
@@ -167,9 +167,9 @@ static int upload_ymodem_write(struct upload_backend *be)
     return 0;
 }
 
-struct upload_backend upload_ymodem = {
+struct backend be_ymodem = {
     .name       = "ymodem",
     .helpmsg    = "filename [port [speed]]",
     .minargs    = 1,
-    .write      = upload_ymodem_write,
+    .write      = be_ymodem_write,
 };
similarity index 75%
rename from com32/libupload/cpio.c
rename to com32/sysdump/cpio.c
index 25b464d..81d0d4b 100644 (file)
@@ -9,10 +9,10 @@
 #include <inttypes.h>
 #include <stdbool.h>
 #include <zlib.h>
-#include "upload_backend.h"
+#include "backend.h"
 #include "ctime.h"
 
-int cpio_pad(struct upload_backend *be)
+int cpio_pad(struct backend *be)
 {
     static char pad[4];                /* Up to 4 zero bytes */
     if (be->dbytes & 3)
@@ -21,7 +21,7 @@ int cpio_pad(struct upload_backend *be)
        return 0;
 }
 
-int cpio_hdr(struct upload_backend *be, uint32_t mode, size_t datalen,
+int cpio_hdr(struct backend *be, uint32_t mode, size_t datalen,
             const char *filename)
 {
     static uint32_t inode = 2;
@@ -31,7 +31,7 @@ int cpio_hdr(struct upload_backend *be, uint32_t mode, size_t datalen,
 
     cpio_pad(be);
 
-    sprintf(hdr, "%06o%08x%08x%08x%08x%08x%08x%08zx%08x%08x%08x%08x%08x%08x",
+    sprintf(hdr, "%06o%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x",
            070701,             /* c_magic */
            inode++,            /* c_ino */
            mode,               /* c_mode */
@@ -52,12 +52,12 @@ int cpio_hdr(struct upload_backend *be, uint32_t mode, size_t datalen,
     return rv;
 }
 
-int cpio_mkdir(struct upload_backend *be, const char *filename)
+int cpio_mkdir(struct backend *be, const char *filename)
 {
     return cpio_hdr(be, MODE_DIR, 0, filename);
 }
 
-int cpio_writefile(struct upload_backend *be, const char *filename,
+int cpio_writefile(struct backend *be, const char *filename,
                   const void *data, size_t len)
 {
     int rv;
@@ -69,7 +69,7 @@ int cpio_writefile(struct upload_backend *be, const char *filename,
     return rv;
 }
 
-int cpio_close(struct upload_backend *be)
+int cpio_close(struct backend *be)
 {
     return cpio_hdr(be, 0, 0, "TRAILER!!!");
 }
index e7fc576..372a70d 100644 (file)
@@ -8,6 +8,7 @@
 #include <com32.h>
 #include <sys/cpu.h>
 #include "sysdump.h"
+#include "backend.h"
 
 struct cpuid_data {
     uint32_t eax, ebx, ecx, edx;
@@ -28,7 +29,7 @@ static void get_cpuid(uint32_t eax, uint32_t ecx, struct cpuid_data *data)
 
 #define CPUID_CHUNK 128
 
-void dump_cpuid(struct upload_backend *be)
+void dump_cpuid(struct backend *be)
 {
     struct cpuid_info *buf = NULL;
     int nentry, nalloc;
diff --git a/com32/sysdump/data.h b/com32/sysdump/data.h
new file mode 100644 (file)
index 0000000..deacf72
--- /dev/null
@@ -0,0 +1,2 @@
+#ifndef DATA_H
+#define DATA_H
index ce25efa..be4cce4 100644 (file)
@@ -6,6 +6,7 @@
 #include <string.h>
 #include <stdlib.h>
 #include "sysdump.h"
+#include "backend.h"
 
 struct dmi_header {
     char signature[5];
@@ -59,7 +60,7 @@ static bool is_smbios(size_t dptr)
        is_old_dmi(dptr+16);
 }
 
-static void dump_smbios(struct upload_backend *be, size_t dptr)
+static void dump_smbios(struct backend *be, size_t dptr)
 {
     const struct smbios_header *smb = (void *)dptr;
     struct smbios_header smx = *smb;
@@ -81,7 +82,7 @@ static void dump_smbios(struct upload_backend *be, size_t dptr)
     write_data(be, (const void *)smb->dmi.tbladdr, smb->dmi.tbllen);
 }
 
-static void dump_old_dmi(struct upload_backend *be, size_t dptr)
+static void dump_old_dmi(struct backend *be, size_t dptr)
 {
     const struct dmi_header *dmi = (void *)dptr;
     struct fake {
@@ -107,7 +108,7 @@ static void dump_old_dmi(struct upload_backend *be, size_t dptr)
     write_data(be, (const void *)dmi->tbladdr, dmi->tbllen);
 }
 
-void dump_dmi(struct upload_backend *be)
+void dump_dmi(struct backend *be)
 {
     size_t dptr;
 
index f672585..d0d40a7 100644 (file)
@@ -19,7 +19,8 @@
 #include <dprintf.h>
 #include <console.h>
 #include <sys/cpu.h>
-#include <version.h>
+#include "../../version.h"
+#include "backend.h"
 #include "sysdump.h"
 
 const char program[] = "sysdump";
@@ -31,7 +32,7 @@ __noreturn die(const char *msg)
     exit(1);
 }
 
-static void dump_all(struct upload_backend *be, const char *argv[])
+static void dump_all(struct backend *be, const char *argv[])
 {
     cpio_init(be, argv);
 
@@ -49,20 +50,20 @@ static void dump_all(struct upload_backend *be, const char *argv[])
     flush_data(be);
 }
 
-static struct upload_backend *upload_backends[] =
+static struct backend *backends[] =
 {
-    &upload_tftp,
-    &upload_ymodem,
-    &upload_srec,
+    &be_tftp,
+    &be_ymodem,
+    &be_srec,
     NULL
 };
 
 __noreturn usage(void)
 {
-    struct upload_backend **bep, *be;
+    struct backend **bep, *be;
 
     printf("Usage:\n");
-    for (bep = upload_backends ; (be = *bep) ; bep++)
+    for (bep = backends ; (be = *bep) ; bep++)
        printf("    %s %s %s\n", program, be->name, be->helpmsg);
 
     exit(1);
@@ -70,7 +71,7 @@ __noreturn usage(void)
 
 int main(int argc, char *argv[])
 {
-    struct upload_backend **bep, *be;
+    struct backend **bep, *be;
 
     openconsole(&dev_null_r, &dev_stdcon_w);
     fputs(version, stdout);
@@ -78,7 +79,7 @@ int main(int argc, char *argv[])
     if (argc < 2)
        usage();
 
-    for (bep = upload_backends ; (be = *bep) ; bep++) {
+    for (bep = backends ; (be = *bep) ; bep++) {
        if (!strcmp(be->name, argv[1]))
            break;
     }
index 929873f..251107d 100644 (file)
@@ -7,6 +7,7 @@
 #include <stdlib.h>
 #include <com32.h>
 #include "sysdump.h"
+#include "backend.h"
 
 #define E820_CHUNK 128
 struct e820_info {
@@ -15,7 +16,7 @@ struct e820_info {
     uint8_t  data[24];
 };
 
-static void dump_e820(struct upload_backend *be)
+static void dump_e820(struct backend *be)
 {
     com32sys_t ireg, oreg;
     struct e820_info *curr;
@@ -62,7 +63,7 @@ static void dump_e820(struct upload_backend *be)
     lfree(curr);
 }
 
-void dump_memory_map(struct upload_backend *be)
+void dump_memory_map(struct backend *be)
 {
     com32sys_t ireg, oreg;
 
index 377f9a9..6552e7f 100644 (file)
@@ -7,6 +7,7 @@
 #include <stdlib.h>
 #include <sys/cpu.h>
 #include "sysdump.h"
+#include "backend.h"
 
 static char *lowmem;
 static size_t lowmem_len;
@@ -28,7 +29,7 @@ void snapshot_lowmem(void)
     }
 }
 
-static void dump_memory_range(struct upload_backend *be, const void *where,
+static void dump_memory_range(struct backend *be, const void *where,
                              const void *addr, size_t len)
 {
     char filename[32];
@@ -37,7 +38,7 @@ static void dump_memory_range(struct upload_backend *be, const void *where,
     cpio_writefile(be, filename, where, len);
 }
 
-void dump_memory(struct upload_backend *be)
+void dump_memory(struct backend *be)
 {
     printf("Dumping memory... ");
 
index 9c23a84..1d68727 100644 (file)
@@ -7,8 +7,9 @@
 #include <stdlib.h>
 #include <sys/pci.h>
 #include "sysdump.h"
+#include "backend.h"
 
-static void dump_pci_device(struct upload_backend *be, pciaddr_t a, uint8_t hdrtype)
+static void dump_pci_device(struct backend *be, pciaddr_t a, uint8_t hdrtype)
 {
     unsigned int bus  = pci_bus(a);
     unsigned int dev  = pci_dev(a);
@@ -30,7 +31,7 @@ static void dump_pci_device(struct upload_backend *be, pciaddr_t a, uint8_t hdrt
     cpio_writefile(be, filename, data, sizeof data);
 }
 
-void dump_pci(struct upload_backend *be)
+void dump_pci(struct backend *be)
 {
     int cfgtype;
     unsigned int nbus, ndev, nfunc, maxfunc;
index 0e2a172..2930498 100755 (executable)
Binary files a/com32/sysdump/sysdump.c32 and b/com32/sysdump/sysdump.c32 differ
index 72e4875..a5b963f 100644 (file)
@@ -1,15 +1,15 @@
 #ifndef SYSDUMP_H
 #define SYSDUMP_H
 
-#include <libupload/upload_backend.h>
+struct backend;
 
-void dump_memory_map(struct upload_backend *);
+void dump_memory_map(struct backend *);
 void snapshot_lowmem(void);
-void dump_memory(struct upload_backend *);
-void dump_dmi(struct upload_backend *);
-void dump_acpi(struct upload_backend *);
-void dump_cpuid(struct upload_backend *);
-void dump_pci(struct upload_backend *);
-void dump_vesa_tables(struct upload_backend *);
+void dump_memory(struct backend *);
+void dump_dmi(struct backend *);
+void dump_acpi(struct backend *);
+void dump_cpuid(struct backend *);
+void dump_pci(struct backend *);
+void dump_vesa_tables(struct backend *);
 
 #endif /* SYSDUMP_H */
index 42adc3d..017f9e4 100644 (file)
@@ -1,9 +1,10 @@
 #include <string.h>
 #include <stdio.h>
-#include <lib/sys/vesa/vesa.h>
+#include "../lib/sys/vesa/vesa.h"
+#include "backend.h"
 #include "sysdump.h"
 
-void dump_vesa_tables(struct upload_backend *be)
+void dump_vesa_tables(struct backend *be)
 {
     com32sys_t rm;
     struct vesa_info *vip;
similarity index 80%
rename from com32/libupload/zout.c
rename to com32/sysdump/zout.c
index 47c0d30..ece934c 100644 (file)
@@ -8,12 +8,12 @@
 #include <inttypes.h>
 #include <stdbool.h>
 #include <zlib.h>
-#include "upload_backend.h"
+#include "backend.h"
 #include "ctime.h"
 
 #define ALLOC_CHUNK    65536
 
-int init_data(struct upload_backend *be, const char *argv[])
+int init_data(struct backend *be, const char *argv[])
 {
     be->now = posix_time();
     be->argv = argv;
@@ -33,7 +33,7 @@ int init_data(struct upload_backend *be, const char *argv[])
     return 0;
 }
 
-static int do_deflate(struct upload_backend *be, int flush)
+static int do_deflate(struct backend *be, int flush)
 {
     int rv;
     char *buf;
@@ -55,7 +55,7 @@ static int do_deflate(struct upload_backend *be, int flush)
 }
 
 
-int write_data(struct upload_backend *be, const void *buf, size_t len)
+int write_data(struct backend *be, const void *buf, size_t len)
 {
     int rv = Z_OK;
 
@@ -75,10 +75,9 @@ int write_data(struct upload_backend *be, const void *buf, size_t len)
 }
 
 /* Output the data and shut down the stream */
-int flush_data(struct upload_backend *be)
+int flush_data(struct backend *be)
 {
     int rv = Z_OK;
-    int err=-1;
 
     while (rv != Z_STREAM_END) {
        rv = do_deflate(be, Z_FINISH);
@@ -86,15 +85,15 @@ int flush_data(struct upload_backend *be)
            return -1;
     }
 
-//    printf("Uploading data, %u bytes... ", be->zbytes);
+    printf("Uploading data, %u bytes... ", be->zbytes);
 
-    if ((err=be->write(be)) != 0)
-       return err;
+    if (be->write(be))
+       return -1;
 
     free(be->outbuf);
     be->outbuf = NULL;
     be->dbytes = be->zbytes = be->alloc = 0;
 
-//    printf("done.\n");
+    printf("done.\n");
     return 0;
 }
index 7badabd..e34296b 100644 (file)
@@ -10,8 +10,8 @@
 ##
 ## -----------------------------------------------------------------------
 
-MAKEDIR = ../../mk
-include $(MAKEDIR)/build.mk
+topdir = ../..
+include $(topdir)/MCONFIG.build
 
 BINS    = relocs
 
index 112fe3a..33ad7e9 100644 (file)
@@ -20,8 +20,7 @@ MAKEFLAGS += -r
 MAKE      += -r
 
 topdir = ..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/embedded.mk
+include $(topdir)/MCONFIG.embedded
 -include $(topdir)/version.mk
 
 OPTFLAGS =
@@ -110,7 +109,7 @@ ldlinux.bss: ldlinux.bin
        dd if=$< of=$@ bs=512 count=1
 
 ldlinux.sys: ldlinux.bin
-       dd if=$< of=$@ bs=512 skip=2
+       dd if=$< of=$@ bs=512 skip=1
 
 codepage.cp: ../codepage/$(CODEPAGE).cp
        cp -f $< $@
index 141986e..68672e4 100644 (file)
@@ -278,7 +278,7 @@ Sect1Ptr1   equ $-4
                cmp dword [ldlinux_magic+4],LDLINUX_MAGIC^HEXDATE
                jne kaboom
 
-               ; Go for it!
+               ; Go for it!  This also normalizes CS:IP.
                jmp ldlinux_ent
 
 ;
index 41391e7..fc80a15 100644 (file)
@@ -30,8 +30,8 @@ LDLINUX_MAGIC equ 0x3eb202fe          ; A random number to identify ourselves with
 ; This indicates the general format of the last few bytes in the boot sector
 BS_MAGIC_VER   equ 0x1b << 9
 
-MIN_SECTOR_SHIFT       equ 9
-MIN_SECTOR_SIZE                equ (1 << MIN_SECTOR_SHIFT)
+SECTOR_SHIFT   equ 9
+SECTOR_SIZE    equ (1 << SECTOR_SHIFT)
 
 ;
 ; The following structure is used for "virtual kernels"; i.e. LILO-style
index b2ef2b6..02505a6 100644 (file)
@@ -23,14 +23,6 @@ Sect1Ptr1_VAL        equ 0xfeedface
 %include "diskboot.inc"
 
 ; ===========================================================================
-;  Padding after the (minimum) 512-byte boot sector so that the rest of
-;  the file has aligned sectors, even if they are larger than 512 bytes.
-; ===========================================================================
-
-               section .init
-align_pad      zb 512
-
-; ===========================================================================
 ;  Start of LDLINUX.SYS
 ; ===========================================================================
 
@@ -118,15 +110,13 @@ ldlinux_ent:
 ; Checksum data thus far
 ;
                mov si,ldlinux_sys
-               mov cx,[bsBytesPerSec]
-               shr cx,2
+               mov cx,SECTOR_SIZE >> 2
                mov edx,-LDLINUX_MAGIC
 .checksum:
                lodsd
                add edx,eax
                loop .checksum
                mov [CheckSum],edx              ; Save intermediate result
-               movzx ebx,si                    ; Start of the next sector
 
 ;
 ; Tell the user if we're using EBIOS or CBIOS
@@ -142,7 +132,6 @@ print_bios:
                call writestr_early
 
                section .earlybss
-               alignb 2
 %define        HAVE_BIOSNAME 1
 BIOSName       resw 1
 
@@ -151,9 +140,8 @@ BIOSName    resw 1
 ; Now we read the rest of LDLINUX.SYS.
 ;
 load_rest:
-               push bx                         ; LSW of load address
-
                lea esi,[SectorPtrs]
+               mov ebx,TEXT_START+2*SECTOR_SIZE ; Where we start loading
                mov cx,[DataSectors]
                dec cx                          ; Minus this sector
 
@@ -169,7 +157,7 @@ load_rest:
                xor bx,bx
                call getlinsec
                pop ebx
-               imul bp,[bsBytesPerSec]         ; Will be < 64K
+               shl ebp,SECTOR_SHIFT
                add ebx,ebp
                add si,10
                jmp .get_chunk
@@ -182,11 +170,9 @@ load_rest:
 ; by the time we get to the end it should all cancel out.
 ;
 verify_checksum:
-               pop si                          ; LSW of load address
-               movzx eax,word [bsBytesPerSec]
-               shr ax,2
-               mov ecx,[LDLDwords]             ; Total dwords
-               sub ecx,eax                     ; ... minus one sector
+               mov si,ldlinux_sys + SECTOR_SIZE
+               mov ecx,[LDLDwords]
+               sub ecx,SECTOR_SIZE >> 2
                mov eax,[CheckSum]
 .checksum:
                add eax,[si]
@@ -274,7 +260,7 @@ getlinsec_ebios:
                add eax,edi                     ; Advance sector pointer
                adc edx,0
                sub bp,di                       ; Sectors left
-               imul di,[bsBytesPerSec]
+                shl di,SECTOR_SHIFT            ; 512-byte sectors
                 add bx,di                      ; Advance buffer pointer
                 and bp,bp
                 jnz .loop
@@ -364,7 +350,7 @@ getlinsec_cbios:
                jc .error
 .resume:
                movzx ecx,al            ; ECX <- sectors transferred
-               imul ax,[bsBytesPerSec] ; Convert sectors in AL to bytes in AX
+               shl ax,SECTOR_SHIFT     ; Convert sectors in AL to bytes in AX
                pop bx
                add bx,ax
                pop bp
@@ -432,10 +418,10 @@ safedumpregs:
 
 rl_checkpt     equ $                           ; Must be <= 8000h
 
-rl_checkpt_off equ $-ldlinux_sys
+rl_checkpt_off equ ($-$$)
 %ifndef DEPEND
- %if rl_checkpt_off > 512-10                   ; Need minimum one extent
-  %assign rl_checkpt_overflow rl_checkpt_off - (512-10)
+ %if rl_checkpt_off > 3F6h                     ; Need one extent
+  %assign rl_checkpt_overflow rl_checkpt_off - 3F6h
   %error Sector 1 overflow by rl_checkpt_overflow bytes
  %endif
 %endif
@@ -448,8 +434,8 @@ rl_checkpt_off      equ $-ldlinux_sys
 ;
                alignz 2
 MaxInitDataSize        equ 96 << 10
-MaxLMA         equ LDLINUX_SYS+MaxInitDataSize
-SectorPtrs     zb 10*(MaxInitDataSize >> MIN_SECTOR_SHIFT)
+MaxLMA         equ TEXT_START+SECTOR_SIZE+MaxInitDataSize
+SectorPtrs     zb 10*(MaxInitDataSize >> SECTOR_SHIFT)
 SectorPtrsEnd  equ $
 
 ; ----------------------------------------------------------------------------
index 71eb574..18ce132 100644 (file)
@@ -20,8 +20,8 @@
 %ifndef _HEAD_INC
 %define _HEAD_INC
 
-%if __NASM_MAJOR__ < 2 || (__NASM_MAJOR__ == 2 && __NASM_MINOR__ < 3)
- %error "NASM 2.03 or later required to compile correctly"
+%if __NASM_MAJOR__ < 2
+ %error "NASM 2.00 or later required to compile correctly"
 %endif
 
 %include "macros.inc"
index 8c6a178..e06ca96 100644 (file)
@@ -69,15 +69,9 @@ check_escapes:
                shr edx,10
                cmp ax,dx
                jae enough_ram
+               mov ax,dx
                mov si,err_noram
                mov cl,10
-               push dx
-               div cl
-               add [si+err_noram.need-err_noram+2],ah
-               cbw
-               div cl
-               add [si+err_noram.need-err_noram],ax
-               pop ax
                div cl
                add [si+err_noram.size-err_noram+2],ah
                cbw
@@ -89,15 +83,15 @@ enough_ram:
 skip_checks:
 
                section .data16
-err_noram      db 'It appears your computer has only '
+err_noram      db 'It appears your computer has less than '
 .size          db '000'
-               db 'K of low ("DOS") RAM.', CR, LF
-               db 'This version of Syslinux needs '
-.need          db '000'
-               db 'K to boot.  If you get this', CR, LF
-               db 'message in error, hold down the Ctrl key while'
-               db 'booting, and I', CR, LF
-               db 'will take your word for it.', CR, LF, 0
+               db 'K of low ("DOS")'
+               db CR, LF
+               db 'RAM.  Syslinux needs at least this amount to boot.  If you get'
+               db CR, LF
+               db 'this message in error, hold down the Ctrl key while'
+               db CR, LF
+               db 'booting, and I will take your word for it.', CR, LF, 0
 
                section .text16
 ;
index 50d5106..ef1c759 100644 (file)
Binary files a/core/isolinux-debug.bin and b/core/isolinux-debug.bin differ
index 7a871f0..ca8ee3a 100644 (file)
@@ -52,6 +52,22 @@ vk_append:   resb max_cmd_len+1      ; Command line
 vk_end:                equ $                   ; Should be <= vk_size
                endstruc
 
+;
+; File structure.  This holds the information for each currently open file.
+;
+               struc open_file_t
+file_sector    resd 1                  ; Sector pointer (0 = structure free)
+file_bytesleft resd 1                  ; Number of bytes left
+file_left      resd 1                  ; Number of sectors left
+               resd 1                  ; Unused
+               endstruc
+
+%ifndef DEPEND
+%if (open_file_t_size & (open_file_t_size-1))
+%error "open_file_t is not a power of 2"
+%endif
+%endif
+
 ; ---------------------------------------------------------------------------
 ;   BEGIN CODE
 ; ---------------------------------------------------------------------------
@@ -1179,6 +1195,138 @@ ROOT_FS_OPS:
 ;
 %include "ui.inc"
 
+;
+; Enable disk emulation.  The kind of disk we emulate is dependent on the
+; size of the file: 1200K, 1440K or 2880K floppy, otherwise harddisk.
+;
+is_disk_image:
+               TRACER CR
+               TRACER LF
+               TRACER 'D'
+               TRACER ':'
+
+               mov edx,eax                     ; File size
+               mov di,img_table
+               mov cx,img_table_count
+               mov eax,[si+file_sector]        ; Starting LBA of file
+               mov [dsp_lba],eax               ; Location of file
+               mov byte [dsp_drive], 0         ; 00h floppy, 80h hard disk
+.search_table:
+               TRACER 't'
+               mov eax,[di+4]
+               cmp edx,[di]
+               je .type_found
+               add di,8
+               loop .search_table
+
+               ; Hard disk image.  Need to examine the partition table
+               ; in order to deduce the C/H/S geometry.  Sigh.
+.hard_disk_image:
+               TRACER 'h'
+               cmp edx,512
+               jb .bad_image
+
+               mov bx,trackbuf
+               mov cx,1                        ; Load 1 sector
+               pm_call getfssec
+
+               cmp word [trackbuf+510],0aa55h  ; Boot signature
+               jne .bad_image          ; Image not bootable
+
+               mov cx,4                        ; 4 partition entries
+               mov di,trackbuf+446             ; Start of partition table
+
+               xor ax,ax                       ; Highest sector(al) head(ah)
+
+.part_scan:
+               cmp byte [di+4], 0
+               jz .part_loop
+               lea si,[di+1]
+               call .hs_check
+               add si,byte 4
+               call .hs_check
+.part_loop:
+               add di,byte 16
+               loop .part_scan
+
+               push eax                        ; H/S
+               push edx                        ; File size
+               mov bl,ah
+               xor bh,bh
+               inc bx                          ; # of heads in BX
+               xor ah,ah                       ; # of sectors in AX
+               cwde                            ; EAX[31:16] <- 0
+               mul bx
+               shl eax,9                       ; Convert to bytes
+               ; Now eax contains the number of bytes per cylinder
+               pop ebx                         ; File size
+               xor edx,edx
+               div ebx
+               and edx,edx
+               jz .no_remainder
+               inc eax                         ; Fractional cylinder...
+               ; Now (e)ax contains the number of cylinders
+.no_remainder: cmp eax,1024
+               jna .ok_cyl
+               mov ax,1024                     ; Max possible #
+.ok_cyl:       dec ax                          ; Convert to max cylinder no
+               pop ebx                         ; S(bl) H(bh)
+               shl ah,6
+               or bl,ah
+               xchg ax,bx
+               shl eax,16
+               mov ah,bl
+               mov al,4                        ; Hard disk boot
+               mov byte [dsp_drive], 80h       ; Drive 80h = hard disk
+
+.type_found:
+               TRACER 'T'
+               mov bl,[sp_media]
+               and bl,0F0h                     ; Copy controller info bits
+               or al,bl
+               mov [dsp_media],al              ; Emulation type
+               shr eax,8
+               mov [dsp_chs],eax               ; C/H/S geometry
+               mov ax,[sp_devspec]             ; Copy device spec
+               mov [dsp_devspec],ax
+               mov al,[sp_controller]          ; Copy controller index
+               mov [dsp_controller],al
+
+               TRACER 'V'
+               call vgaclearmode               ; Reset video
+
+               mov ax,4C00h                    ; Enable emulation and boot
+               mov si,dspec_packet
+               mov dl,[DriveNumber]
+               lss sp,[InitStack]
+               TRACER 'X'
+
+               call int13
+
+               ; If this returns, we have problems
+.bad_image:
+               mov si,err_disk_image
+               call writestr
+               jmp enter_command
+
+;
+; Look for the highest seen H/S geometry
+; We compute cylinders separately
+;
+.hs_check:
+               mov bl,[si]                     ; Head #
+               cmp bl,ah
+               jna .done_track
+               mov ah,bl                       ; New highest head #
+.done_track:   mov bl,[si+1]
+               and bl,3Fh                      ; Sector #
+               cmp bl,al
+               jna .done_sector
+               mov al,bl
+.done_sector:  ret
+
+
+
 ; -----------------------------------------------------------------------------
 ;  Common modules
 ; -----------------------------------------------------------------------------
@@ -1204,8 +1352,33 @@ err_disk_image   db 'Cannot load disk image (invalid file)?', CR, LF, 0
 ;
                alignz 4
 exten_table:   db '.cbt'               ; COMBOOT (specific)
+               db '.img'               ; Disk image
                db '.bin'               ; CD boot sector
                db '.com'               ; COMBOOT (same as DOS)
                db '.c32'               ; COM32
 exten_table_end:
                dd 0, 0                 ; Need 8 null bytes here
+
+;
+; Floppy image table
+;
+               alignz 4
+img_table_count        equ 3
+img_table:
+               dd 1200*1024            ; 1200K floppy
+               db 1                    ; Emulation type
+               db 80-1                 ; Max cylinder
+               db 15                   ; Max sector
+               db 2-1                  ; Max head
+
+               dd 1440*1024            ; 1440K floppy
+               db 2                    ; Emulation type
+               db 80-1                 ; Max cylinder
+               db 18                   ; Max sector
+               db 2-1                  ; Max head
+
+               dd 2880*1024            ; 2880K floppy
+               db 3                    ; Emulation type
+               db 80-1                 ; Max cylinder
+               db 36                   ; Max sector
+               db 2-1                  ; Max head
index 922c3b0..658011d 100644 (file)
Binary files a/core/isolinux.bin and b/core/isolinux.bin differ
index b7e9532..4f8804c 100644 (file)
Binary files a/core/ldlinux.bin and b/core/ldlinux.bin differ
index 884c5a8..2fde94b 100644 (file)
Binary files a/core/ldlinux.bss and b/core/ldlinux.bss differ
index cee0f82..7d78187 100644 (file)
Binary files a/core/ldlinux.sys and b/core/ldlinux.sys differ
index 528ad2c..3430ff2 100644 (file)
Binary files a/core/pxelinux.0 and b/core/pxelinux.0 differ
index 528ad2c..3430ff2 100644 (file)
Binary files a/core/pxelinux.bin and b/core/pxelinux.bin differ
index 631860f..0a4bb56 100644 (file)
@@ -681,8 +681,11 @@ is_bad_image:
 %else
 is_bss_sector  equ is_bad_image
 %endif
-
-is_disk_image  equ is_bad_image        ; No longer supported
+%if IS_ISOLINUX
+               ; ok
+%else
+is_disk_image  equ is_bad_image
+%endif
 
                section .data16
 boot_prompt    db 'boot: ', 0
index 119ccbc..6af0d2d 100644 (file)
 #
 
 topdir = ../..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/embedded.mk
+# include $(topdir)/MCONFIG.embedded
 coredir = $(topdir)/core
 
-BTARGET = geodsp1s.bin geodspms.bin \
+BTARGET = geodsp1s.bin geodspms.bin mk-lba-img \
        geodsp1s.img.xz geodspms.img.xz
+#      lba-1s.img.xz lba-ms.img.xz
+  # lba-1s.img lba-ms.img
 
 NASMOPT = -i $(coredir)/ -Ox -f bin
 NASMOPT += -w+orphan-labels
-CFLAGS = -g -O
 
 all: $(BTARGET)
 
+.PRECIOUS: %.img
+# .PRECIOUS: lba-%.img
+
 # Higher compression levels result in larger files
-%.img.xz: %.bin mk-lba-img
-       ./mk-lba-img < $< | $(XZ) -0f > $@ || ( rm -f $@ ; false )
+%.img.xz: %.img
+       xz -k0f $<
+
+%.img.gz: %.img
+       gzip -9c $< > $@
 
-%.img.gz: %.bin mk-lba-img
-       ./mk-lba-img < $< | $(GZIP) -9 > $@ || ( rm -f $@ ; false )
+%.img: %.bin lba.img
+       (cp -a lba.img $@ && dd conv=notrunc if=$< of=$@) || rm -f $@
 
 %.bin: %.asm $(coredir)/writehex.inc $(coredir)/macros.inc $(coredir)/diskboot.inc
-       $(NASM) $(NASMOPT) -o $@ -l $(@:.bin=.lst) $<
+       nasm $(NASMOPT) -o $@ -l $(@:.bin=.lst) $<
 
 mk-lba-img: mk-lba-img.c
-       $(CC) $(CFLAGS) -o $@ $<
+       gcc -o $@ $<
+
+lba.img: mk-lba-img
+       ./$< $@
 
 tidy dist:
-       rm -Rf *.lst *.img
-       rm -f mk-lba-img
+       rm -Rf *.img
 
 clean: tidy
+       rm -f *.lst *.bin *_bin.c
 
 spotless: clean
        rm -f $(BTARGET)
diff --git a/diag/geodsp/geodsp1s.lst b/diag/geodsp/geodsp1s.lst
new file mode 100644 (file)
index 0000000..2a0cc39
--- /dev/null
@@ -0,0 +1,539 @@
+     1                                  ; -----------------------------------------------------------------------
+     2                                  ;
+     3                                  ;   Copyright 2010 Gene Cumm
+     4                                  ;
+     5                                  ;   Portions from diskstart.inc:
+     6                                  ;   Copyright 1994-2009 H. Peter Anvin - All Rights Reserved
+     7                                  ;   Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin
+     8                                  ;
+     9                                  ;   This program is free software; you can redistribute it and/or modify
+    10                                  ;   it under the terms of the GNU General Public License as published by
+    11                                  ;   the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+    12                                  ;   Boston MA 02110-1301, USA; either version 2 of the License, or
+    13                                  ;   (at your option) any later version; incorporated herein by reference.
+    14                                  ;
+    15                                  ; -----------------------------------------------------------------------
+    16                                  
+    17                                  ;
+    18                                  ; geodsp1s.asm
+    19                                  ;
+    20                                  ; Display geometry translation info for diagnosing misconceptions
+    21                                  ; 1 sector variant
+    22                                  ;
+    23                                  ;      nasm -Ox -f bin -o geodsp.bin -l geodsp.lst geodsp.asm
+    24                                  ;
+    25                                  ;      nasm -Ox -f elf -o geodsp.o -l geodsp.lst geodsp.asm
+    26                                  ;      ld -m elf_i386  -T syslinux.ld -M -o geodsp.elf geodsp.o > geodsp.map
+    27                                  ;      objcopy -O binary geodsp.elf geodsp.raw
+    28                                  ;
+    29                                  ;      # OF=/dev/sdb
+    30                                  ;      # dd if=core/geodsp.bin of=$OF
+    31                                  ;      # dd skip=1 seek=1 if=../dbg/lba-img/lba-img.bin of=$OF
+    32                                  ;      # eject $OF
+    33                                  ;      # dd count=$() if=/dev/zero of=$OF
+    34                                  ;
+    35                                  ;      # OF=geo-2.255.63.i
+    36                                  ;      # (dd if=core/geodsp.bin; dd skip=1 if=../dbg/lba-img/lba-img.bin; dd count=$((2*255*63 - 256*63 - 1)) if=/dev/zero )|dd of=$OF
+    37                                  ;      # OF=geo-20.16.63.i
+    38                                  ;      # (dd if=core/geodsp.bin; dd skip=1 if=../dbg/lba-img/lba-img.bin; dd count=$((40*16*63 - 256*63 - 1)) if=/dev/zero )|dd of=$OF
+    39                                  ;
+    40                                  
+    41                                  %include "macros.inc"
+    42                              <1> ;; -----------------------------------------------------------------------
+    43                              <1> ;;
+    44                              <1> ;;   Copyright 1994-2008 H. Peter Anvin - All Rights Reserved
+    45                              <1> ;;   Copyright 2009 Intel Corporation; author: H. Peter Anvin
+    46                              <1> ;;
+    47                              <1> ;;   This program is free software; you can redistribute it and/or modify
+    48                              <1> ;;   it under the terms of the GNU General Public License as published by
+    49                              <1> ;;   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
+    50                              <1> ;;   Boston MA 02111-1307, USA; either version 2 of the License, or
+    51                              <1> ;;   (at your option) any later version; incorporated herein by reference.
+    52                              <1> ;;
+    53                              <1> ;; -----------------------------------------------------------------------
+    54                              <1> 
+    55                              <1> ;;
+    56                              <1> ;; macros.inc
+    57                              <1> ;;
+    58                              <1> ;; Convenient macros
+    59                              <1> ;;
+    60                              <1> 
+    61                              <1> %ifndef _MACROS_INC
+    62                              <1> %define _MACROS_INC
+    63                              <1> 
+    64                              <1> ;
+    65                              <1> ; Identify the module we're compiling; the "correct" should be defined
+    66                              <1> ; in the module itself to 1
+    67                              <1> ;
+    68                              <1> %ifdef IS_SYSLINUX
+    69                              <1>  %define MY_NAME 'SYSLINUX'
+    70                              <1> %else
+    71                              <1>  %define IS_SYSLINUX 0
+    72                              <1> %endif
+    73                              <1> %ifdef IS_PXELINUX
+    74                              <1>  %define MY_NAME 'PXELINUX'
+    75                              <1> %else
+    76                              <1>  %define IS_PXELINUX 0
+    77                              <1> %endif
+    78                              <1> %ifdef IS_ISOLINUX
+    79                              <1>  %define MY_NAME 'ISOLINUX'
+    80                              <1> %else
+    81                              <1>  %define IS_ISOLINUX 0
+    82                              <1> %endif
+    83                              <1> %ifdef IS_EXTLINUX
+    84                              <1>  %define MY_NAME 'EXTLINUX'
+    85                              <1> %else
+    86                              <1>  %define IS_EXTLINUX 0
+    87                              <1> %endif
+    88                              <1> 
+    89                              <1> ;
+    90                              <1> ; Macros similar to res[bwd], but which works in the code segment (after
+    91                              <1> ; section .text16) or the data segment (section .data16)
+    92                              <1> ;
+    93                              <1> %macro zb      1.nolist
+    94                              <1>        times %1 db 0
+    95                              <1> %endmacro
+    96                              <1> 
+    97                              <1> %macro zw      1.nolist
+    98                              <1>        times %1 dw 0
+    99                              <1> %endmacro
+   100                              <1> 
+   101                              <1> %macro zd      1.nolist
+   102                              <1>        times %1 dd 0
+   103                              <1> %endmacro
+   104                              <1> 
+   105                              <1> ;
+   106                              <1> ; Align with zero bytes in a progbits segment
+   107                              <1> ;
+   108                              <1> %macro alignz  1.nolist
+   109                              <1>        times (((%1) - (($-$$) % (%1))) % (%1)) db 0
+   110                              <1> %endmacro
+   111                              <1> 
+   112                              <1> ;
+   113                              <1> ; Macro to emit an unsigned decimal number as a string
+   114                              <1> ;
+   115                              <1> %macro asciidec        1.nolist
+   116                              <1>   %ifndef DEPEND       ; Not safe for "depend"
+   117                              <1>     %push asciidec
+   118                              <1>       %assign %$v %1
+   119                              <1>       %if %$v == 0
+   120                              <1>         db '0'
+   121                              <1>       %else
+   122                              <1>         %assign %$dcount 0
+   123                              <1>         %assign %$n %$v
+   124                              <1>         %assign %$d 1
+   125                              <1>         %rep 20
+   126                              <1>           %if %$n != 0
+   127                              <1>             %assign %$dcount %$dcount + 1
+   128                              <1>             %assign %$n %$n / 10
+   129                              <1>             %assign %$d %$d * 10
+   130                              <1>           %endif
+   131                              <1>         %endrep
+   132                              <1>         %rep %$dcount
+   133                              <1>          %assign %$d %$d / 10
+   134                              <1>           db ((%$v / %$d) % 10) + '0'
+   135                              <1>         %endrep
+   136                              <1>       %endif
+   137                              <1>     %pop
+   138                              <1>   %endif
+   139                              <1> %endmacro
+   140                              <1> 
+   141                              <1> ;
+   142                              <1> ; Macros for network byte order of constants
+   143                              <1> ;
+   144                              <1> %define htons(x)  ( ( ((x) & 0FFh) << 8 ) + ( ((x) & 0FF00h) >> 8 ) )
+   145                              <1> %define ntohs(x) htons(x)
+   146                              <1> %define htonl(x)  ( ( ((x) & 0FFh) << 24) + ( ((x) & 0FF00h) << 8 ) + ( ((x) & 0FF0000h) >> 8 ) + ( ((x) & 0FF000000h) >> 24) )
+   147                              <1> %define ntohl(x) htonl(x)
+   148                              <1> 
+   149                              <1> ;
+   150                              <1> ; ASCII
+   151                              <1> ;
+   152                              <1> CR             equ 13          ; Carriage Return
+   153                              <1> LF             equ 10          ; Line Feed
+   154                              <1> FF             equ 12          ; Form Feed
+   155                              <1> BS             equ  8          ; Backspace
+   156                              <1> 
+   157                              <1> %endif ; _MACROS_INC
+   158                                  ; %include "layout.inc"
+   159                                  
+   160                                  ;              global STACK_LEN, STACK_TOP, STACK_BASE
+   161                                  ; STACK_LEN    equ 4096
+   162                                  STACK_TOP      equ 7c00h
+   163                                  ; STACK_BASE   equ STACK_TOP - STACK_LEN
+   164                                  
+   165                                  StackBuf       equ STACK_TOP-44-92     ; Start the stack here (grow down - 4K)
+   166                                  DriveNumber    equ StackBuf-4          ; Drive number
+   167                                  m_CHS0         equ 00534843h           ;'CHS',0
+   168                                  m_EDD0         equ 00444445h           ;'EDD',0
+   169                                  m_EDD_SP       equ 20444445h           ;'EDD '
+   170                                  retry_count    equ 16
+   171                                  dbuf           equ 8000h
+   172                                  int13_ret      equ 7e00h
+   173                                  
+   174                                  
+   175                                  
+   176                                  ;              extern  real_mode_seg
+   177                                  ;              section .real_mode      write nobits align=65536
+   178                                  ;              global  core_real_mode
+   179                                  ; core_real_mode       resb 65536
+   180                                  ;              extern  xfer_buf_seg
+   181                                  ;              section .xfer_buf       write nobits align=65536
+   182                                  ;              global  core_xfer_buf
+   183                                  ; core_xfer_buf        resb 65536
+   184                                  
+   185                                                 section .text
+   186                                                 org STACK_TOP
+   187                                  
+   188                                  
+   189                                                 global _start
+   190                                  bootsec                equ $
+   191                                  _start:
+   192                                                         ; In case we want to pull more of the standard diskstart stuff in
+   193                                  ;              jmp short start         ; 2 bytes
+   194                                  ;              nop                     ; 1 byte
+   195                                  start:
+   196 00000000 FA                                     cli
+   197 00000001 FC                                     cld
+   198 00000002 31C9                                   xor cx,cx
+   199 00000004 8ED1                                   mov ss,cx
+   200 00000006 BC767B                                 mov sp,StackBuf-2       ; Just below BSS (-2 for alignment)
+   201 00000009 52                                     push dx                 ; Save drive number (in DL)
+   202                                                         ; Kill everything else and let the BIOS sort it out later
+   203 0000000A 8EC1                                   mov es,cx
+   204 0000000C 8ED9                                   mov ds,cx
+   205 0000000E FB                                     sti
+   206                                  
+   207                                  get_geo:               ; DL and ES ready
+   208 0000000F B408                                   mov ah,08h
+   209 00000011 BF0000                                 mov di,0
+   210 00000014 CD13                                   int 13h
+   211                                  write_geo:
+   212 00000016 720E                                   jc .bad_geo
+   213 00000018 BE[A801]                               mov si,s_chs
+   214 0000001B E8C700                                 call writestr_early
+   215 0000001E E8F000                                 call write_chs
+   216 00000021 E82F01                                 call crlf
+   217 00000024 EB00                                   jmp short .done
+   218                                  .bad_geo:
+   219                                  .done:
+   220                                  
+   221 00000026 BB0080                                 mov bx,dbuf
+   222                                  get_h1c:               ; 0,1,1
+   223 00000029 B90100                                 mov cx,0001h
+   224 0000002C B601                                   mov dh,01h
+   225 0000002E E88D00                                 call getonesec_chs
+   226 00000031 E8C000                                 call write_chs_lba
+   227                                  get_c1c:               ; 1,0,1
+   228 00000034 B90101                                 mov cx,0101h
+   229 00000037 B600                                   mov dh,00h
+   230 00000039 E88200                                 call getonesec_chs
+   231 0000003C E8B500                                 call write_chs_lba
+   232                                  
+   233                                  ;
+   234                                  ; Do we have EBIOS (EDD)?
+   235                                  ;
+   236                                  edd:
+   237                                  .check:
+   238 0000003F BBAA55                                 mov bx,55AAh
+   239 00000042 B441                                   mov ah,41h              ; EDD existence query
+   240 00000044 8A16747B                               mov dl,[DriveNumber]
+   241 00000048 CD13                                   int 13h
+   242 0000004A 723F                                   jc .noedd
+   243 0000004C 81FB55AA                               cmp bx,0AA55h
+   244 00000050 7539                                   jne .noedd
+   245 00000052 F6C101                                 test cl,1               ; Extended disk access functionality set
+   246 00000055 7434                                   jz .noedd
+   247                                                 ;
+   248                                                 ; We have EDD support...
+   249                                                 ;
+   250 00000057 BB0080                                 mov bx,dbuf
+   251 0000005A 6631D2                                 xor edx,edx
+   252 0000005D 66C706[A801]454444-                    mov dword [s_chs],m_EDD_SP
+   253 00000065 20                 
+   254                                  .get_lba63:
+   255 00000066 66B83F000000                           mov eax,63      ; Same length as mov al,64; movzx eax,al
+   256 0000006C E82400                                 call getonesec_ebios
+   257 0000006F 721A                                   jc .bad_edd     ;read error
+   258 00000071 E8C200                                 call write_edd_lba
+   259                                  .get_lba16065:
+   260 00000074 66B8C13E0000                           mov eax,16065
+   261 0000007A E81600                                 call getonesec_ebios
+   262 0000007D 720C                                   jc .bad_edd     ;read error
+   263 0000007F E8B400                                 call write_edd_lba
+   264                                  .good_edd:
+   265 00000082 66C706[AF01]454444-                    mov dword [s_type],m_EDD0
+   266 0000008A 00                 
+   267                                  .bad_edd:
+   268                                  .noedd:
+   269                                  .end:
+   270                                  
+   271                                  write_final_type:
+   272 0000008B BE[AD01]                               mov si,s_typespec
+   273 0000008E E85400                                 call writestr_early
+   274                                  
+   275 00000091 EB38                                   jmp short kaboom
+   276                                  
+   277                                  ;
+   278                                  ; getonesec_ebios:
+   279                                  ;
+   280                                  ; getonesec implementation for EBIOS (EDD)
+   281                                  ;
+   282                                  getonesec_ebios:
+   283 00000093 B91000                                 mov cx,retry_count
+   284                                  .retry:
+   285                                                 ; Form DAPA on stack
+   286 00000096 6652                                   push edx
+   287 00000098 6650                                   push eax
+   288 0000009A 06                                     push es
+   289 0000009B 53                                     push bx
+   290 0000009C 6A01                                   push word 1
+   291 0000009E 6A10                                   push word 16
+   292 000000A0 89E6                                   mov si,sp
+   293 000000A2 6660                                   pushad
+   294 000000A4 B442                                    mov ah,42h                      ; Extended Read
+   295 000000A6 E83200                                 call xint13
+   296 000000A9 6661                                   popad
+   297 000000AB 8D6410                                 lea sp,[si+16]                  ; Remove DAPA
+   298 000000AE 7201                                   jc .error
+   299 000000B0 C3                                      ret
+   300                                  
+   301                                  .error:
+   302                                                 ; Some systems seem to get "stuck" in an error state when
+   303                                                 ; using EBIOS.  Doesn't happen when using CBIOS, which is
+   304                                                 ; good, since some other systems get timeout failures
+   305                                                 ; waiting for the floppy disk to spin up.
+   306                                  
+   307 000000B1 6660                                   pushad                          ; Try resetting the device
+   308 000000B3 31C0                                   xor ax,ax
+   309 000000B5 E82300                                 call xint13
+   310 000000B8 6661                                   popad
+   311 000000BA E2DA                                   loop .retry                     ; CX-- and jump if not zero
+   312                                  
+   313                                                 ; Total failure.
+   314 000000BC F9                                     stc
+   315 000000BD C3                                     ret
+   316                                  
+   317                                  ;
+   318                                  ; getonesec_chs:
+   319                                  ;
+   320                                  ; CX,DH specifies CHS address
+   321                                  ;
+   322                                  getonesec_chs: ; We could use an xchg and get a loop
+   323                                  ;              mov cx,retry_count
+   324                                  .retry:
+   325 000000BE 6660                                   pushad
+   326 000000C0 B80102                                 mov ax,0201h            ; Read one sector
+   327 000000C3 E81500                                 call xint13
+   328 000000C6 6661                                   popad
+   329 000000C8 7201                                   jc .error
+   330 000000CA C3                                     ret
+   331                                  
+   332                                  .error:
+   333                                  ;              loop .retry
+   334                                                 ; Fall through to disk_error
+   335                                  ;
+   336                                  ; kaboom: write a message and bail out.
+   337                                  ;
+   338                                                 global kaboom
+   339                                  disk_error:
+   340                                  kaboom:
+   341                                  .patch:
+   342 000000CB BE[B301]                               mov si,bailmsg
+   343 000000CE E81400                                 call writestr_early
+   344 000000D1 6631C0                                 xor eax,eax
+   345 000000D4 CD16                    .again:                int 16h                 ; Wait for keypress
+   346                                                                         ; NB: replaced by int 18h if
+   347                                                                         ; chosen at install time..
+   348 000000D6 CD19                                   int 19h                 ; And try once more to boot...
+   349 000000D8 F4                      .norge:                hlt                     ; If int 19h returned; this is the end
+   350 000000D9 EBFD                                   jmp short .norge
+   351                                  
+   352                                  ;
+   353                                  ; INT 13h wrapper function
+   354                                  ;
+   355                                  xint13:
+   356 000000DB 8A16747B                                mov dl,[DriveNumber]
+   357 000000DF CD13                                   int 13h
+   358 000000E1 A3007E                                 mov [int13_ret],ax
+   359 000000E4 C3                                     ret
+   360                                  
+   361                                  ;
+   362                                  ;
+   363                                  ; writestr_early: write a null-terminated string to the console
+   364                                  ;          This assumes we're on page 0.  This is only used for early
+   365                                  ;           messages, so it should be OK.
+   366                                  ;
+   367                                  writestr_early:
+   368 000000E5 6660                                   pushad
+   369 000000E7 AC                      .loop:         lodsb
+   370 000000E8 20C0                                   and al,al
+   371 000000EA 7405                                    jz .return
+   372 000000EC E86D00                                 call writechr
+   373 000000EF EBF6                                   jmp short .loop
+   374 000000F1 6661                    .return:       popad
+   375 000000F3 C3                                     ret
+   376                                  
+   377                                  %include "geodsplib.inc"
+   378                              <1> ; -----------------------------------------------------------------------
+   379                              <1> ;
+   380                              <1> ;   Copyright 2010 Gene Cumm
+   381                              <1> ;
+   382                              <1> ;   Portions from diskstart.inc:
+   383                              <1> ;   Copyright 1994-2009 H. Peter Anvin - All Rights Reserved
+   384                              <1> ;   Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin
+   385                              <1> ;
+   386                              <1> ;   This program is free software; you can redistribute it and/or modify
+   387                              <1> ;   it under the terms of the GNU General Public License as published by
+   388                              <1> ;   the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+   389                              <1> ;   Boston MA 02110-1301, USA; either version 2 of the License, or
+   390                              <1> ;   (at your option) any later version; incorporated herein by reference.
+   391                              <1> ;
+   392                              <1> ; -----------------------------------------------------------------------
+   393                              <1> 
+   394                              <1> ;
+   395                              <1> ; geodsplib.inc
+   396                              <1> ;
+   397                              <1> ; Library file for geodsp*.asm
+   398                              <1> ;
+   399                              <1> 
+   400                              <1>                ; ES:BX points to the buffer with address
+   401                              <1>                ; DX,CX as they should be for INT13h,AH=02
+   402                              <1>                ; For now assume C<256
+   403                              <1> write_chs_lba:
+   404 000000F4 6660                <1>                pushad
+   405 000000F6 BE[A701]            <1>                mov si,s_atchs
+   406 000000F9 E8E9FF              <1>                call writestr_early
+   407 000000FC E81200              <1>                call write_chs
+   408 000000FF B03A                <1>                mov al,':'
+   409 00000101 E85800              <1>                call writechr
+   410 00000104 26668B07            <1>                mov eax,[es:bx]
+   411 00000108 E87700              <1>                call writehex8
+   412 0000010B E84500              <1>                call crlf
+   413 0000010E 6661                <1>                popad
+   414 00000110 C3                  <1>                ret
+   415                              <1> 
+   416                              <1>                ; DX,CX as they should be for INT13h,AH=02
+   417                              <1>                ; For now assume C<256
+   418                              <1> write_chs:
+   419 00000111 6660                <1>                pushad
+   420 00000113 88E8                <1>                mov al,ch
+   421 00000115 88CC                <1>                mov ah,cl
+   422 00000117 C0EC06              <1>                shr ah,6
+   423 0000011A E85800              <1>                call writehex4
+   424 0000011D B02C                <1>                mov al,','
+   425 0000011F E83A00              <1>                call writechr
+   426 00000122 88F0                <1>                mov al,dh
+   427 00000124 E84100              <1>                call writehex2
+   428 00000127 B02C                <1>                mov al,','
+   429 00000129 E83000              <1>                call writechr
+   430 0000012C 88C8                <1>                mov al,cl
+   431 0000012E 243F                <1>                and al,3Fh
+   432 00000130 E83500              <1>                call writehex2
+   433 00000133 6661                <1>                popad
+   434 00000135 C3                  <1>                ret
+   435                              <1> 
+   436                              <1> write_edd_lba:
+   437 00000136 6660                <1>                pushad
+   438 00000138 BE[A701]            <1>                mov si,s_atchs
+   439 0000013B E8A7FF              <1>                call writestr_early
+   440 0000013E E84100              <1>                call writehex8
+   441 00000141 B03A                <1>                mov al,':'
+   442 00000143 E81600              <1>                call writechr
+   443 00000146 26668B07            <1>                mov eax,[es:bx]
+   444 0000014A E83500              <1>                call writehex8
+   445 0000014D E80300              <1>                call crlf
+   446 00000150 6661                <1>                popad
+   447 00000152 C3                  <1>                ret
+   448                              <1> 
+   449                              <1> 
+   450                              <1> crlf:
+   451 00000153 56                  <1>                push si
+   452 00000154 BE[B801]            <1>                mov si,s_crlf
+   453 00000157 E88BFF              <1>                call writestr_early
+   454 0000015A 5E                  <1>                pop si
+   455 0000015B C3                  <1>                ret
+   456                              <1> 
+   457                              <1> writechr:
+   458                              <1> writechr_early:
+   459 0000015C 6660                <1>                pushad
+   460 0000015E B40E                <1>                mov ah,0Eh              ; Write to screen as TTY
+   461 00000160 BB0700              <1>                mov bx,0007h            ; Attribute
+   462 00000163 CD10                <1>                int 10h
+   463 00000165 6661                <1>                popad
+   464 00000167 C3                  <1>                ret
+   465                              <1> 
+   466                              <1> %include "writehex.inc"
+   467                              <2> ;; -----------------------------------------------------------------------
+   468                              <2> ;;
+   469                              <2> ;;   Copyright 1994-2008 H. Peter Anvin - All Rights Reserved
+   470                              <2> ;;
+   471                              <2> ;;   This program is free software; you can redistribute it and/or modify
+   472                              <2> ;;   it under the terms of the GNU General Public License as published by
+   473                              <2> ;;   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
+   474                              <2> ;;   Boston MA 02111-1307, USA; either version 2 of the License, or
+   475                              <2> ;;   (at your option) any later version; incorporated herein by reference.
+   476                              <2> ;;
+   477                              <2> ;; -----------------------------------------------------------------------
+   478                              <2> 
+   479                              <2> ;;
+   480                              <2> ;; writehex.inc
+   481                              <2> ;;
+   482                              <2> ;; Write hexadecimal numbers to the console
+   483                              <2> ;;
+   484                              <2> 
+   485                              <2> ;
+   486                              <2> ; writehex[248]: Write a hex number in (AL, AX, EAX) to the console
+   487                              <2> ;
+   488                              <2> writehex2:
+   489 00000168 669C                <2>                pushfd
+   490 0000016A 6660                <2>                pushad
+   491 0000016C 66C1C018            <2>                rol eax,24
+   492 00000170 B90200              <2>                mov cx,2
+   493 00000173 EB14                <2>                jmp short writehex_common
+   494                              <2> writehex4:
+   495 00000175 669C                <2>                pushfd
+   496 00000177 6660                <2>                pushad
+   497 00000179 66C1C010            <2>                rol eax,16
+   498 0000017D B90400              <2>                mov cx,4
+   499 00000180 EB07                <2>                jmp short writehex_common
+   500                              <2> writehex8:
+   501 00000182 669C                <2>                pushfd
+   502 00000184 6660                <2>                pushad
+   503 00000186 B90800              <2>                mov cx,8
+   504                              <2> writehex_common:
+   505 00000189 66C1C004            <2> .loop:         rol eax,4
+   506 0000018D 6650                <2>                push eax
+   507 0000018F 240F                <2>                and al,0Fh
+   508 00000191 3C0A                <2>                cmp al,10
+   509 00000193 7304                <2>                jae .high
+   510 00000195 0430                <2> .low:          add al,'0'
+   511 00000197 EB02                <2>                jmp short .ischar
+   512 00000199 0437                <2> .high:         add al,'A'-10
+   513 0000019B E8BEFF              <2> .ischar:       call writechr
+   514 0000019E 6658                <2>                pop eax
+   515 000001A0 E2E7                <2>                loop .loop
+   516 000001A2 6661                <2>                popad
+   517 000001A4 669D                <2>                popfd
+   518 000001A6 C3                  <2>                ret
+   519                              <1> 
+   520 000001A7 40                  <1> s_atchs:       db '@'
+   521 000001A8 434853              <1> s_chs:         db 'CHS'
+   522 000001AB 2000                <1> s_space:       db ' ', 0
+   523 000001AD 443D                <1> s_typespec:    db 'D='
+   524 000001AF 43485300            <1> s_type:                db 'CHS', 0
+   525 000001B3 0D0A656E64          <1> s_end:         db 0Dh, 0Ah, 'end'
+   526 000001B8 0D0A00              <1> s_crlf:                db 0Dh, 0Ah, 0
+   527                              <1> 
+   528                              <1> ; This indicates the general format of the last few bytes in the boot sector
+   529                              <1> BS_MAGIC_VER   equ 0x1b << 9
+   530                                  bailmsg                equ s_end
+   531                                  
+   532                                                 ; This fails if the boot sector overflowsg
+   533 000001BB 00<rept>                               zb 1BEh-($-$$)
+   534                                  
+   535 000001BE 00<rept>                ptable         zb 40h          ; Partition table
+   536                                  
+   537 000001FE 55AA                    bootsignature  dw 0xAA55
+   538                                  
+   539                                  sector_2:
diff --git a/diag/geodsp/geodspms.lst b/diag/geodsp/geodspms.lst
new file mode 100644 (file)
index 0000000..66c7cd0
--- /dev/null
@@ -0,0 +1,943 @@
+     1                                  ; -----------------------------------------------------------------------
+     2                                  ;
+     3                                  ;   Copyright 2010 Gene Cumm
+     4                                  ;
+     5                                  ;   Portions from diskstart.inc:
+     6                                  ;   Copyright 1994-2009 H. Peter Anvin - All Rights Reserved
+     7                                  ;   Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin
+     8                                  ;
+     9                                  ;   This program is free software; you can redistribute it and/or modify
+    10                                  ;   it under the terms of the GNU General Public License as published by
+    11                                  ;   the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+    12                                  ;   Boston MA 02110-1301, USA; either version 2 of the License, or
+    13                                  ;   (at your option) any later version; incorporated herein by reference.
+    14                                  ;
+    15                                  ; -----------------------------------------------------------------------
+    16                                  
+    17                                  ;
+    18                                  ; geodspms.asm
+    19                                  ;
+    20                                  ; Display geometry translation info for diagnosing misconceptions
+    21                                  ; multi-sector variant
+    22                                  ;
+    23                                  ;      nasm -Ox -f bin -o geodsp.bin -l geodsp.lst geodsp.asm
+    24                                  ;
+    25                                  ;      nasm -Ox -f elf -o geodsp.o -l geodsp.lst geodsp.asm
+    26                                  ;      ld -m elf_i386  -T syslinux.ld -M -o geodsp.elf geodsp.o > geodsp.map
+    27                                  ;      objcopy -O binary geodsp.elf geodsp.raw
+    28                                  ;
+    29                                  ;      # OF=/dev/sdb
+    30                                  ;      # dd if=core/geodsp.bin of=$OF
+    31                                  ;      # dd skip=1 seek=1 if=../dbg/lba-img/lba-img.bin of=$OF
+    32                                  ;      # eject $OF
+    33                                  ;      # dd count=$() if=/dev/zero of=$OF
+    34                                  ;
+    35                                  ;      # OF=geo-2.255.63.i
+    36                                  ;      # (dd if=core/geodsp.bin; dd skip=1 if=../dbg/lba-img/lba-img.bin; dd count=$((2*255*63 - 256*63 - 1)) if=/dev/zero )|dd of=$OF
+    37                                  ;      # OF=geo-20.16.63.i
+    38                                  ;      # (dd if=core/geodsp.bin; dd skip=1 if=../dbg/lba-img/lba-img.bin; dd count=$((40*16*63 - 256*63 - 1)) if=/dev/zero )|dd of=$OF
+    39                                  ;
+    40                                  
+    41                                  ; Just to define it to look like SYSLINUX
+    42                                  %define IS_SYSLINUX 1
+    43                                  
+    44                                  %include "macros.inc"
+    45                              <1> ;; -----------------------------------------------------------------------
+    46                              <1> ;;
+    47                              <1> ;;   Copyright 1994-2008 H. Peter Anvin - All Rights Reserved
+    48                              <1> ;;   Copyright 2009 Intel Corporation; author: H. Peter Anvin
+    49                              <1> ;;
+    50                              <1> ;;   This program is free software; you can redistribute it and/or modify
+    51                              <1> ;;   it under the terms of the GNU General Public License as published by
+    52                              <1> ;;   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
+    53                              <1> ;;   Boston MA 02111-1307, USA; either version 2 of the License, or
+    54                              <1> ;;   (at your option) any later version; incorporated herein by reference.
+    55                              <1> ;;
+    56                              <1> ;; -----------------------------------------------------------------------
+    57                              <1> 
+    58                              <1> ;;
+    59                              <1> ;; macros.inc
+    60                              <1> ;;
+    61                              <1> ;; Convenient macros
+    62                              <1> ;;
+    63                              <1> 
+    64                              <1> %ifndef _MACROS_INC
+    65                              <1> %define _MACROS_INC
+    66                              <1> 
+    67                              <1> ;
+    68                              <1> ; Identify the module we're compiling; the "correct" should be defined
+    69                              <1> ; in the module itself to 1
+    70                              <1> ;
+    71                              <1> %ifdef IS_SYSLINUX
+    72                              <1>  %define MY_NAME 'SYSLINUX'
+    73                              <1> %else
+    74                              <1>  %define IS_SYSLINUX 0
+    75                              <1> %endif
+    76                              <1> %ifdef IS_PXELINUX
+    77                              <1>  %define MY_NAME 'PXELINUX'
+    78                              <1> %else
+    79                              <1>  %define IS_PXELINUX 0
+    80                              <1> %endif
+    81                              <1> %ifdef IS_ISOLINUX
+    82                              <1>  %define MY_NAME 'ISOLINUX'
+    83                              <1> %else
+    84                              <1>  %define IS_ISOLINUX 0
+    85                              <1> %endif
+    86                              <1> %ifdef IS_EXTLINUX
+    87                              <1>  %define MY_NAME 'EXTLINUX'
+    88                              <1> %else
+    89                              <1>  %define IS_EXTLINUX 0
+    90                              <1> %endif
+    91                              <1> 
+    92                              <1> ;
+    93                              <1> ; Macros similar to res[bwd], but which works in the code segment (after
+    94                              <1> ; section .text16) or the data segment (section .data16)
+    95                              <1> ;
+    96                              <1> %macro zb      1.nolist
+    97                              <1>        times %1 db 0
+    98                              <1> %endmacro
+    99                              <1> 
+   100                              <1> %macro zw      1.nolist
+   101                              <1>        times %1 dw 0
+   102                              <1> %endmacro
+   103                              <1> 
+   104                              <1> %macro zd      1.nolist
+   105                              <1>        times %1 dd 0
+   106                              <1> %endmacro
+   107                              <1> 
+   108                              <1> ;
+   109                              <1> ; Align with zero bytes in a progbits segment
+   110                              <1> ;
+   111                              <1> %macro alignz  1.nolist
+   112                              <1>        times (((%1) - (($-$$) % (%1))) % (%1)) db 0
+   113                              <1> %endmacro
+   114                              <1> 
+   115                              <1> ;
+   116                              <1> ; Macro to emit an unsigned decimal number as a string
+   117                              <1> ;
+   118                              <1> %macro asciidec        1.nolist
+   119                              <1>   %ifndef DEPEND       ; Not safe for "depend"
+   120                              <1>     %push asciidec
+   121                              <1>       %assign %$v %1
+   122                              <1>       %if %$v == 0
+   123                              <1>         db '0'
+   124                              <1>       %else
+   125                              <1>         %assign %$dcount 0
+   126                              <1>         %assign %$n %$v
+   127                              <1>         %assign %$d 1
+   128                              <1>         %rep 20
+   129                              <1>           %if %$n != 0
+   130                              <1>             %assign %$dcount %$dcount + 1
+   131                              <1>             %assign %$n %$n / 10
+   132                              <1>             %assign %$d %$d * 10
+   133                              <1>           %endif
+   134                              <1>         %endrep
+   135                              <1>         %rep %$dcount
+   136                              <1>          %assign %$d %$d / 10
+   137                              <1>           db ((%$v / %$d) % 10) + '0'
+   138                              <1>         %endrep
+   139                              <1>       %endif
+   140                              <1>     %pop
+   141                              <1>   %endif
+   142                              <1> %endmacro
+   143                              <1> 
+   144                              <1> ;
+   145                              <1> ; Macros for network byte order of constants
+   146                              <1> ;
+   147                              <1> %define htons(x)  ( ( ((x) & 0FFh) << 8 ) + ( ((x) & 0FF00h) >> 8 ) )
+   148                              <1> %define ntohs(x) htons(x)
+   149                              <1> %define htonl(x)  ( ( ((x) & 0FFh) << 24) + ( ((x) & 0FF00h) << 8 ) + ( ((x) & 0FF0000h) >> 8 ) + ( ((x) & 0FF000000h) >> 24) )
+   150                              <1> %define ntohl(x) htonl(x)
+   151                              <1> 
+   152                              <1> ;
+   153                              <1> ; ASCII
+   154                              <1> ;
+   155                              <1> CR             equ 13          ; Carriage Return
+   156                              <1> LF             equ 10          ; Line Feed
+   157                              <1> FF             equ 12          ; Form Feed
+   158                              <1> BS             equ  8          ; Backspace
+   159                              <1> 
+   160                              <1> %endif ; _MACROS_INC
+   161                                  ; %include "layout.inc"
+   162                                  
+   163                                  m_CHS0         equ 00534843h           ;'CHS',0
+   164                                  m_EDD0         equ 00444445h           ;'EDD',0
+   165                                  m_EDD_SP       equ 20444445h           ;'EDD '
+   166                                  retry_count    equ 16
+   167                                  dbuf           equ 8000h
+   168                                  ; int13_ret    equ 7e00h
+   169                                  LDLINUX_MAGIC  equ 0x3eb202fe          ; A random number to identify ourselves with
+   170                                  
+   171                                  Sect1Ptr0_VAL  equ 1
+   172                                  Sect1Ptr1_VAL  equ 0
+   173                                  
+   174                                  ;              global STACK_LEN, STACK_TOP, STACK_BASE
+   175                                  ; STACK_LEN    equ 4096
+   176                                  STACK_TOP      equ 7c00h
+   177                                  ; STACK_BASE   equ STACK_TOP - STACK_LEN
+   178                                                 section .init
+   179                                                 org STACK_TOP
+   180                                  geodsp_start:
+   181                                  
+   182                                  %include "diskboot.inc"
+   183                              <1> ; -----------------------------------------------------------------------
+   184                              <1> ;
+   185                              <1> ;   Copyright 1994-2009 H. Peter Anvin - All Rights Reserved
+   186                              <1> ;   Copyright 2009-2011 Intel Corporation; author: H. Peter Anvin
+   187                              <1> ;
+   188                              <1> ;   This program is free software; you can redistribute it and/or modify
+   189                              <1> ;   it under the terms of the GNU General Public License as published by
+   190                              <1> ;   the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+   191                              <1> ;   Boston MA 02110-1301, USA; either version 2 of the License, or
+   192                              <1> ;   (at your option) any later version; incorporated herein by reference.
+   193                              <1> ;
+   194                              <1> ; -----------------------------------------------------------------------
+   195                              <1> 
+   196                              <1> ;
+   197                              <1> ; diskboot.inc
+   198                              <1> ;
+   199                              <1> ; Common boot sector code for harddisk-based Syslinux derivatives.
+   200                              <1> ;
+   201                              <1> ; Requires macros z[bwd], labels ldlinux_ent, ldlinux_magic, ldlinux_sys
+   202                              <1> ; and constants BS_MAGIC_VER, LDLINUX_MAGIC, retry_count, Sect1Ptr[01]_VAL,
+   203                              <1> ; STACK_TOP
+   204                              <1> ;
+   205                              <1> 
+   206                              <1>                section .init
+   207                              <1> ;
+   208                              <1> ; Some of the things that have to be saved very early are saved
+   209                              <1> ; "close" to the initial stack pointer offset, in order to
+   210                              <1> ; reduce the code size...
+   211                              <1> ;
+   212                              <1> 
+   213                              <1> StackBuf       equ STACK_TOP-44-92     ; Start the stack here (grow down - 4K)
+   214                              <1> PartInfo       equ StackBuf
+   215                              <1> .mbr           equ PartInfo
+   216                              <1> .gptlen                equ PartInfo+16
+   217                              <1> .gpt           equ PartInfo+20
+   218                              <1> FloppyTable    equ PartInfo+76
+   219                              <1> ; Total size of PartInfo + FloppyTable == 76+16 = 92 bytes
+   220                              <1> Hidden         equ StackBuf-24         ; Partition offset (qword)
+   221                              <1> OrigFDCTabPtr  equ StackBuf-16         ; Original FDC table
+   222                              <1> OrigDSSI       equ StackBuf-12         ; DS:SI -> partinfo
+   223                              <1> OrigESDI       equ StackBuf-8          ; ES:DI -> $PnP structure
+   224                              <1> DriveNumber    equ StackBuf-4          ; Drive number
+   225                              <1> StackHome      equ Hidden              ; The start of the canonical stack
+   226                              <1> 
+   227                              <1> ;
+   228                              <1> ; Primary entry point.  Tempting as though it may be, we can't put the
+   229                              <1> ; initial "cli" here; the jmp opcode in the first byte is part of the
+   230                              <1> ; "magic number" (using the term very loosely) for the DOS superblock.
+   231                              <1> ;
+   232                              <1> bootsec                equ $
+   233 00000000 EB58                <1> _start:                jmp short start         ; 2 bytes
+   234 00000002 90                  <1>                nop                     ; 1 byte
+   235                              <1> ;
+   236                              <1> ; "Superblock" follows -- it's in the boot sector, so it's already
+   237                              <1> ; loaded and ready for us
+   238                              <1> ;
+   239 00000003 5359534C494E5558    <1> bsOemName      db MY_NAME              ; The SYS command sets this, so...
+   240                              <1>                zb 8-($-bsOemName)
+   241                              <1> 
+   242                              <1> ;
+   243                              <1> ; These are the fields we actually care about.  We end up expanding them
+   244                              <1> ; all to dword size early in the code, so generate labels for both
+   245                              <1> ; the expanded and unexpanded versions.
+   246                              <1> ;
+   247                              <1> %macro         superb 1
+   248                              <1> bx %+ %1       equ SuperInfo+($-superblock)*8+4
+   249                              <1> bs %+ %1       equ $
+   250                              <1>                zb 1
+   251                              <1> %endmacro
+   252                              <1> %macro         superw 1
+   253                              <1> bx %+ %1       equ SuperInfo+($-superblock)*8
+   254                              <1> bs %+ %1       equ $
+   255                              <1>                zw 1
+   256                              <1> %endmacro
+   257                              <1> %macro         superd 1
+   258                              <1> bx %+ %1       equ $                   ; no expansion for dwords
+   259                              <1> bs %+ %1       equ $
+   260                              <1>                zd 1
+   261                              <1> %endmacro
+   262                              <1> superblock     equ $
+   263                              <1>                superw BytesPerSec
+   264                              <2> bx %+ %1 equ SuperInfo+($-superblock)*8
+   265                              <2> bs %+ %1 equ $
+   266 0000000B 0000                <2>  zw 1
+   267                              <1>                superb SecPerClust
+   268                              <2> bx %+ %1 equ SuperInfo+($-superblock)*8+4
+   269                              <2> bs %+ %1 equ $
+   270 0000000D 00                  <2>  zb 1
+   271                              <1>                superw ResSectors
+   272                              <2> bx %+ %1 equ SuperInfo+($-superblock)*8
+   273                              <2> bs %+ %1 equ $
+   274 0000000E 0000                <2>  zw 1
+   275                              <1>                superb FATs
+   276                              <2> bx %+ %1 equ SuperInfo+($-superblock)*8+4
+   277                              <2> bs %+ %1 equ $
+   278 00000010 00                  <2>  zb 1
+   279                              <1>                superw RootDirEnts
+   280                              <2> bx %+ %1 equ SuperInfo+($-superblock)*8
+   281                              <2> bs %+ %1 equ $
+   282 00000011 0000                <2>  zw 1
+   283                              <1>                superw Sectors
+   284                              <2> bx %+ %1 equ SuperInfo+($-superblock)*8
+   285                              <2> bs %+ %1 equ $
+   286 00000013 0000                <2>  zw 1
+   287                              <1>                superb Media
+   288                              <2> bx %+ %1 equ SuperInfo+($-superblock)*8+4
+   289                              <2> bs %+ %1 equ $
+   290 00000015 00                  <2>  zb 1
+   291                              <1>                superw FATsecs
+   292                              <2> bx %+ %1 equ SuperInfo+($-superblock)*8
+   293                              <2> bs %+ %1 equ $
+   294 00000016 0000                <2>  zw 1
+   295                              <1>                superw SecPerTrack
+   296                              <2> bx %+ %1 equ SuperInfo+($-superblock)*8
+   297                              <2> bs %+ %1 equ $
+   298 00000018 0000                <2>  zw 1
+   299                              <1>                superw Heads
+   300                              <2> bx %+ %1 equ SuperInfo+($-superblock)*8
+   301                              <2> bs %+ %1 equ $
+   302 0000001A 0000                <2>  zw 1
+   303                              <1> superinfo_size equ ($-superblock)-1    ; How much to expand
+   304                              <1>                superd Hidden
+   305                              <2> bx %+ %1 equ $
+   306                              <2> bs %+ %1 equ $
+   307 0000001C 00000000            <2>  zd 1
+   308                              <1>                superd HugeSectors
+   309                              <2> bx %+ %1 equ $
+   310                              <2> bs %+ %1 equ $
+   311 00000020 00000000            <2>  zd 1
+   312                              <1>                ;
+   313                              <1>                ; This is as far as FAT12/16 and FAT32 are consistent
+   314                              <1>                ;
+   315                              <1>                ; FAT12/16 need 26 more bytes,
+   316                              <1>                ; FAT32 need 54 more bytes
+   317                              <1>                ;
+   318                              <1> superblock_len_fat16   equ $-superblock+26
+   319                              <1> superblock_len_fat32   equ $-superblock+54
+   320 00000024 00<rept>            <1>                zb 54                   ; Maximum needed size
+   321                              <1> superblock_max equ $-superblock
+   322                              <1> 
+   323                              <1>                global SecPerClust
+   324                              <1> SecPerClust    equ bxSecPerClust
+   325                              <1> 
+   326                              <1> ;
+   327                              <1> ; Note we don't check the constraints above now; we did that at install
+   328                              <1> ; time (we hope!)
+   329                              <1> ;
+   330                              <1> start:
+   331 0000005A FA                  <1>                cli                     ; No interrupts yet, please
+   332 0000005B FC                  <1>                cld                     ; Copy upwards
+   333                              <1> ;
+   334                              <1> ; Set up the stack
+   335                              <1> ;
+   336 0000005C 31C9                <1>                xor cx,cx
+   337 0000005E 8ED1                <1>                mov ss,cx
+   338 00000060 BC767B              <1>                mov sp,StackBuf-2       ; Just below BSS (-2 for alignment)
+   339 00000063 52                  <1>                push dx                 ; Save drive number (in DL)
+   340 00000064 06                  <1>                push es                 ; Save initial ES:DI -> $PnP pointer
+   341 00000065 57                  <1>                push di
+   342 00000066 1E                  <1>                push ds                 ; Save original DS:SI -> partinfo
+   343 00000067 56                  <1>                push si
+   344 00000068 8EC1                <1>                mov es,cx
+   345                              <1> 
+   346                              <1> ;
+   347                              <1> ; DS:SI may contain a partition table entry and possibly a GPT entry.
+   348                              <1> ; Preserve it for us.  This saves 56 bytes of the GPT entry, which is
+   349                              <1> ; currently the maximum we care about.  Total is 76 bytes.
+   350                              <1> ;
+   351 0000006A B126                <1>                mov cl,(16+4+56)/2      ; Save partition info
+   352 0000006C BF787B              <1>                mov di,PartInfo
+   353 0000006F F3A5                <1>                rep movsw               ; This puts CX back to zero
+   354                              <1> 
+   355 00000071 8ED9                <1>                mov ds,cx               ; Now we can initialize DS...
+   356                              <1> 
+   357                              <1> ;
+   358                              <1> ; Now sautee the BIOS floppy info block to that it will support decent-
+   359                              <1> ; size transfers; the floppy block is 11 bytes and is stored in the
+   360                              <1> ; INT 1Eh vector (brilliant waste of resources, eh?)
+   361                              <1> ;
+   362                              <1> ; Of course, if BIOSes had been properly programmed, we wouldn't have
+   363                              <1> ; had to waste precious space with this code.
+   364                              <1> ;
+   365 00000073 BB7800              <1>                mov bx,fdctab
+   366 00000076 0FB437              <1>                lfs si,[bx]             ; FS:SI -> original fdctab
+   367 00000079 0FA0                <1>                push fs                 ; Save on stack in case we need to bail
+   368 0000007B 56                  <1>                push si
+   369                              <1> 
+   370                              <1>                ; Save the old fdctab even if hard disk so the stack layout
+   371                              <1>                ; is the same.  The instructions above do not change the flags
+   372 0000007C 20D2                <1>                and dl,dl               ; If floppy disk (00-7F), assume no
+   373                              <1>                                        ; partition table
+   374 0000007E 781B                <1>                js harddisk
+   375                              <1> 
+   376                              <1> floppy:
+   377 00000080 31C0                <1>                xor ax,ax
+   378 00000082 B106                <1>                mov cl,6                ; 12 bytes (CX == 0)
+   379                              <1>                ; es:di -> FloppyTable already
+   380                              <1>                ; This should be safe to do now, interrupts are off...
+   381 00000084 893F                <1>                mov [bx],di             ; FloppyTable
+   382 00000086 894702              <1>                mov [bx+2],ax           ; Segment 0
+   383 00000089 F364A5              <1>                fs rep movsw            ; Faster to move words
+   384 0000008C 8A0E[1800]          <1>                mov cl,[bsSecPerTrack]  ; Patch the sector count
+   385 00000090 884DF8              <1>                mov [di-12+4],cl
+   386                              <1> 
+   387 00000093 50                  <1>                push ax                 ; Partition offset == 0
+   388 00000094 50                  <1>                push ax
+   389 00000095 50                  <1>                push ax
+   390 00000096 50                  <1>                push ax
+   391                              <1> 
+   392 00000097 CD13                <1>                int 13h                 ; Some BIOSes need this
+   393                              <1>                        ; Using xint13 costs +1B
+   394 00000099 EB62                <1>                jmp short not_harddisk
+   395                              <1> ;
+   396                              <1> ; The drive number and possibly partition information was passed to us
+   397                              <1> ; by the BIOS or previous boot loader (MBR).  Current "best practice" is to
+   398                              <1> ; trust that rather than what the superblock contains.
+   399                              <1> ;
+   400                              <1> ; Note: di points to beyond the end of PartInfo
+   401                              <1> ; Note: false negatives might slip through the handover area's sanity checks,
+   402                              <1> ;       if the region is very close (less than a paragraph) to
+   403                              <1> ;       PartInfo ; no false positives are possible though
+   404                              <1> ;
+   405                              <1> harddisk:
+   406 0000009B 8B55AA              <1>                mov dx,[di-76-10]       ; Original DS
+   407 0000009E 8B75A8              <1>                mov si,[di-76-12]       ; Original SI
+   408 000000A1 C1EE04              <1>                shr si,4
+   409 000000A4 01F2                <1>                add dx,si
+   410 000000A6 83FA4F              <1>                cmp dx,4fh              ; DS:SI < 50h:0 (BDA or IVT) ?
+   411 000000A9 7631                <1>                jbe .no_partition
+   412 000000AB 81FAB207            <1>                cmp dx,(PartInfo-75)>>4 ; DS:SI in overwritten memory?
+   413 000000AF 732B                <1>                jae .no_partition
+   414 000000B1 F645B47F            <1>                test byte [di-76],7Fh   ; Sanity check: "active flag" should
+   415 000000B5 7525                <1>                jnz .no_partition       ; be 00 or 80
+   416 000000B7 384DB8              <1>                cmp [di-76+4],cl        ; Sanity check: partition type != 0
+   417 000000BA 7420                <1>                je .no_partition
+   418 000000BC 663D21475054        <1>                cmp eax,'!GPT'          ; !GPT signature?
+   419 000000C2 7510                <1>                jne .mbr
+   420 000000C4 807DB8ED            <1>                cmp byte [di-76+4],0EDh ; Synthetic GPT partition entry?
+   421 000000C8 750A                <1>                jne .mbr
+   422                              <1> .gpt:                                  ; GPT-style partition info
+   423 000000CA 66FF75EC            <1>                push dword [di-76+20+36]
+   424 000000CE 66FF75E8            <1>                push dword [di-76+20+32]
+   425 000000D2 EB0F                <1>                jmp .gotoffs
+   426                              <1> .mbr:                                  ; MBR-style partition info
+   427 000000D4 51                  <1>                push cx                 ; Upper half partition offset == 0
+   428 000000D5 51                  <1>                push cx
+   429 000000D6 66FF75BC            <1>                push dword [di-76+8]    ; Partition offset (dword)
+   430 000000DA EB07                <1>                jmp .gotoffs
+   431                              <1> .no_partition:
+   432                              <1> ;
+   433                              <1> ; No partition table given... assume that the Hidden field in the boot sector
+   434                              <1> ; tells the truth (in particular, is zero if this is an unpartitioned disk.)
+   435                              <1> ;
+   436 000000DC 51                  <1>                push cx
+   437 000000DD 51                  <1>                push cx
+   438 000000DE 66FF36[1C00]        <1>                push dword [bsHidden]
+   439                              <1> .gotoffs:
+   440                              <1> ;
+   441                              <1> ; Get disk drive parameters (don't trust the superblock.)  Don't do this for
+   442                              <1> ; floppy drives -- INT 13:08 on floppy drives will (may?) return info about
+   443                              <1> ; what the *drive* supports, not about the *media*.  Fortunately floppy disks
+   444                              <1> ; tend to have a fixed, well-defined geometry which is stored in the superblock.
+   445                              <1> ;
+   446                              <1>                ; DL == drive # still
+   447 000000E3 B408                <1>                mov ah,08h
+   448 000000E5 E8E900              <1>                call xint13
+   449 000000E8 7213                <1>                jc no_driveparm
+   450 000000EA 20E4                <1>                and ah,ah
+   451 000000EC 750F                <1>                jnz no_driveparm
+   452 000000EE C1EA08              <1>                shr dx,8
+   453 000000F1 42                  <1>                inc dx                  ; Contains # of heads - 1
+   454 000000F2 8916[1A00]          <1>                mov [bsHeads],dx
+   455 000000F6 83E13F              <1>                and cx,3fh
+   456 000000F9 890E[1800]          <1>                mov [bsSecPerTrack],cx
+   457                              <1> no_driveparm:
+   458                              <1> not_harddisk:
+   459                              <1> ;
+   460                              <1> ; Ready to enable interrupts, captain
+   461                              <1> ;
+   462 000000FD FB                  <1>                sti
+   463                              <1> 
+   464                              <1> ;
+   465                              <1> ; Do we have EBIOS (EDD)?
+   466                              <1> ;
+   467                              <1> eddcheck:
+   468 000000FE BBAA55              <1>                mov bx,55AAh
+   469 00000101 B441                <1>                mov ah,41h              ; EDD existence query
+   470 00000103 E8CB00              <1>                call xint13
+   471 00000106 7210                <1>                jc .noedd
+   472 00000108 81FB55AA            <1>                cmp bx,0AA55h
+   473 0000010C 750A                <1>                jne .noedd
+   474 0000010E F6C101              <1>                test cl,1               ; Extended disk access functionality set
+   475 00000111 7405                <1>                jz .noedd
+   476                              <1>                ;
+   477                              <1>                ; We have EDD support...
+   478                              <1>                ;
+   479 00000113 C606[4601]00        <1>                mov byte [getonesec.jmp+1],(getonesec_ebios-(getonesec.jmp+2))
+   480                              <1> .noedd:
+   481                              <1> 
+   482                              <1> ;
+   483                              <1> ; Load the first sector of LDLINUX.SYS; this used to be all proper
+   484                              <1> ; with parsing the superblock and root directory; it doesn't fit
+   485                              <1> ; together with EBIOS support, unfortunately.
+   486                              <1> ;
+   487                              <1> Sect1Load:
+   488 00000118 66B801000000        <1>                mov eax,strict dword Sect1Ptr0_VAL      ; 0xdeadbeef
+   489                              <1> Sect1Ptr0      equ $-4
+   490 0000011E 66BA00000000        <1>                mov edx,strict dword Sect1Ptr1_VAL      ; 0xfeedface
+   491                              <1> Sect1Ptr1      equ $-4
+   492 00000124 BB[0002]            <1>                mov bx,ldlinux_sys      ; Where to load it
+   493 00000127 E80E00              <1>                call getonesec
+   494                              <1> 
+   495                              <1>                ; Some modicum of integrity checking
+   496 0000012A 66813E[0402]FF02B2- <1>                cmp dword [ldlinux_magic+4],LDLINUX_MAGIC^HEXDATE
+   497 00000132 3E                  <1>
+   498 00000133 7574                <1>                jne kaboom
+   499                              <1> 
+   500                              <1>                ; Go for it!  This also normalizes CS:IP.
+   501 00000135 E9D000              <1>                jmp ldlinux_ent
+   502                              <1> 
+   503                              <1> ;
+   504                              <1> ; getonesec: load a single disk linear sector EDX:EAX into the buffer
+   505                              <1> ;           at ES:BX.
+   506                              <1> ;
+   507                              <1> ;            This routine assumes CS == DS == SS, and trashes most registers.
+   508                              <1> ;
+   509                              <1> ; Stylistic note: use "xchg" instead of "mov" when the source is a register
+   510                              <1> ; that is dead from that point; this saves space.  However, please keep
+   511                              <1> ; the order to dst,src to keep things sane.
+   512                              <1> ;
+   513                              <1> getonesec:
+   514 00000138 660306607B          <1>                add eax,[Hidden]                ; Add partition offset
+   515 0000013D 661316647B          <1>                adc edx,[Hidden+4]
+   516 00000142 B91000              <1>                mov cx,retry_count
+   517 00000145 EB2B                <1> .jmp:          jmp strict short getonesec_cbios
+   518                              <1> 
+   519                              <1> ;
+   520                              <1> ; getonesec_ebios:
+   521                              <1> ;
+   522                              <1> ; getonesec implementation for EBIOS (EDD)
+   523                              <1> ;
+   524                              <1> getonesec_ebios:
+   525                              <1> .retry:
+   526                              <1>                ; Form DAPA on stack
+   527 00000147 6652                <1>                push edx
+   528 00000149 6650                <1>                push eax
+   529 0000014B 06                  <1>                push es
+   530 0000014C 53                  <1>                push bx
+   531 0000014D 6A01                <1>                push word 1
+   532 0000014F 6A10                <1>                push word 16
+   533 00000151 89E6                <1>                mov si,sp
+   534 00000153 6660                <1>                pushad
+   535 00000155 B442                <1>                 mov ah,42h                      ; Extended Read
+   536 00000157 E87700              <1>                call xint13
+   537 0000015A 6661                <1>                popad
+   538 0000015C 8D6410              <1>                lea sp,[si+16]                  ; Remove DAPA
+   539 0000015F 7201                <1>                jc .error
+   540 00000161 C3                  <1>                 ret
+   541                              <1> 
+   542                              <1> .error:
+   543                              <1>                ; Some systems seem to get "stuck" in an error state when
+   544                              <1>                ; using EBIOS.  Doesn't happen when using CBIOS, which is
+   545                              <1>                ; good, since some other systems get timeout failures
+   546                              <1>                ; waiting for the floppy disk to spin up.
+   547                              <1> 
+   548 00000162 6660                <1>                pushad                          ; Try resetting the device
+   549 00000164 31C0                <1>                xor ax,ax
+   550 00000166 E86800              <1>                call xint13
+   551 00000169 6661                <1>                popad
+   552 0000016B E2DA                <1>                loop .retry                     ; CX-- and jump if not zero
+   553                              <1> 
+   554                              <1>                ; Total failure.  Try falling back to CBIOS.
+   555 0000016D C606[4601]2B        <1>                mov byte [getonesec.jmp+1],(getonesec_cbios-(getonesec.jmp+2))
+   556                              <1> 
+   557                              <1> ;
+   558                              <1> ; getonesec_cbios:
+   559                              <1> ;
+   560                              <1> ; getlinsec implementation for legacy CBIOS
+   561                              <1> ;
+   562                              <1> getonesec_cbios:
+   563                              <1> .retry:
+   564 00000172 6660                <1>                pushad
+   565                              <1> 
+   566 00000174 660FB736[1800]      <1>                movzx esi,word [bsSecPerTrack]
+   567 0000017A 660FB73E[1A00]      <1>                movzx edi,word [bsHeads]
+   568                              <1>                ;
+   569                              <1>                ; Dividing by sectors to get (track,sector): we may have
+   570                              <1>                ; up to 2^18 tracks, so we need to use 32-bit arithmetric.
+   571                              <1>                ;
+   572 00000180 66F7F6              <1>                div esi
+   573 00000183 31C9                <1>                xor cx,cx
+   574 00000185 87CA                <1>                xchg cx,dx              ; CX <- sector index (0-based)
+   575                              <1>                                        ; EDX <- 0
+   576                              <1>                ; eax = track #
+   577 00000187 66F7F7              <1>                div edi                 ; Convert track to head/cyl
+   578                              <1> 
+   579 0000018A 663DFF030000        <1>                cmp eax,1023            ; Outside the CHS range?
+   580 00000190 7717                <1>                ja kaboom
+   581                              <1> 
+   582                              <1>                ;
+   583                              <1>                ; Now we have AX = cyl, DX = head, CX = sector (0-based),
+   584                              <1>                ; SI = bsSecPerTrack, ES:BX = data target
+   585                              <1>                ;
+   586 00000192 C0E406              <1>                shl ah,6                ; Because IBM was STOOPID
+   587                              <1>                                        ; and thought 8 bits were enough
+   588                              <1>                                        ; then thought 10 bits were enough...
+   589 00000195 41                  <1>                inc cx                  ; Sector numbers are 1-based, sigh
+   590 00000196 08E1                <1>                or cl,ah
+   591 00000198 88C5                <1>                mov ch,al
+   592 0000019A 88D6                <1>                mov dh,dl
+   593 0000019C B80102              <1>                mov ax,0201h            ; Read one sector
+   594 0000019F E82F00              <1>                call xint13
+   595 000001A2 6661                <1>                popad
+   596 000001A4 7201                <1>                jc .error
+   597 000001A6 C3                  <1>                ret
+   598                              <1> 
+   599                              <1> .error:
+   600 000001A7 E2C9                <1>                loop .retry
+   601                              <1>                ; Fall through to disk_error
+   602                              <1> 
+   603                              <1> ;
+   604                              <1> ; kaboom: write a message and bail out.
+   605                              <1> ;
+   606                              <1>                global kaboom
+   607                              <1> disk_error:
+   608                              <1> kaboom:
+   609 000001A9 31F6                <1>                xor si,si
+   610 000001AB 8ED6                <1>                mov ss,si
+   611 000001AD BC687B              <1>                mov sp,OrigFDCTabPtr    ; Reset stack
+   612 000001B0 8EDE                <1>                mov ds,si               ; Reset data segment
+   613 000001B2 668F067800          <1>                pop dword [fdctab]      ; Restore FDC table
+   614                              <1> .patch:                                        ; When we have full code, intercept here
+   615 000001B7 BE[DA01]            <1>                mov si,bailmsg
+   616 000001BA AC                  <1> .loop:         lodsb
+   617 000001BB 20C0                <1>                and al,al
+   618 000001BD 7409                <1>                 jz .done
+   619 000001BF B40E                <1>                mov ah,0Eh              ; Write to screen as TTY
+   620 000001C1 BB0700              <1>                mov bx,0007h            ; Attribute
+   621 000001C4 CD10                <1>                int 10h
+   622 000001C6 EBF2                <1>                jmp short .loop
+   623                              <1> 
+   624                              <1> .done:
+   625 000001C8 31C0                <1>                xor ax,ax
+   626 000001CA CD16                <1> .again:                int 16h                 ; Wait for keypress
+   627                              <1>                                        ; NB: replaced by int 18h if
+   628                              <1>                                        ; chosen at install time..
+   629 000001CC CD19                <1>                int 19h                 ; And try once more to boot...
+   630 000001CE F4                  <1> .norge:                hlt                     ; If int 19h returned; this is the end
+   631 000001CF EBFD                <1>                jmp short .norge
+   632                              <1> 
+   633                              <1> ;
+   634                              <1> ; INT 13h wrapper function
+   635                              <1> ;
+   636                              <1> xint13:
+   637 000001D1 8A16747B            <1>                mov dl,[DriveNumber]
+   638 000001D5 06                  <1>                push es         ; ES destroyed by INT 13h AH 08h
+   639 000001D6 CD13                <1>                int 13h
+   640 000001D8 07                  <1>                pop es
+   641 000001D9 C3                  <1>                ret
+   642                              <1> 
+   643                              <1> ;
+   644                              <1> ; Error message on failure
+   645                              <1> ;
+   646 000001DA 426F6F74206572726F- <1> bailmsg:       db 'Boot error', 0Dh, 0Ah, 0
+   647 000001E3 720D0A00            <1>
+   648                              <1> 
+   649                              <1>                ; This fails if the boot sector overflowsg
+   650 000001E7 00<rept>            <1>                zb 1F8h-($-$$)
+   651                              <1> 
+   652 000001F8 FE02B23E            <1> bs_magic       dd LDLINUX_MAGIC
+   653 000001FC 1837                <1> bs_link                dw (Sect1Load - bootsec) | BS_MAGIC_VER
+   654 000001FE 55AA                <1> bootsignature  dw 0xAA55
+   655                              <1> 
+   656                              <1> ;
+   657                              <1> ; ===========================================================================
+   658                              <1> ;  End of boot sector
+   659                              <1> ; ===========================================================================
+   660                                  
+   661                                  HEXDATE                equ 1
+   662                                  
+   663                                                 section .init
+   664                                  sector_1:
+   665                                  ldlinux_sys:
+   666                                                 alignz 8
+   667 00000200 FE02B23E                ldlinux_magic  dd LDLINUX_MAGIC
+   668 00000204 FF02B23E                               dd LDLINUX_MAGIC^HEXDATE
+   669                                  
+   670                                  
+   671                                  ldlinux_ent:
+   672                                  
+   673                                  get_geo:               ; DL and ES ready
+   674 00000208 B408                                   mov ah,08h
+   675 0000020A BF0000                                 mov di,0
+   676 0000020D E8C1FF                                 call xint13
+   677                                  write_geo:
+   678 00000210 720E                                   jc .bad_geo
+   679 00000212 BE[4F03]                               mov si,s_chs
+   680 00000215 E84A01                                 call writestr_early
+   681 00000218 E89D00                                 call write_chs
+   682 0000021B E8DC00                                 call crlf
+   683 0000021E EB00                                   jmp short .done
+   684                                  .bad_geo:
+   685                                  .done:
+   686                                  
+   687 00000220 BB0080                                 mov bx,dbuf
+   688                                  get_h1c:               ; 0,1,1
+   689 00000223 B90100                                 mov cx,0001h
+   690 00000226 B601                                   mov dh,01h
+   691 00000228 E86000                                 call getonesec_chs
+   692 0000022B E86D00                                 call write_chs_lba
+   693                                  get_c1c:               ; 1,0,1
+   694 0000022E B90101                                 mov cx,0101h
+   695 00000231 B600                                   mov dh,00h
+   696 00000233 E85500                                 call getonesec_chs
+   697 00000236 E86200                                 call write_chs_lba
+   698                                  
+   699                                  
+   700                                  
+   701                                  ; Do we have EBIOS (EDD)?
+   702                                  ;
+   703                                  edd:
+   704                                  .check:
+   705 00000239 BBAA55                                 mov bx,55AAh
+   706 0000023C B441                                   mov ah,41h              ; EDD existence query
+   707 0000023E E890FF                                 call xint13
+   708 00000241 723F                                   jc .noedd
+   709 00000243 81FB55AA                               cmp bx,0AA55h
+   710 00000247 7539                                   jne .noedd
+   711 00000249 F6C101                                 test cl,1               ; Extended disk access functionality set
+   712 0000024C 7434                                   jz .noedd
+   713                                                 ;
+   714                                                 ; We have EDD support...
+   715                                                 ;
+   716 0000024E BB0080                                 mov bx,dbuf     ; ES should still be safe.
+   717 00000251 6631D2                                 xor edx,edx
+   718 00000254 66C706[4F03]454444-                    mov dword [s_chs],m_EDD_SP
+   719 0000025C 20                 
+   720                                  .get_lba63:
+   721 0000025D 66B83F000000                           mov eax,63      ; Same length as mov al,64; movzx eax,al
+   722 00000263 E8E1FE                                 call getonesec_ebios
+   723 00000266 721A                                   jc .bad_edd     ;read error
+   724 00000268 E87200                                 call write_edd_lba
+   725                                  .get_lba16065:
+   726 0000026B 66B8C13E0000                           mov eax,16065
+   727 00000271 E8D3FE                                 call getonesec_ebios
+   728 00000274 720C                                   jc .bad_edd     ;read error
+   729 00000276 E86400                                 call write_edd_lba
+   730                                  .good_edd:
+   731 00000279 66C706[5603]454444-                    mov dword [s_type],m_EDD0
+   732 00000281 00                 
+   733                                  .bad_edd:
+   734                                  .noedd:
+   735                                  .end:
+   736                                  
+   737                                  write_final_type:
+   738 00000282 BE[5403]                               mov si,s_typespec
+   739 00000285 E8DA00                                 call writestr_early
+   740 00000288 E91EFF                                 jmp kaboom
+   741                                  
+   742                                  ;
+   743                                  ; getonesec_chs:
+   744                                  ;
+   745                                  ; CX,DH specifies CHS address
+   746                                  ;
+   747                                  getonesec_chs: ; We could use an xchg and get a loop
+   748                                  ;              mov cx,retry_count
+   749                                  .retry:
+   750 0000028B 6660                                   pushad
+   751 0000028D B80102                                 mov ax,0201h            ; Read one sector
+   752 00000290 E83EFF                                 call xint13
+   753 00000293 6661                                   popad
+   754 00000295 7201                                   jc .error
+   755 00000297 C3                                     ret
+   756                                  
+   757                                  .error:
+   758                                  ;              loop .retry
+   759                                                 ; Fall through to disk_error
+   760 00000298 E90EFF                                 jmp disk_error
+   761                                  
+   762                                  %include "geodsplib.inc"
+   763                              <1> ; -----------------------------------------------------------------------
+   764                              <1> ;
+   765                              <1> ;   Copyright 2010 Gene Cumm
+   766                              <1> ;
+   767                              <1> ;   Portions from diskstart.inc:
+   768                              <1> ;   Copyright 1994-2009 H. Peter Anvin - All Rights Reserved
+   769                              <1> ;   Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin
+   770                              <1> ;
+   771                              <1> ;   This program is free software; you can redistribute it and/or modify
+   772                              <1> ;   it under the terms of the GNU General Public License as published by
+   773                              <1> ;   the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+   774                              <1> ;   Boston MA 02110-1301, USA; either version 2 of the License, or
+   775                              <1> ;   (at your option) any later version; incorporated herein by reference.
+   776                              <1> ;
+   777                              <1> ; -----------------------------------------------------------------------
+   778                              <1> 
+   779                              <1> ;
+   780                              <1> ; geodsplib.inc
+   781                              <1> ;
+   782                              <1> ; Library file for geodsp*.asm
+   783                              <1> ;
+   784                              <1> 
+   785                              <1>                ; ES:BX points to the buffer with address
+   786                              <1>                ; DX,CX as they should be for INT13h,AH=02
+   787                              <1>                ; For now assume C<256
+   788                              <1> write_chs_lba:
+   789 0000029B 6660                <1>                pushad
+   790 0000029D BE[4E03]            <1>                mov si,s_atchs
+   791 000002A0 E8BF00              <1>                call writestr_early
+   792 000002A3 E81200              <1>                call write_chs
+   793 000002A6 B03A                <1>                mov al,':'
+   794 000002A8 E85800              <1>                call writechr
+   795 000002AB 26668B07            <1>                mov eax,[es:bx]
+   796 000002AF E87700              <1>                call writehex8
+   797 000002B2 E84500              <1>                call crlf
+   798 000002B5 6661                <1>                popad
+   799 000002B7 C3                  <1>                ret
+   800                              <1> 
+   801                              <1>                ; DX,CX as they should be for INT13h,AH=02
+   802                              <1>                ; For now assume C<256
+   803                              <1> write_chs:
+   804 000002B8 6660                <1>                pushad
+   805 000002BA 88E8                <1>                mov al,ch
+   806 000002BC 88CC                <1>                mov ah,cl
+   807 000002BE C0EC06              <1>                shr ah,6
+   808 000002C1 E85800              <1>                call writehex4
+   809 000002C4 B02C                <1>                mov al,','
+   810 000002C6 E83A00              <1>                call writechr
+   811 000002C9 88F0                <1>                mov al,dh
+   812 000002CB E84100              <1>                call writehex2
+   813 000002CE B02C                <1>                mov al,','
+   814 000002D0 E83000              <1>                call writechr
+   815 000002D3 88C8                <1>                mov al,cl
+   816 000002D5 243F                <1>                and al,3Fh
+   817 000002D7 E83500              <1>                call writehex2
+   818 000002DA 6661                <1>                popad
+   819 000002DC C3                  <1>                ret
+   820                              <1> 
+   821                              <1> write_edd_lba:
+   822 000002DD 6660                <1>                pushad
+   823 000002DF BE[4E03]            <1>                mov si,s_atchs
+   824 000002E2 E87D00              <1>                call writestr_early
+   825 000002E5 E84100              <1>                call writehex8
+   826 000002E8 B03A                <1>                mov al,':'
+   827 000002EA E81600              <1>                call writechr
+   828 000002ED 26668B07            <1>                mov eax,[es:bx]
+   829 000002F1 E83500              <1>                call writehex8
+   830 000002F4 E80300              <1>                call crlf
+   831 000002F7 6661                <1>                popad
+   832 000002F9 C3                  <1>                ret
+   833                              <1> 
+   834                              <1> 
+   835                              <1> crlf:
+   836 000002FA 56                  <1>                push si
+   837 000002FB BE[5F03]            <1>                mov si,s_crlf
+   838 000002FE E86100              <1>                call writestr_early
+   839 00000301 5E                  <1>                pop si
+   840 00000302 C3                  <1>                ret
+   841                              <1> 
+   842                              <1> writechr:
+   843                              <1> writechr_early:
+   844 00000303 6660                <1>                pushad
+   845 00000305 B40E                <1>                mov ah,0Eh              ; Write to screen as TTY
+   846 00000307 BB0700              <1>                mov bx,0007h            ; Attribute
+   847 0000030A CD10                <1>                int 10h
+   848 0000030C 6661                <1>                popad
+   849 0000030E C3                  <1>                ret
+   850                              <1> 
+   851                              <1> %include "writehex.inc"
+   852                              <2> ;; -----------------------------------------------------------------------
+   853                              <2> ;;
+   854                              <2> ;;   Copyright 1994-2008 H. Peter Anvin - All Rights Reserved
+   855                              <2> ;;
+   856                              <2> ;;   This program is free software; you can redistribute it and/or modify
+   857                              <2> ;;   it under the terms of the GNU General Public License as published by
+   858                              <2> ;;   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
+   859                              <2> ;;   Boston MA 02111-1307, USA; either version 2 of the License, or
+   860                              <2> ;;   (at your option) any later version; incorporated herein by reference.
+   861                              <2> ;;
+   862                              <2> ;; -----------------------------------------------------------------------
+   863                              <2> 
+   864                              <2> ;;
+   865                              <2> ;; writehex.inc
+   866                              <2> ;;
+   867                              <2> ;; Write hexadecimal numbers to the console
+   868                              <2> ;;
+   869                              <2> 
+   870                              <2> ;
+   871                              <2> ; writehex[248]: Write a hex number in (AL, AX, EAX) to the console
+   872                              <2> ;
+   873                              <2> writehex2:
+   874 0000030F 669C                <2>                pushfd
+   875 00000311 6660                <2>                pushad
+   876 00000313 66C1C018            <2>                rol eax,24
+   877 00000317 B90200              <2>                mov cx,2
+   878 0000031A EB14                <2>                jmp short writehex_common
+   879                              <2> writehex4:
+   880 0000031C 669C                <2>                pushfd
+   881 0000031E 6660                <2>                pushad
+   882 00000320 66C1C010            <2>                rol eax,16
+   883 00000324 B90400              <2>                mov cx,4
+   884 00000327 EB07                <2>                jmp short writehex_common
+   885                              <2> writehex8:
+   886 00000329 669C                <2>                pushfd
+   887 0000032B 6660                <2>                pushad
+   888 0000032D B90800              <2>                mov cx,8
+   889                              <2> writehex_common:
+   890 00000330 66C1C004            <2> .loop:         rol eax,4
+   891 00000334 6650                <2>                push eax
+   892 00000336 240F                <2>                and al,0Fh
+   893 00000338 3C0A                <2>                cmp al,10
+   894 0000033A 7304                <2>                jae .high
+   895 0000033C 0430                <2> .low:          add al,'0'
+   896 0000033E EB02                <2>                jmp short .ischar
+   897 00000340 0437                <2> .high:         add al,'A'-10
+   898 00000342 E8BEFF              <2> .ischar:       call writechr
+   899 00000345 6658                <2>                pop eax
+   900 00000347 E2E7                <2>                loop .loop
+   901 00000349 6661                <2>                popad
+   902 0000034B 669D                <2>                popfd
+   903 0000034D C3                  <2>                ret
+   904                              <1> 
+   905 0000034E 40                  <1> s_atchs:       db '@'
+   906 0000034F 434853              <1> s_chs:         db 'CHS'
+   907 00000352 2000                <1> s_space:       db ' ', 0
+   908 00000354 443D                <1> s_typespec:    db 'D='
+   909 00000356 43485300            <1> s_type:                db 'CHS', 0
+   910 0000035A 0D0A656E64          <1> s_end:         db 0Dh, 0Ah, 'end'
+   911 0000035F 0D0A00              <1> s_crlf:                db 0Dh, 0Ah, 0
+   912                              <1> 
+   913                              <1> ; This indicates the general format of the last few bytes in the boot sector
+   914                              <1> BS_MAGIC_VER   equ 0x1b << 9
+   915                                  
+   916                                  ;
+   917                                  ;
+   918                                  ; writestr_early: write a null-terminated string to the console
+   919                                  ;          This assumes we're on page 0.  This is only used for early
+   920                                  ;           messages, so it should be OK.
+   921                                  ;
+   922                                  writestr_early:
+   923 00000362 6660                                   pushad
+   924 00000364 AC                      .loop:         lodsb
+   925 00000365 20C0                                   and al,al
+   926 00000367 7409                                    jz .return
+   927 00000369 B40E                                   mov ah,0Eh              ; Write to screen as TTY
+   928 0000036B BB0700                                 mov bx,0007h            ; Attribute
+   929 0000036E CD10                                   int 10h
+   930 00000370 EBF2                                   jmp short .loop
+   931 00000372 6661                    .return:       popad
+   932 00000374 C3                                     ret
+   933                                  
+   934 00000375 00000000<rept>          SuperInfo:     zd 32                   ; The first 16 bytes expanded 8 times
+   935                                  
+   936                                                 ; This fails if the sector overflowsg
+   937 000003F5 00<rept>                               zb 400h-($-$$)
+   938                                  end:
+   939                                  
+   940                                                 absolute 4*1Eh
+   941                                  fdctab         equ $
+   942 00000078 <res 00000002>          fdctab1                resw 1
+   943 0000007A <res 00000002>          fdctab2                resw 1
diff --git a/diag/geodsp/mk-lba-img b/diag/geodsp/mk-lba-img
new file mode 100755 (executable)
index 0000000..8d7864c
Binary files /dev/null and b/diag/geodsp/mk-lba-img differ
index eb1c339..795de1a 100644 (file)
 
 #define NUM_SECT (256*63+1)
 #define BPS (512)
-#define SECT_INT (BPS / sizeof(unsigned int))
+#define SECT_INT (512 / sizeof(int))
 
 typedef unsigned char uint8_t;
 typedef unsigned int uint32_t;
 
-const char DEF_FN[] = "-";
+const char DEF_FN[] = "lba.img";
 
 int main(int argc, char *argv[])
 {
-       int i, rv = 0, one = 0;
-       unsigned int lba, b[SECT_INT];
-       int len;
+       int i, j, b[SECT_INT], rv = 0, one = 0;
        FILE *f;
        uint8_t tt = 0;
        const char *fn;
@@ -55,40 +53,23 @@ int main(int argc, char *argv[])
                fn = DEF_FN;
        }
 
-       if (!strcmp(fn, "-"))
-               f = stdout;
-       else
-               f = fopen(fn, "w");
+       f = fopen(fn, "w");
 
-       if (!f) {
-               fprintf(stderr, "%s: %s: unable to open for writing: %s\n",
-                       argv[0], fn, strerror(errno));
-               return 1;
-       }
-
-       lba = 0;
-       while ((len = fread(b, 1, BPS, stdin))) {
-               if (len < BPS)
-                       memset((char *)b + len, 0, BPS - len);
-               fwrite(b, 1, BPS, f);
-               lba++;
-       }
-
-       memset(b, 0, sizeof b);
-
-       while (lba < NUM_SECT) {
-               if (one) {
-                       b[0] = lba;
-               } else {
-                       for (i = 0; i < SECT_INT; i++)
-                               b[i] = lba;
+       if (f) {
+               for (i = 0; i < NUM_SECT; i++) {
+                       if (one) {
+                               b[0] = i;
+                       } else {
+                               for (j = 0; j < (512 / sizeof(int)); j++) {
+                                       b[j] = i;
+                               }
+                       }
+                       fwrite(b, 512, 1, f);
                }
-               fwrite(b, 1, BPS, f);
-               lba++;
-       }
-
-       if (f != stdout)
                fclose(f);
-
+       } else {
+               puts("Unable to open for writing");
+               rv = 1;
+       }
        return rv;
 }
index 79ff9f0..a94253a 100644 (file)
@@ -17,8 +17,7 @@
 
 topdir = ../..
 mbrdir = $(topdir)/mbr
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/embedded.mk
+include $(topdir)/MCONFIG.embedded
 
 all:   handoff.bin
 
index 807c631..eca2a97 100644 (file)
@@ -100,3 +100,34 @@ The ISO 9660 filesystem is encapsulated in a partition (which starts
 at offset zero, which may confuse some systems.)  This makes it
 possible for the operating system, once booted, to use the remainder
 of the device for persistent storage by creating a second partition.
+
+
+      ++++ BOOTING DOS (OR OTHER SIMILAR OPERATING SYSTEMS) ++++
+
+WARNING: This feature depends on BIOS functionality which is
+apparently broken in a very large number of BIOSes.  Therefore, this
+may not work on any particular system.  No workaround is possible; if
+you find that it doesn't work please complain to your vendor and
+indicate that "BIOS INT 13h AX=4C00h fails."
+
+To boot DOS, or other real-mode operating systems (protected-mode
+operating systems may or may not work correctly), using ISOLINUX, you
+need to prepare a disk image (usually a floppy image, but a hard disk
+image can be used on *most* systems) with the relevant operating
+system.  This file should be included on the CD-ROM in the /isolinux
+directory, and have a .img extension.  The ".img" extension does not
+have to be specified on the command line, but has to be explicitly
+specified if used in a "kernel" statement in isolinux.cfg.
+
+For a floppy image, the size of the image should be exactly one of the
+following:
+
+       1,228,800 bytes         - For a 1200K floppy image
+       1,474,560 bytes         - For a 1440K floppy image
+       2,949,120 bytes         - For a 2880K floppy image
+
+Any other size is assumed to be a hard disk image.  In order to work
+on as many systems as possible, a hard disk image should have exactly
+one partition, marked active, that covers the entire size of the disk
+image file.  Even so, hard disk images are not supported on all
+BIOSes.
diff --git a/doc/logo/syslinux-100.png b/doc/logo/syslinux-100.png
deleted file mode 100644 (file)
index 647635a..0000000
Binary files a/doc/logo/syslinux-100.png and /dev/null differ
index 5e5fc63..2667de8 100644 (file)
@@ -15,8 +15,7 @@
 ##
 
 topdir = ..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/embedded.mk
+include $(topdir)/MCONFIG.embedded
 
 CFLAGS += -D__MSDOS__
 # CFLAGS  += -DDEBUG
index 49f62ef..fdf09bd 100755 (executable)
Binary files a/dos/syslinux.com and b/dos/syslinux.com differ
index 5746e86..fc10ff9 100644 (file)
@@ -2,8 +2,7 @@
 # OpenWatcom compile and link utility
 #
 topdir = ..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/syslinux.mk
+include $(topdir)/MCONFIG
 
 WCL    = wcl
 WCLOPT = -6 -osx -mt -bt=DOS -l=COM
index 12213d8..83cf1a5 100644 (file)
 ##
 
 topdir = ..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/syslinux.mk
+include $(topdir)/MCONFIG
 
 OPTFLAGS = -g -Os
 INCLUDES = -I. -I.. -I../libinstaller
 CFLAGS  = $(GCCWARN) -Wno-sign-compare -D_FILE_OFFSET_BITS=64 \
           $(OPTFLAGS) $(INCLUDES)
-LDFLAGS         = 
+LDFLAGS         = # -s
 
 SRCS     = main.c \
           ../libinstaller/syslxmod.c \
@@ -54,9 +53,6 @@ installer: extlinux
 extlinux: $(OBJS)
        $(CC) $(LDFLAGS) -o $@ $^
 
-strip:
-       $(STRIP) extlinux
-
 %.o: %.c
        $(CC) $(UMAKEDEPS) $(CFLAGS) -c -o $@ $<
 %.i: %.c
index be0c24e..39a861a 100644 (file)
@@ -1,9 +1,6 @@
 #ifndef _BTRFS_H_
 #define _BTRFS_H_
 
-#include <asm/types.h>
-#include <linux/ioctl.h>
-
 #define BTRFS_SUPER_MAGIC 0x9123683E
 #define BTRFS_SUPER_INFO_OFFSET (64 * 1024)
 #define BTRFS_SUPER_INFO_SIZE 4096
@@ -11,40 +8,6 @@
 #define BTRFS_CSUM_SIZE 32
 #define BTRFS_FSID_SIZE 16
 
-typedef __u64 u64;
-typedef __u32 u32;
-typedef __u16 u16;
-typedef __u8 u8;
-typedef u64 __le64;
-typedef u16 __le16;
-
-#define BTRFS_ROOT_BACKREF_KEY  144
-#define BTRFS_ROOT_TREE_DIR_OBJECTID 6ULL
-#define BTRFS_DIR_ITEM_KEY      84
-
-/*
- *  * this is used for both forward and backward root refs
- *   */
-struct btrfs_root_ref {
-        __le64 dirid;
-        __le64 sequence;
-        __le16 name_len;
-} __attribute__ ((__packed__));
-
-struct btrfs_disk_key {
-        __le64 objectid;
-        u8 type;
-        __le64 offset;
-} __attribute__ ((__packed__));
-
-struct btrfs_dir_item {
-        struct btrfs_disk_key location;
-        __le64 transid;
-        __le16 data_len;
-        __le16 name_len;
-        u8 type;
-} __attribute__ ((__packed__));
-
 struct btrfs_super_block {
        unsigned char csum[BTRFS_CSUM_SIZE];
        /* the first 3 fields must match struct btrfs_header */
@@ -56,72 +19,4 @@ struct btrfs_super_block {
        u64 magic;
 } __attribute__ ((__packed__));
 
-
-#define BTRFS_IOCTL_MAGIC 0x94
-#define BTRFS_VOL_NAME_MAX 255
-#define BTRFS_PATH_NAME_MAX 4087
-
-struct btrfs_ioctl_vol_args {
-       __s64 fd;
-       char name[BTRFS_PATH_NAME_MAX + 1];
-};
-
-struct btrfs_ioctl_search_key {
-       /* which root are we searching.  0 is the tree of tree roots */
-       __u64 tree_id;
-
-       /* keys returned will be >= min and <= max */
-       __u64 min_objectid;
-       __u64 max_objectid;
-
-       /* keys returned will be >= min and <= max */
-       __u64 min_offset;
-       __u64 max_offset;
-
-       /* max and min transids to search for */
-       __u64 min_transid;
-       __u64 max_transid;
-
-       /* keys returned will be >= min and <= max */
-       __u32 min_type;
-       __u32 max_type;
-
-       /*
-        * how many items did userland ask for, and how many are we
-        * returning
-        */
-       __u32 nr_items;
-
-       /* align to 64 bits */
-       __u32 unused;
-
-       /* some extra for later */
-       __u64 unused1;
-       __u64 unused2;
-       __u64 unused3;
-       __u64 unused4;
-};
-
-struct btrfs_ioctl_search_header {
-       __u64 transid;
-       __u64 objectid;
-       __u64 offset;
-       __u32 type;
-       __u32 len;
-} __attribute__((may_alias));
-
-#define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
-/*
- * the buf is an array of search headers where
- * each header is followed by the actual item
- * the type field is expanded to 32 bits for alignment
- */
-struct btrfs_ioctl_search_args {
-       struct btrfs_ioctl_search_key key;
-       char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
-};
-
-#define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
-                                   struct btrfs_ioctl_search_args)
-
 #endif
index dbbb8fd..9e07d16 100755 (executable)
Binary files a/extlinux/extlinux and b/extlinux/extlinux differ
index e574051..e5212a9 100755 (executable)
 #define  _GNU_SOURCE           /* Enable everything */
 #include <inttypes.h>
 /* This is needed to deal with the kernel headers imported into glibc 3.3.3. */
+typedef uint64_t u64;
 #include <alloca.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <stdio.h>
 #include <unistd.h>
-#include <dirent.h>
 #ifndef __KLIBC__
 #include <mntent.h>
 #endif
@@ -65,6 +65,7 @@
    boot image, the boot sector is from 0~512, the boot image starts after */
 #define BTRFS_BOOTSECT_AREA    65536
 #define BTRFS_EXTLINUX_OFFSET  SECTOR_SIZE
+#define BTRFS_SUBVOL_OPT "subvol="
 #define BTRFS_SUBVOL_MAX 256   /* By btrfs specification */
 static char subvol[BTRFS_SUBVOL_MAX];
 
@@ -111,7 +112,7 @@ static int sysfs_get_offset(int devfd, unsigned long *start)
 
     if ((size_t)snprintf(sysfs_name, sizeof sysfs_name,
                         "/sys/dev/block/%u:%u/start",
-                        major(st.st_rdev), minor(st.st_rdev))
+                        major(st.st_dev), minor(st.st_dev))
        >= sizeof sysfs_name)
        return -1;
 
@@ -152,7 +153,7 @@ int get_geometry(int devfd, uint64_t totalbytes, struct hd_geometry *geo)
 
     memset(geo, 0, sizeof *geo);
 
-    if (!ioctl(devfd, HDIO_GETGEO, geo)) {
+    if (!ioctl(devfd, HDIO_GETGEO, &geo)) {
        goto ok;
     } else if (!ioctl(devfd, FDGETPRM, &fd_str)) {
        geo->heads = fd_str.head;
@@ -346,7 +347,9 @@ int install_bootblock(int fd, const char *device)
                perror("reading fat superblock");
                return 1;
        }
-       if (fat_check_sb_fields(&sb3))
+       if (sb3.bsResSectors && sb3.bsFATs &&
+           (strstr(sb3.bs16.FileSysType, "FAT") ||
+            strstr(sb3.bs32.FileSysType, "FAT")))
                ok = true;
     }
     if (!ok) {
@@ -491,267 +494,6 @@ int btrfs_install_file(const char *path, int devfd, struct stat *rst)
     return 0;
 }
 
-/*
- *  * test if path is a subvolume:
- *   * this function return
- *    * 0-> path exists but it is not a subvolume
- *     * 1-> path exists and it is  a subvolume
- *      * -1 -> path is unaccessible
- *       */
-static int test_issubvolume(char *path)
-{
-
-        struct stat     st;
-        int             res;
-
-        res = stat(path, &st);
-        if(res < 0 )
-                return -1;
-
-        return (st.st_ino == 256) && S_ISDIR(st.st_mode);
-
-}
-
-/*
- * Get file handle for a file or dir
- */
-static int open_file_or_dir(const char *fname)
-{
-        int ret;
-        struct stat st;
-        DIR *dirstream;
-        int fd;
-
-        ret = stat(fname, &st);
-        if (ret < 0) {
-                return -1;
-        }
-        if (S_ISDIR(st.st_mode)) {
-                dirstream = opendir(fname);
-                if (!dirstream) {
-                        return -2;
-                }
-                fd = dirfd(dirstream);
-        } else {
-                fd = open(fname, O_RDWR);
-        }
-        if (fd < 0) {
-                return -3;
-        }
-        return fd;
-}
-
-/*
- * Get the default subvolume of a btrfs filesystem
- *   rootdir: btrfs root dir
- *   subvol:  this function will save the default subvolume name here
- */
-static char * get_default_subvol(char * rootdir, char * subvol)
-{
-    struct btrfs_ioctl_search_args args;
-    struct btrfs_ioctl_search_key *sk = &args.key;
-    struct btrfs_ioctl_search_header *sh;
-    int ret, i;
-    int fd;
-    struct btrfs_root_ref *ref;
-    struct btrfs_dir_item *dir_item;
-    unsigned long off = 0;
-    int name_len;
-    char *name;
-    char dirname[4096];
-    u64 defaultsubvolid = 0;
-
-    ret = test_issubvolume(rootdir);
-    if (ret == 1) {
-        fd = open_file_or_dir(rootdir);
-        if (fd < 0) {
-            fprintf(stderr, "ERROR: failed to open %s\n", rootdir);
-        }
-        ret = fd;
-    }
-    if (ret <= 0) {
-        subvol[0] = '\0';
-        return NULL;
-    }
-
-    memset(&args, 0, sizeof(args));
-
-   /* search in the tree of tree roots */
-   sk->tree_id = 1;
-
-   /*
-    * set the min and max to backref keys.  The search will
-    * only send back this type of key now.
-    */
-   sk->max_type = BTRFS_DIR_ITEM_KEY;
-   sk->min_type = BTRFS_DIR_ITEM_KEY;
-
-   /*
-    * set all the other params to the max, we'll take any objectid
-    * and any trans
-    */
-   sk->min_objectid = BTRFS_ROOT_TREE_DIR_OBJECTID;
-   sk->max_objectid = BTRFS_ROOT_TREE_DIR_OBJECTID;
-
-   sk->max_offset = (u64)-1;
-   sk->min_offset = 0;
-   sk->max_transid = (u64)-1;
-
-   /* just a big number, doesn't matter much */
-   sk->nr_items = 4096;
-
-   while(1) {
-       ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args);
-       if (ret < 0) {
-           fprintf(stderr, "ERROR: can't perform the search\n");
-           subvol[0] = '\0';
-           return NULL;
-       }
-       /* the ioctl returns the number of item it found in nr_items */
-       if (sk->nr_items == 0) {
-           break;
-       }
-
-       off = 0;
-
-       /*
-        * for each item, pull the key out of the header and then
-        * read the root_ref item it contains
-        */
-       for (i = 0; i < sk->nr_items; i++) {
-           sh = (struct btrfs_ioctl_search_header *)(args.buf + off);
-           off += sizeof(*sh);
-           if (sh->type == BTRFS_DIR_ITEM_KEY) {
-               dir_item = (struct btrfs_dir_item *)(args.buf + off);
-               name_len = dir_item->name_len;
-               name = (char *)(dir_item + 1);
-
-
-               /*add_root(&root_lookup, sh->objectid, sh->offset,
-                        dir_id, name, name_len);*/
-               strncpy(dirname, name, name_len);
-               dirname[name_len] = '\0';
-               if (strcmp(dirname, "default") == 0) {
-                   defaultsubvolid = dir_item->location.objectid;
-                   break;
-               }
-           }
-           off += sh->len;
-
-           /*
-            * record the mins in sk so we can make sure the
-            * next search doesn't repeat this root
-            */
-           sk->min_objectid = sh->objectid;
-           sk->min_type = sh->type;
-           sk->max_type = sh->type;
-           sk->min_offset = sh->offset;
-       }
-       if (defaultsubvolid != 0)
-           break;
-       sk->nr_items = 4096;
-       /* this iteration is done, step forward one root for the next
-        * ioctl
-        */
-       if (sk->min_objectid < (u64)-1) {
-           sk->min_objectid = BTRFS_ROOT_TREE_DIR_OBJECTID;
-           sk->max_objectid = BTRFS_ROOT_TREE_DIR_OBJECTID;
-           sk->max_type = BTRFS_ROOT_BACKREF_KEY;
-           sk->min_type = BTRFS_ROOT_BACKREF_KEY;
-           sk->min_offset = 0;
-       } else
-           break;
-   }
-
-   if (defaultsubvolid == 0) {
-       subvol[0] = '\0';
-       return NULL;
-   }
-
-   memset(&args, 0, sizeof(args));
-
-   /* search in the tree of tree roots */
-   sk->tree_id = 1;
-
-   /*
-    * set the min and max to backref keys.  The search will
-    * only send back this type of key now.
-    */
-   sk->max_type = BTRFS_ROOT_BACKREF_KEY;
-   sk->min_type = BTRFS_ROOT_BACKREF_KEY;
-
-   /*
-    * set all the other params to the max, we'll take any objectid
-    * and any trans
-    */
-   sk->max_objectid = (u64)-1;
-   sk->max_offset = (u64)-1;
-   sk->max_transid = (u64)-1;
-
-   /* just a big number, doesn't matter much */
-   sk->nr_items = 4096;
-
-   while(1) {
-       ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args);
-       if (ret < 0) {
-           fprintf(stderr, "ERROR: can't perform the search\n");
-           subvol[0] = '\0';
-           return NULL;
-       }
-       /* the ioctl returns the number of item it found in nr_items */
-       if (sk->nr_items == 0)
-           break;
-
-       off = 0;
-
-       /*
-        * for each item, pull the key out of the header and then
-        * read the root_ref item it contains
-        */
-       for (i = 0; i < sk->nr_items; i++) {
-           sh = (struct btrfs_ioctl_search_header *)(args.buf + off);
-           off += sizeof(*sh);
-           if (sh->type == BTRFS_ROOT_BACKREF_KEY) {
-               ref = (struct btrfs_root_ref *)(args.buf + off);
-               name_len = ref->name_len;
-               name = (char *)(ref + 1);
-
-               if (sh->objectid == defaultsubvolid) {
-                   strncpy(subvol, name, name_len);
-                   subvol[name_len] = '\0';
-                   dprintf("The default subvolume: %s, ID: %llu\n",
-                          subvol, sh->objectid);
-                   break;
-               }
-
-           }
-
-           off += sh->len;
-
-           /*
-            * record the mins in sk so we can make sure the
-            * next search doesn't repeat this root
-            */
-           sk->min_objectid = sh->objectid;
-           sk->min_type = sh->type;
-           sk->min_offset = sh->offset;
-       }
-       if (subvol[0] != '\0')
-           break;
-       sk->nr_items = 4096;
-       /* this iteration is done, step forward one root for the next
-        * ioctl
-        */
-       if (sk->min_objectid < (u64)-1) {
-           sk->min_objectid++;
-           sk->min_type = BTRFS_ROOT_BACKREF_KEY;
-           sk->min_offset = 0;
-       } else
-           break;
-   }
-   return subvol;
-}
-
 int install_file(const char *path, int devfd, struct stat *rst)
 {
        if (fs_type == EXT2 || fs_type == VFAT)
@@ -806,9 +548,19 @@ static const char *find_device(const char *mtab_file, dev_t dev)
                if (!strcmp(mnt->mnt_type, "btrfs") &&
                    !stat(mnt->mnt_dir, &dst) &&
                    dst.st_dev == dev) {
-                       if (!subvol[0]) {
-                           get_default_subvol(mnt->mnt_dir, subvol);
-                        }
+                   char *opt = strstr(mnt->mnt_opts, BTRFS_SUBVOL_OPT);
+
+                   if (opt) {
+                       if (!subvol[0]) {
+                           char *tmp;
+
+                           strcpy(subvol, opt + sizeof(BTRFS_SUBVOL_OPT) - 1);
+                           tmp = strchr(subvol, 32);
+                           if (tmp)
+                               *tmp = '\0';
+                       }
+                       break; /* should break and let upper layer try again */
+                   } else
                        done = true;
                }
                break;
@@ -873,10 +625,24 @@ static const char *get_devname(const char *path)
 
 #else
 
-    devname = find_device("/proc/mounts", st.st_dev);
+    /* check /etc/mtab first, since btrfs subvol info is only in here */
+    devname = find_device("/etc/mtab", st.st_dev);
+    if (subvol[0] && !devname) { /* we just find it is a btrfs subvol */
+       char parent[256];
+       char *tmp;
+
+       strcpy(parent, path);
+       tmp = strrchr(parent, '/');
+       if (tmp) {
+           *tmp = '\0';
+           fprintf(stderr, "%s is subvol, try its parent dir %s\n", path, parent);
+           devname = get_devname(parent);
+       } else
+           devname = NULL;
+    }
     if (!devname) {
-       /* Didn't find it in /proc/mounts, try /etc/mtab */
-        devname = find_device("/etc/mtab", st.st_dev);
+       /* Didn't find it in /etc/mtab, try /proc/mounts */
+       devname = find_device("/proc/mounts", st.st_dev);
     }
     if (!devname) {
        fprintf(stderr, "%s: cannot find device for path %s\n", program, path);
index 3384b20..8cc5cc3 100644 (file)
Binary files a/gpxe/gpxelinux.0 and b/gpxe/gpxelinux.0 differ
index 6999d4b..cfa625f 100644 (file)
Binary files a/gpxe/gpxelinuxk.0 and b/gpxe/gpxelinuxk.0 differ
index e67a468..2beb931 100644 (file)
@@ -26,5 +26,3 @@ clean: tidy
 dist: tidy
 
 spotless: clean
-
-strip:
index 7c9da51..80c40f7 100644 (file)
@@ -247,13 +247,4 @@ struct boot_sector {
 #define bsCodeLen   (offsetof(struct boot_sector, bsSignature) - \
                     offsetof(struct boot_sector, bsCode))
 
-static inline int fat_check_sb_fields(const struct boot_sector *sb)
-{
-    return sb->bsResSectors && sb->bsFATs &&
-            (!memcmp(sb->bs16.FileSysType, "FAT12   ", 8) ||
-             !memcmp(sb->bs16.FileSysType, "FAT16   ", 8) ||
-             !memcmp(sb->bs16.FileSysType, "FAT     ", 8) ||
-             !memcmp(sb->bs32.FileSysType, "FAT32   ", 8));
-}
-
 #endif /* SYSLXINT_H */
index 8847b73..a68f19f 100644 (file)
 static void generate_extents(struct syslinux_extent *ex, int nptrs,
                             const sector_t *sectp, int nsect)
 {
-    uint32_t addr = 0x8000;    /* ldlinux.sys starts loading here */
+    uint32_t addr = 0x7c00 + 2*SECTOR_SIZE;
     uint32_t base;
     sector_t sect, lba;
     unsigned int len;
 
-    base = addr;
-    len = lba = 0;
+    len = lba = base = 0;
 
     memset(ex, 0, nptrs * sizeof *ex);
 
     while (nsect) {
        sect = *sectp++;
 
-       if (len) {
-           uint32_t xbytes = (len + 1) * SECTOR_SIZE;
-
-           if (sect == lba + len && xbytes < 65536 &&
-               ((addr ^ (base + xbytes - 1)) & 0xffff0000) == 0) {
-               /* We can add to the current extent */
-               len++;
-               goto next;
-           }
+       if (len && sect == lba + len &&
+           ((addr ^ (base + len * SECTOR_SIZE)) & 0xffff0000) == 0) {
+           /* We can add to the current extent */
+           len++;
+           goto next;
+       }
 
+       if (len) {
            set_64_sl(&ex->lba, lba);
            set_16_sl(&ex->len, len);
            ex++;
index 82bf111..ffe2272 100644 (file)
 ##
 
 topdir = ..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/syslinux.mk
+include $(topdir)/MCONFIG
 
-OPTFLAGS = -g -Os
+OPTFLAGS = -g -O0 -Dalloca=malloc
 INCLUDES = -I. -I.. -I../libinstaller
 CFLAGS  = $(GCCWARN) -D_FILE_OFFSET_BITS=64 $(OPTFLAGS) $(INCLUDES)
 LDFLAGS         = 
@@ -57,9 +56,6 @@ syslinux: $(OBJS)
 syslinux-nomtools: syslinux
        ln -f $< $@
 
-strip:
-       $(STRIP) syslinux syslinux-nomtools
-
 %.o: %.c
        $(CC) $(UMAKEDEPS) $(CFLAGS) -c -o $@ $<
 %.i: %.c
index 1d5016f..b3be75e 100755 (executable)
Binary files a/linux/syslinux and b/linux/syslinux differ
index 1d5016f..b3be75e 100755 (executable)
Binary files a/linux/syslinux-nomtools and b/linux/syslinux-nomtools differ
index cf8f985..d88279d 100644 (file)
@@ -11,8 +11,7 @@
 ## -----------------------------------------------------------------------
 
 topdir = ..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/build.mk
+include $(topdir)/MCONFIG.build
 
 INCLUDES += -I./include
 
index 993bb10..c3eb97a 100644 (file)
@@ -16,8 +16,7 @@
 #
 
 topdir = ..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/embedded.mk
+include $(topdir)/MCONFIG.embedded
 
 all:   mbr.bin   altmbr.bin   gptmbr.bin   isohdpfx.bin   isohdppx.bin \
        mbr_c.bin altmbr_c.bin gptmbr_c.bin isohdpfx_c.bin isohdppx_c.bin \
index 17e1efe..2784fb8 100644 (file)
@@ -66,37 +66,6 @@ bootsec:
        .globl  _start
 _start:
        .byte   0x33, 0xed      /* xorw %bp, %bp */
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       nop
-       .byte   0x33, 0xed      /* xorw %bp, %bp */
        cli
        movw    %bp, %ss
        movw    $stack, %sp
index 8937173..fa46fb4 100644 (file)
Binary files a/mbr/isohdpfx.bin and b/mbr/isohdpfx.bin differ
index 56f300a..128b485 100644 (file)
Binary files a/mbr/isohdpfx_c.bin and b/mbr/isohdpfx_c.bin differ
index 3c94aca..b28cbf0 100644 (file)
Binary files a/mbr/isohdpfx_f.bin and b/mbr/isohdpfx_f.bin differ
index fd063f6..7f3ab12 100644 (file)
Binary files a/mbr/isohdppx.bin and b/mbr/isohdppx.bin differ
index d5473df..6655c86 100644 (file)
Binary files a/mbr/isohdppx_c.bin and b/mbr/isohdppx_c.bin differ
index 0d9dcd3..3320fa4 100644 (file)
Binary files a/mbr/isohdppx_f.bin and b/mbr/isohdppx_f.bin differ
index 5475b44..92f565a 100644 (file)
@@ -12,8 +12,7 @@
 ## -----------------------------------------------------------------------
 
 topdir = ..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/embedded.mk
+include $(topdir)/MCONFIG.embedded
 -include $(topdir)/version.mk
 
 INCLUDES = -I$(topdir)/com32/include
index 30cadbf..e9fb3f1 100644 (file)
Binary files a/memdisk/memdisk and b/memdisk/memdisk differ
index 6a30431..e56c7bd 100644 (file)
@@ -15,8 +15,7 @@
 ##
 
 topdir = ..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/embedded.mk
+include $(topdir)/MCONFIG.embedded
 
 OPTFLAGS = 
 INCLUDES = -include code16.h -I.
index bf9770a..636b597 100755 (executable)
Binary files a/memdump/memdump.com and b/memdump/memdump.com differ
index f878c70..9b50bb2 100644 (file)
@@ -15,8 +15,7 @@
 ##
 
 topdir = ..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/embedded.mk
+include $(topdir)/MCONFIG.embedded
 
 INCLUDES   = -I$(com32)/include
 
index 3e172fd..6164d24 100755 (executable)
@@ -1,11 +1,10 @@
 topdir = ..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/syslinux.mk
+include $(topdir)/MCONFIG
 
 OPTFLAGS = -g -Os
 INCLUDES = -I. -I.. -I../libfat -I../libinstaller
 CFLAGS  = $(GCCWARN) -D_FILE_OFFSET_BITS=64 $(OPTFLAGS) $(INCLUDES)
-LDFLAGS         = 
+LDFLAGS         = -s
 
 SRCS     = syslinux.c \
           ../libinstaller/fat.c \
@@ -37,9 +36,6 @@ installer: syslinux
 syslinux: $(OBJS)
        $(CC) $(LDFLAGS) -o $@ $^
 
-strip:
-       $(STRIP) syslinux
-
 %.o: %.c
        $(CC) $(UMAKEDEPS) $(CFLAGS) -c -o $@ $<
 %.i: %.c
index 6a7f2b4..7a7bf75 100755 (executable)
Binary files a/mtools/syslinux and b/mtools/syslinux differ
diff --git a/packaging/0001-btrfs-Correctly-determine-the-installation-subvolume.patch b/packaging/0001-btrfs-Correctly-determine-the-installation-subvolume.patch
new file mode 100644 (file)
index 0000000..c5c941f
--- /dev/null
@@ -0,0 +1,493 @@
+From c46d7f1567870b9a2bb0a946af741a585e96fe67 Mon Sep 17 00:00:00 2001
+From: Yi Yang <yi.y.yang@intel.com>
+Date: Tue, 12 Jul 2011 14:53:50 +0800
+Subject: [PATCH] btrfs: Correctly determine the installation subvolume
+
+There are multiple ways to set up subvolumes in btrfs.  Use a general
+determination method which works for all schemes.
+
+Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
+---
+ extlinux/btrfs.h |  105 +++++++++++++++++++
+ extlinux/main.c  |  303 ++++++++++++++++++++++++++++++++++++++++++++++++------
+ 2 files changed, 376 insertions(+), 32 deletions(-)
+
+diff --git a/extlinux/btrfs.h b/extlinux/btrfs.h
+index 39a861a..be0c24e 100644
+--- a/extlinux/btrfs.h
++++ b/extlinux/btrfs.h
+@@ -1,6 +1,9 @@
+ #ifndef _BTRFS_H_
+ #define _BTRFS_H_
++#include <asm/types.h>
++#include <linux/ioctl.h>
++
+ #define BTRFS_SUPER_MAGIC 0x9123683E
+ #define BTRFS_SUPER_INFO_OFFSET (64 * 1024)
+ #define BTRFS_SUPER_INFO_SIZE 4096
+@@ -8,6 +11,40 @@
+ #define BTRFS_CSUM_SIZE 32
+ #define BTRFS_FSID_SIZE 16
++typedef __u64 u64;
++typedef __u32 u32;
++typedef __u16 u16;
++typedef __u8 u8;
++typedef u64 __le64;
++typedef u16 __le16;
++
++#define BTRFS_ROOT_BACKREF_KEY  144
++#define BTRFS_ROOT_TREE_DIR_OBJECTID 6ULL
++#define BTRFS_DIR_ITEM_KEY      84
++
++/*
++ *  * this is used for both forward and backward root refs
++ *   */
++struct btrfs_root_ref {
++        __le64 dirid;
++        __le64 sequence;
++        __le16 name_len;
++} __attribute__ ((__packed__));
++
++struct btrfs_disk_key {
++        __le64 objectid;
++        u8 type;
++        __le64 offset;
++} __attribute__ ((__packed__));
++
++struct btrfs_dir_item {
++        struct btrfs_disk_key location;
++        __le64 transid;
++        __le16 data_len;
++        __le16 name_len;
++        u8 type;
++} __attribute__ ((__packed__));
++
+ struct btrfs_super_block {
+       unsigned char csum[BTRFS_CSUM_SIZE];
+       /* the first 3 fields must match struct btrfs_header */
+@@ -19,4 +56,72 @@ struct btrfs_super_block {
+       u64 magic;
+ } __attribute__ ((__packed__));
++
++#define BTRFS_IOCTL_MAGIC 0x94
++#define BTRFS_VOL_NAME_MAX 255
++#define BTRFS_PATH_NAME_MAX 4087
++
++struct btrfs_ioctl_vol_args {
++      __s64 fd;
++      char name[BTRFS_PATH_NAME_MAX + 1];
++};
++
++struct btrfs_ioctl_search_key {
++      /* which root are we searching.  0 is the tree of tree roots */
++      __u64 tree_id;
++
++      /* keys returned will be >= min and <= max */
++      __u64 min_objectid;
++      __u64 max_objectid;
++
++      /* keys returned will be >= min and <= max */
++      __u64 min_offset;
++      __u64 max_offset;
++
++      /* max and min transids to search for */
++      __u64 min_transid;
++      __u64 max_transid;
++
++      /* keys returned will be >= min and <= max */
++      __u32 min_type;
++      __u32 max_type;
++
++      /*
++       * how many items did userland ask for, and how many are we
++       * returning
++       */
++      __u32 nr_items;
++
++      /* align to 64 bits */
++      __u32 unused;
++
++      /* some extra for later */
++      __u64 unused1;
++      __u64 unused2;
++      __u64 unused3;
++      __u64 unused4;
++};
++
++struct btrfs_ioctl_search_header {
++      __u64 transid;
++      __u64 objectid;
++      __u64 offset;
++      __u32 type;
++      __u32 len;
++} __attribute__((may_alias));
++
++#define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
++/*
++ * the buf is an array of search headers where
++ * each header is followed by the actual item
++ * the type field is expanded to 32 bits for alignment
++ */
++struct btrfs_ioctl_search_args {
++      struct btrfs_ioctl_search_key key;
++      char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
++};
++
++#define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
++                                   struct btrfs_ioctl_search_args)
++
+ #endif
+diff --git a/extlinux/main.c b/extlinux/main.c
+index e5212a9..201fb02 100755
+--- a/extlinux/main.c
++++ b/extlinux/main.c
+@@ -20,12 +20,12 @@
+ #define  _GNU_SOURCE          /* Enable everything */
+ #include <inttypes.h>
+ /* This is needed to deal with the kernel headers imported into glibc 3.3.3. */
+-typedef uint64_t u64;
+ #include <alloca.h>
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <stdio.h>
+ #include <unistd.h>
++#include <dirent.h>
+ #ifndef __KLIBC__
+ #include <mntent.h>
+ #endif
+@@ -65,7 +65,6 @@ typedef uint64_t u64;
+    boot image, the boot sector is from 0~512, the boot image starts after */
+ #define BTRFS_BOOTSECT_AREA   65536
+ #define BTRFS_EXTLINUX_OFFSET SECTOR_SIZE
+-#define BTRFS_SUBVOL_OPT "subvol="
+ #define BTRFS_SUBVOL_MAX 256  /* By btrfs specification */
+ static char subvol[BTRFS_SUBVOL_MAX];
+@@ -494,6 +493,270 @@ int btrfs_install_file(const char *path, int devfd, struct stat *rst)
+     return 0;
+ }
++/*
++ *  * test if path is a subvolume:
++ *   * this function return
++ *    * 0-> path exists but it is not a subvolume
++ *     * 1-> path exists and it is  a subvolume
++ *      * -1 -> path is unaccessible
++ *       */
++static int test_issubvolume(char *path)
++{
++
++        struct stat     st;
++        int             res;
++
++        res = stat(path, &st);
++        if(res < 0 )
++                return -1;
++
++        return (st.st_ino == 256) && S_ISDIR(st.st_mode);
++
++}
++
++/*
++ * Get file handle for a file or dir
++ */
++static int open_file_or_dir(const char *fname)
++{
++        int ret;
++        struct stat st;
++        DIR *dirstream;
++        int fd;
++
++        ret = stat(fname, &st);
++        if (ret < 0) {
++                return -1;
++        }
++        if (S_ISDIR(st.st_mode)) {
++                dirstream = opendir(fname);
++                if (!dirstream) {
++                        return -2;
++                }
++                fd = dirfd(dirstream);
++        } else {
++                fd = open(fname, O_RDWR);
++        }
++        if (fd < 0) {
++                return -3;
++        }
++        return fd;
++}
++
++/*
++ * Get the default subvolume of a btrfs filesystem
++ *   rootdir: btrfs root dir
++ *   subvol:  this function will save the default subvolume name here
++ */
++static char * get_default_subvol(char * rootdir, char * subvol)
++{
++    struct btrfs_ioctl_search_args args;
++    struct btrfs_ioctl_search_key *sk = &args.key;
++    struct btrfs_ioctl_search_header *sh;
++    int ret, i;
++    int fd;
++    struct btrfs_root_ref *ref;
++    struct btrfs_dir_item *dir_item;
++    unsigned long off = 0;
++    int name_len;
++    char *name;
++    u64 dir_id;
++    char dirname[4096];
++    u64 defaultsubvolid = 0;
++
++    ret = test_issubvolume(rootdir);
++    if (ret == 1) {
++        fd = open_file_or_dir(rootdir);
++        if (fd < 0) {
++            fprintf(stderr, "ERROR: failed to open %s\n", rootdir);
++        }
++        ret = fd;
++    }
++    if (ret <= 0) {
++        subvol[0] = '\0';
++        return NULL;
++    }
++
++    memset(&args, 0, sizeof(args));
++
++   /* search in the tree of tree roots */
++   sk->tree_id = 1;
++
++   /*
++    * set the min and max to backref keys.  The search will
++    * only send back this type of key now.
++    */
++   sk->max_type = BTRFS_DIR_ITEM_KEY;
++   sk->min_type = BTRFS_DIR_ITEM_KEY;
++
++   /*
++    * set all the other params to the max, we'll take any objectid
++    * and any trans
++    */
++   sk->min_objectid = BTRFS_ROOT_TREE_DIR_OBJECTID;
++   sk->max_objectid = BTRFS_ROOT_TREE_DIR_OBJECTID;
++
++   sk->max_offset = (u64)-1;
++   sk->min_offset = 0;
++   sk->max_transid = (u64)-1;
++
++   /* just a big number, doesn't matter much */
++   sk->nr_items = 4096;
++
++   while(1) {
++       ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args);
++       if (ret < 0) {
++           fprintf(stderr, "ERROR: can't perform the search\n");
++           subvol[0] = '\0';
++           return NULL;
++       }
++       /* the ioctl returns the number of item it found in nr_items */
++       if (sk->nr_items == 0) {
++           break;
++       }
++
++       off = 0;
++
++       /*
++        * for each item, pull the key out of the header and then
++        * read the root_ref item it contains
++        */
++       for (i = 0; i < sk->nr_items; i++) {
++           sh = (struct btrfs_ioctl_search_header *)(args.buf + off);
++           off += sizeof(*sh);
++           if (sh->type == BTRFS_DIR_ITEM_KEY) {
++               dir_item = (struct btrfs_dir_item *)(args.buf + off);
++               name_len = dir_item->name_len;
++               name = (char *)(dir_item + 1);
++
++
++               /*add_root(&root_lookup, sh->objectid, sh->offset,
++                        dir_id, name, name_len);*/
++               strncpy(dirname, name, name_len);
++               dirname[name_len] = '\0';
++               if (strcmp(dirname, "default") == 0) {
++                   defaultsubvolid = dir_item->location.objectid;
++                   break;
++               }
++           }
++           off += sh->len;
++
++           /*
++            * record the mins in sk so we can make sure the
++            * next search doesn't repeat this root
++            */
++           sk->min_objectid = sh->objectid;
++           sk->min_type = sh->type;
++           sk->max_type = sh->type;
++           sk->min_offset = sh->offset;
++       }
++       if (defaultsubvolid != 0)
++           break;
++       sk->nr_items = 4096;
++       /* this iteration is done, step forward one root for the next
++        * ioctl
++        */
++       if (sk->min_objectid < (u64)-1) {
++           sk->min_objectid = BTRFS_ROOT_TREE_DIR_OBJECTID;
++           sk->max_objectid = BTRFS_ROOT_TREE_DIR_OBJECTID;
++           sk->max_type = BTRFS_ROOT_BACKREF_KEY;
++           sk->min_type = BTRFS_ROOT_BACKREF_KEY;
++           sk->min_offset = 0;
++       } else
++           break;
++   }
++
++   if (defaultsubvolid == 0) {
++       subvol[0] = '\0';
++       return NULL;
++   }
++
++   memset(&args, 0, sizeof(args));
++
++   /* search in the tree of tree roots */
++   sk->tree_id = 1;
++
++   /*
++    * set the min and max to backref keys.  The search will
++    * only send back this type of key now.
++    */
++   sk->max_type = BTRFS_ROOT_BACKREF_KEY;
++   sk->min_type = BTRFS_ROOT_BACKREF_KEY;
++
++   /*
++    * set all the other params to the max, we'll take any objectid
++    * and any trans
++    */
++   sk->max_objectid = (u64)-1;
++   sk->max_offset = (u64)-1;
++   sk->max_transid = (u64)-1;
++
++   /* just a big number, doesn't matter much */
++   sk->nr_items = 4096;
++
++   while(1) {
++       ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args);
++       if (ret < 0) {
++           fprintf(stderr, "ERROR: can't perform the search\n");
++           subvol[0] = '\0';
++           return NULL;
++       }
++       /* the ioctl returns the number of item it found in nr_items */
++       if (sk->nr_items == 0)
++           break;
++
++       off = 0;
++
++       /*
++        * for each item, pull the key out of the header and then
++        * read the root_ref item it contains
++        */
++       for (i = 0; i < sk->nr_items; i++) {
++           sh = (struct btrfs_ioctl_search_header *)(args.buf + off);
++           off += sizeof(*sh);
++           if (sh->type == BTRFS_ROOT_BACKREF_KEY) {
++               ref = (struct btrfs_root_ref *)(args.buf + off);
++               name_len = ref->name_len;
++               name = (char *)(ref + 1);
++               dir_id = ref->dirid;
++
++               /*add_root(&root_lookup, sh->objectid, sh->offset,
++                        dir_id, name, name_len);*/
++               if (sh->objectid == defaultsubvolid) {
++                   strncpy(subvol, name, name_len);
++                   subvol[name_len] = '\0';
++                   dprintf("The default subvolume: %s, ID: %llu\n", subvol, sh->objectid);
++                   break;
++               }
++
++           }
++
++           off += sh->len;
++
++           /*
++            * record the mins in sk so we can make sure the
++            * next search doesn't repeat this root
++            */
++           sk->min_objectid = sh->objectid;
++           sk->min_type = sh->type;
++           sk->min_offset = sh->offset;
++       }
++       if (subvol[0] != '\0')
++           break;
++       sk->nr_items = 4096;
++       /* this iteration is done, step forward one root for the next
++        * ioctl
++        */
++       if (sk->min_objectid < (u64)-1) {
++           sk->min_objectid++;
++           sk->min_type = BTRFS_ROOT_BACKREF_KEY;
++           sk->min_offset = 0;
++       } else
++           break;
++   }
++   return subvol;
++}
++
+ int install_file(const char *path, int devfd, struct stat *rst)
+ {
+       if (fs_type == EXT2 || fs_type == VFAT)
+@@ -548,19 +811,9 @@ static const char *find_device(const char *mtab_file, dev_t dev)
+               if (!strcmp(mnt->mnt_type, "btrfs") &&
+                   !stat(mnt->mnt_dir, &dst) &&
+                   dst.st_dev == dev) {
+-                  char *opt = strstr(mnt->mnt_opts, BTRFS_SUBVOL_OPT);
+-
+-                  if (opt) {
+-                      if (!subvol[0]) {
+-                          char *tmp;
+-
+-                          strcpy(subvol, opt + sizeof(BTRFS_SUBVOL_OPT) - 1);
+-                          tmp = strchr(subvol, 32);
+-                          if (tmp)
+-                              *tmp = '\0';
+-                      }
+-                      break; /* should break and let upper layer try again */
+-                  } else
++                      if (!subvol[0]) {
++                          get_default_subvol(mnt->mnt_dir, subvol);
++                        }
+                       done = true;
+               }
+               break;
+@@ -625,24 +878,10 @@ static const char *get_devname(const char *path)
+ #else
+-    /* check /etc/mtab first, since btrfs subvol info is only in here */
+-    devname = find_device("/etc/mtab", st.st_dev);
+-    if (subvol[0] && !devname) { /* we just find it is a btrfs subvol */
+-      char parent[256];
+-      char *tmp;
+-
+-      strcpy(parent, path);
+-      tmp = strrchr(parent, '/');
+-      if (tmp) {
+-          *tmp = '\0';
+-          fprintf(stderr, "%s is subvol, try its parent dir %s\n", path, parent);
+-          devname = get_devname(parent);
+-      } else
+-          devname = NULL;
+-    }
++    devname = find_device("/proc/mounts", st.st_dev);
+     if (!devname) {
+-      /* Didn't find it in /etc/mtab, try /proc/mounts */
+-      devname = find_device("/proc/mounts", st.st_dev);
++      /* Didn't find it in /proc/mounts, try /etc/mtab */
++        devname = find_device("/etc/mtab", st.st_dev);
+     }
+     if (!devname) {
+       fprintf(stderr, "%s: cannot find device for path %s\n", program, path);
+-- 
+1.7.2.5
+
diff --git a/packaging/0002-syslinux-4.05-avoid-ext2_fs.h.patch b/packaging/0002-syslinux-4.05-avoid-ext2_fs.h.patch
new file mode 100644 (file)
index 0000000..9a166ee
--- /dev/null
@@ -0,0 +1,965 @@
+From a1006762fa6f98750bb77d76dd992cb8ea9f9c99 Mon Sep 17 00:00:00 2001
+From: "H. Peter Anvin" <hpa@zytor.com>
+Date: Mon, 26 Mar 2012 22:51:09 -0700
+Subject: [PATCH] libinstaller: Avoid using <linux/ext2_fs.h>
+
+Don't use <linux/ext2_fs.h> if we can avoid it.
+
+The ioctl constants have been globalized and moved to <linux/fs.h>.
+Use a private copy of ext2_fs.h from e2fsprogs with the ioctl
+constants removed for the data structures.
+
+Do at least attempt backward compatibility for old kernel headers, but
+no real hope of proper operation there...
+
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+---
+ libinstaller/ext2fs/ext2_fs.h | 856 ++++++++++++++++++++++++++++++++++++++++++
+ libinstaller/linuxioctl.h     |  29 +-
+ libinstaller/syslxcom.c       |  12 +-
+ 3 files changed, 886 insertions(+), 11 deletions(-)
+ create mode 100644 libinstaller/ext2fs/ext2_fs.h
+
+diff -urpN syslinux-4.05/libinstaller/ext2fs/ext2_fs.h.ext2 syslinux-4.05/libinstaller/ext2fs/ext2_fs.h
+--- syslinux-4.05/libinstaller/ext2fs/ext2_fs.h.ext2   2012-08-06 09:48:43.797645032 -0400
++++ syslinux-4.05/libinstaller/ext2fs/ext2_fs.h        2012-08-06 09:48:43.797645032 -0400
+@@ -0,0 +1,856 @@
++/*
++ *  linux/include/linux/ext2_fs.h
++ *
++ * Copyright (C) 1992, 1993, 1994, 1995
++ * Remy Card (card@masi.ibp.fr)
++ * Laboratoire MASI - Institut Blaise Pascal
++ * Universite Pierre et Marie Curie (Paris VI)
++ *
++ *  from
++ *
++ *  linux/include/linux/minix_fs.h
++ *
++ *  Copyright (C) 1991, 1992  Linus Torvalds
++ */
++
++#ifndef _EXT2FS_EXT2_FS_H
++#define _EXT2FS_EXT2_FS_H
++
++#include <linux/types.h>
++
++/*
++ * The second extended filesystem constants/structures
++ */
++
++/*
++ * Define EXT2FS_DEBUG to produce debug messages
++ */
++#undef EXT2FS_DEBUG
++
++/*
++ * Define EXT2_PREALLOCATE to preallocate data blocks for expanding files
++ */
++#define EXT2_PREALLOCATE
++#define EXT2_DEFAULT_PREALLOC_BLOCKS  8
++
++/*
++ * The second extended file system version
++ */
++#define EXT2FS_DATE           "95/08/09"
++#define EXT2FS_VERSION                "0.5b"
++
++/*
++ * Special inode numbers
++ */
++#define EXT2_BAD_INO           1      /* Bad blocks inode */
++#define EXT2_ROOT_INO          2      /* Root inode */
++#define EXT4_USR_QUOTA_INO     3      /* User quota inode */
++#define EXT4_GRP_QUOTA_INO     4      /* Group quota inode */
++#define EXT2_BOOT_LOADER_INO   5      /* Boot loader inode */
++#define EXT2_UNDEL_DIR_INO     6      /* Undelete directory inode */
++#define EXT2_RESIZE_INO                7      /* Reserved group descriptors inode */
++#define EXT2_JOURNAL_INO       8      /* Journal inode */
++#define EXT2_EXCLUDE_INO       9      /* The "exclude" inode, for snapshots */
++#define EXT4_REPLICA_INO      10      /* Used by non-upstream feature */
++
++/* First non-reserved inode for old ext2 filesystems */
++#define EXT2_GOOD_OLD_FIRST_INO       11
++
++/*
++ * The second extended file system magic number
++ */
++#define EXT2_SUPER_MAGIC      0xEF53
++
++#ifdef __KERNEL__
++#define EXT2_SB(sb)   (&((sb)->u.ext2_sb))
++#else
++/* Assume that user mode programs are passing in an ext2fs superblock, not
++ * a kernel struct super_block.  This will allow us to call the feature-test
++ * macros from user land. */
++#define EXT2_SB(sb)   (sb)
++#endif
++
++/*
++ * Maximal count of links to a file
++ */
++#define EXT2_LINK_MAX         65000
++
++/*
++ * Macro-instructions used to manage several block sizes
++ */
++#define EXT2_MIN_BLOCK_LOG_SIZE               10      /* 1024 */
++#define EXT2_MAX_BLOCK_LOG_SIZE               16      /* 65536 */
++#define EXT2_MIN_BLOCK_SIZE   (1 << EXT2_MIN_BLOCK_LOG_SIZE)
++#define EXT2_MAX_BLOCK_SIZE   (1 << EXT2_MAX_BLOCK_LOG_SIZE)
++#ifdef __KERNEL__
++#define EXT2_BLOCK_SIZE(s)    ((s)->s_blocksize)
++#define EXT2_BLOCK_SIZE_BITS(s)       ((s)->s_blocksize_bits)
++#define EXT2_ADDR_PER_BLOCK_BITS(s)   (EXT2_SB(s)->addr_per_block_bits)
++#define EXT2_INODE_SIZE(s)    (EXT2_SB(s)->s_inode_size)
++#define EXT2_FIRST_INO(s)     (EXT2_SB(s)->s_first_ino)
++#else
++#define EXT2_BLOCK_SIZE(s)    (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
++#define EXT2_BLOCK_SIZE_BITS(s)       ((s)->s_log_block_size + 10)
++#define EXT2_INODE_SIZE(s)    (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
++                               EXT2_GOOD_OLD_INODE_SIZE : (s)->s_inode_size)
++#define EXT2_FIRST_INO(s)     (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
++                               EXT2_GOOD_OLD_FIRST_INO : (s)->s_first_ino)
++#endif
++#define EXT2_ADDR_PER_BLOCK(s)        (EXT2_BLOCK_SIZE(s) / sizeof(__u32))
++
++/*
++ * Macro-instructions used to manage allocation clusters
++ */
++#define EXT2_MIN_CLUSTER_LOG_SIZE     EXT2_MIN_BLOCK_LOG_SIZE
++#define EXT2_MAX_CLUSTER_LOG_SIZE     29      /* 512MB  */
++#define EXT2_MIN_CLUSTER_SIZE         EXT2_MIN_BLOCK_SIZE
++#define EXT2_MAX_CLUSTER_SIZE         (1 << EXT2_MAX_CLUSTER_LOG_SIZE)
++#define EXT2_CLUSTER_SIZE(s)          (EXT2_MIN_BLOCK_SIZE << \
++                                              (s)->s_log_cluster_size)
++#define EXT2_CLUSTER_SIZE_BITS(s)     ((s)->s_log_cluster_size + 10)
++
++/*
++ * Macro-instructions used to manage fragments
++ *
++ * Note: for backwards compatibility only, for the dump program.
++ * Ext2/3/4 will never support fragments....
++ */
++#define EXT2_MIN_FRAG_SIZE              EXT2_MIN_BLOCK_SIZE
++#define EXT2_MAX_FRAG_SIZE              EXT2_MAX_BLOCK_SIZE
++#define EXT2_MIN_FRAG_LOG_SIZE          EXT2_MIN_BLOCK_LOG_SIZE
++#define EXT2_FRAG_SIZE(s)             EXT2_BLOCK_SIZE(s)
++#define EXT2_FRAGS_PER_BLOCK(s)               1
++
++/*
++ * ACL structures
++ */
++struct ext2_acl_header        /* Header of Access Control Lists */
++{
++      __u32   aclh_size;
++      __u32   aclh_file_count;
++      __u32   aclh_acle_count;
++      __u32   aclh_first_acle;
++};
++
++struct ext2_acl_entry /* Access Control List Entry */
++{
++      __u32   acle_size;
++      __u16   acle_perms;     /* Access permissions */
++      __u16   acle_type;      /* Type of entry */
++      __u16   acle_tag;       /* User or group identity */
++      __u16   acle_pad1;
++      __u32   acle_next;      /* Pointer on next entry for the */
++                                      /* same inode or on next free entry */
++};
++
++/*
++ * Structure of a blocks group descriptor
++ */
++struct ext2_group_desc
++{
++      __u32   bg_block_bitmap;        /* Blocks bitmap block */
++      __u32   bg_inode_bitmap;        /* Inodes bitmap block */
++      __u32   bg_inode_table;         /* Inodes table block */
++      __u16   bg_free_blocks_count;   /* Free blocks count */
++      __u16   bg_free_inodes_count;   /* Free inodes count */
++      __u16   bg_used_dirs_count;     /* Directories count */
++      __u16   bg_flags;
++      __u32   bg_exclude_bitmap_lo;   /* Exclude bitmap for snapshots */
++      __u16   bg_block_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+bitmap) LSB */
++      __u16   bg_inode_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+bitmap) LSB */
++      __u16   bg_itable_unused;       /* Unused inodes count */
++      __u16   bg_checksum;            /* crc16(s_uuid+grouo_num+group_desc)*/
++};
++
++/*
++ * Structure of a blocks group descriptor
++ */
++struct ext4_group_desc
++{
++      __u32   bg_block_bitmap;        /* Blocks bitmap block */
++      __u32   bg_inode_bitmap;        /* Inodes bitmap block */
++      __u32   bg_inode_table;         /* Inodes table block */
++      __u16   bg_free_blocks_count;   /* Free blocks count */
++      __u16   bg_free_inodes_count;   /* Free inodes count */
++      __u16   bg_used_dirs_count;     /* Directories count */
++      __u16   bg_flags;               /* EXT4_BG_flags (INODE_UNINIT, etc) */
++      __u32   bg_exclude_bitmap_lo;   /* Exclude bitmap for snapshots */
++      __u16   bg_block_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+bitmap) LSB */
++      __u16   bg_inode_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+bitmap) LSB */
++      __u16   bg_itable_unused;       /* Unused inodes count */
++      __u16   bg_checksum;            /* crc16(sb_uuid+group+desc) */
++      __u32   bg_block_bitmap_hi;     /* Blocks bitmap block MSB */
++      __u32   bg_inode_bitmap_hi;     /* Inodes bitmap block MSB */
++      __u32   bg_inode_table_hi;      /* Inodes table block MSB */
++      __u16   bg_free_blocks_count_hi;/* Free blocks count MSB */
++      __u16   bg_free_inodes_count_hi;/* Free inodes count MSB */
++      __u16   bg_used_dirs_count_hi;  /* Directories count MSB */
++      __u16   bg_itable_unused_hi;    /* Unused inodes count MSB */
++      __u32   bg_exclude_bitmap_hi;   /* Exclude bitmap block MSB */
++      __u16   bg_block_bitmap_csum_hi;/* crc32c(s_uuid+grp_num+bitmap) MSB */
++      __u16   bg_inode_bitmap_csum_hi;/* crc32c(s_uuid+grp_num+bitmap) MSB */
++      __u32   bg_reserved;
++};
++
++#define EXT2_BG_INODE_UNINIT  0x0001 /* Inode table/bitmap not initialized */
++#define EXT2_BG_BLOCK_UNINIT  0x0002 /* Block bitmap not initialized */
++#define EXT2_BG_INODE_ZEROED  0x0004 /* On-disk itable initialized to zero */
++
++/*
++ * Data structures used by the directory indexing feature
++ *
++ * Note: all of the multibyte integer fields are little endian.
++ */
++
++/*
++ * Note: dx_root_info is laid out so that if it should somehow get
++ * overlaid by a dirent the two low bits of the hash version will be
++ * zero.  Therefore, the hash version mod 4 should never be 0.
++ * Sincerely, the paranoia department.
++ */
++struct ext2_dx_root_info {
++      __u32 reserved_zero;
++      __u8 hash_version; /* 0 now, 1 at release */
++      __u8 info_length; /* 8 */
++      __u8 indirect_levels;
++      __u8 unused_flags;
++};
++
++#define EXT2_HASH_LEGACY              0
++#define EXT2_HASH_HALF_MD4            1
++#define EXT2_HASH_TEA                 2
++#define EXT2_HASH_LEGACY_UNSIGNED     3 /* reserved for userspace lib */
++#define EXT2_HASH_HALF_MD4_UNSIGNED   4 /* reserved for userspace lib */
++#define EXT2_HASH_TEA_UNSIGNED                5 /* reserved for userspace lib */
++
++#define EXT2_HASH_FLAG_INCOMPAT       0x1
++
++struct ext2_dx_entry {
++      __u32 hash;
++      __u32 block;
++};
++
++struct ext2_dx_countlimit {
++      __u16 limit;
++      __u16 count;
++};
++
++
++/*
++ * Macro-instructions used to manage group descriptors
++ */
++#define EXT2_MIN_DESC_SIZE             32
++#define EXT2_MIN_DESC_SIZE_64BIT       64
++#define EXT2_MAX_DESC_SIZE             EXT2_MIN_BLOCK_SIZE
++#define EXT2_DESC_SIZE(s)                                                \
++       ((EXT2_SB(s)->s_feature_incompat & EXT4_FEATURE_INCOMPAT_64BIT) ? \
++      (s)->s_desc_size : EXT2_MIN_DESC_SIZE)
++
++#define EXT2_BLOCKS_PER_GROUP(s)      (EXT2_SB(s)->s_blocks_per_group)
++#define EXT2_INODES_PER_GROUP(s)      (EXT2_SB(s)->s_inodes_per_group)
++#define EXT2_CLUSTERS_PER_GROUP(s)    (EXT2_SB(s)->s_clusters_per_group)
++#define EXT2_INODES_PER_BLOCK(s)      (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
++/* limits imposed by 16-bit value gd_free_{blocks,inode}_count */
++#define EXT2_MAX_BLOCKS_PER_GROUP(s)  ((((unsigned) 1 << 16) - 8) *   \
++                                       (EXT2_CLUSTER_SIZE(s) / \
++                                        EXT2_BLOCK_SIZE(s)))
++#define EXT2_MAX_CLUSTERS_PER_GROUP(s)        (((unsigned) 1 << 16) - 8)
++#define EXT2_MAX_INODES_PER_GROUP(s)  (((unsigned) 1 << 16) - \
++                                       EXT2_INODES_PER_BLOCK(s))
++#ifdef __KERNEL__
++#define EXT2_DESC_PER_BLOCK(s)                (EXT2_SB(s)->s_desc_per_block)
++#define EXT2_DESC_PER_BLOCK_BITS(s)   (EXT2_SB(s)->s_desc_per_block_bits)
++#else
++#define EXT2_DESC_PER_BLOCK(s)                (EXT2_BLOCK_SIZE(s) / EXT2_DESC_SIZE(s))
++#endif
++
++/*
++ * Constants relative to the data blocks
++ */
++#define EXT2_NDIR_BLOCKS              12
++#define EXT2_IND_BLOCK                        EXT2_NDIR_BLOCKS
++#define EXT2_DIND_BLOCK                       (EXT2_IND_BLOCK + 1)
++#define EXT2_TIND_BLOCK                       (EXT2_DIND_BLOCK + 1)
++#define EXT2_N_BLOCKS                 (EXT2_TIND_BLOCK + 1)
++
++/*
++ * Inode flags
++ */
++#define EXT2_SECRM_FL                 0x00000001 /* Secure deletion */
++#define EXT2_UNRM_FL                  0x00000002 /* Undelete */
++#define EXT2_COMPR_FL                 0x00000004 /* Compress file */
++#define EXT2_SYNC_FL                  0x00000008 /* Synchronous updates */
++#define EXT2_IMMUTABLE_FL             0x00000010 /* Immutable file */
++#define EXT2_APPEND_FL                        0x00000020 /* writes to file may only append */
++#define EXT2_NODUMP_FL                        0x00000040 /* do not dump file */
++#define EXT2_NOATIME_FL                       0x00000080 /* do not update atime */
++/* Reserved for compression usage... */
++#define EXT2_DIRTY_FL                 0x00000100
++#define EXT2_COMPRBLK_FL              0x00000200 /* One or more compressed clusters */
++#define EXT2_NOCOMPR_FL                       0x00000400 /* Access raw compressed data */
++#define EXT2_ECOMPR_FL                        0x00000800 /* Compression error */
++/* End compression flags --- maybe not all used */
++#define EXT2_BTREE_FL                 0x00001000 /* btree format dir */
++#define EXT2_INDEX_FL                 0x00001000 /* hash-indexed directory */
++#define EXT2_IMAGIC_FL                        0x00002000
++#define EXT3_JOURNAL_DATA_FL          0x00004000 /* file data should be journaled */
++#define EXT2_NOTAIL_FL                        0x00008000 /* file tail should not be merged */
++#define EXT2_DIRSYNC_FL               0x00010000 /* Synchronous directory modifications */
++#define EXT2_TOPDIR_FL                        0x00020000 /* Top of directory hierarchies*/
++#define EXT4_HUGE_FILE_FL               0x00040000 /* Set to each huge file */
++#define EXT4_EXTENTS_FL               0x00080000 /* Inode uses extents */
++#define EXT4_EA_INODE_FL              0x00200000 /* Inode used for large EA */
++/* EXT4_EOFBLOCKS_FL 0x00400000 was here */
++#define EXT4_SNAPFILE_FL              0x01000000  /* Inode is a snapshot */
++#define EXT4_SNAPFILE_DELETED_FL      0x04000000  /* Snapshot is being deleted */
++#define EXT4_SNAPFILE_SHRUNK_FL               0x08000000  /* Snapshot shrink has completed */
++#define EXT2_RESERVED_FL              0x80000000 /* reserved for ext2 lib */
++
++#define EXT2_FL_USER_VISIBLE          0x004BDFFF /* User visible flags */
++#define EXT2_FL_USER_MODIFIABLE               0x004B80FF /* User modifiable flags */
++
++/*
++ * ioctl commands
++ */
++
++/* Used for online resize */
++struct ext2_new_group_input {
++      __u32 group;            /* Group number for this data */
++      __u32 block_bitmap;     /* Absolute block number of block bitmap */
++      __u32 inode_bitmap;     /* Absolute block number of inode bitmap */
++      __u32 inode_table;      /* Absolute block number of inode table start */
++      __u32 blocks_count;     /* Total number of blocks in this group */
++      __u16 reserved_blocks;  /* Number of reserved blocks in this group */
++      __u16 unused;           /* Number of reserved GDT blocks in group */
++};
++
++struct ext4_new_group_input {
++      __u32 group;            /* Group number for this data */
++      __u64 block_bitmap;     /* Absolute block number of block bitmap */
++      __u64 inode_bitmap;     /* Absolute block number of inode bitmap */
++      __u64 inode_table;      /* Absolute block number of inode table start */
++      __u32 blocks_count;     /* Total number of blocks in this group */
++      __u16 reserved_blocks;  /* Number of reserved blocks in this group */
++      __u16 unused;
++};
++
++#ifdef __GNU__                        /* Needed for the Hurd */
++#define _IOT_ext2_new_group_input _IOT (_IOTS(__u32), 5, _IOTS(__u16), 2, 0, 0)
++#endif
++
++#define EXT2_IOC_GETFLAGS             _IOR('f', 1, long)
++#define EXT2_IOC_SETFLAGS             _IOW('f', 2, long)
++#define EXT2_IOC_GETVERSION           _IOR('v', 1, long)
++#define EXT2_IOC_SETVERSION           _IOW('v', 2, long)
++#define EXT2_IOC_GETVERSION_NEW               _IOR('f', 3, long)
++#define EXT2_IOC_SETVERSION_NEW               _IOW('f', 4, long)
++#define EXT2_IOC_GROUP_EXTEND         _IOW('f', 7, unsigned long)
++#define EXT2_IOC_GROUP_ADD            _IOW('f', 8,struct ext2_new_group_input)
++#define EXT4_IOC_GROUP_ADD            _IOW('f', 8,struct ext4_new_group_input)
++#define EXT4_IOC_RESIZE_FS            _IOW('f', 16, __u64)
++
++/*
++ * Structure of an inode on the disk
++ */
++struct ext2_inode {
++      __u16   i_mode;         /* File mode */
++      __u16   i_uid;          /* Low 16 bits of Owner Uid */
++      __u32   i_size;         /* Size in bytes */
++      __u32   i_atime;        /* Access time */
++      __u32   i_ctime;        /* Inode change time */
++      __u32   i_mtime;        /* Modification time */
++      __u32   i_dtime;        /* Deletion Time */
++      __u16   i_gid;          /* Low 16 bits of Group Id */
++      __u16   i_links_count;  /* Links count */
++      __u32   i_blocks;       /* Blocks count */
++      __u32   i_flags;        /* File flags */
++      union {
++              struct {
++                      __u32   l_i_version; /* was l_i_reserved1 */
++              } linux1;
++              struct {
++                      __u32  h_i_translator;
++              } hurd1;
++      } osd1;                         /* OS dependent 1 */
++      __u32   i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
++      __u32   i_generation;   /* File version (for NFS) */
++      __u32   i_file_acl;     /* File ACL */
++      __u32   i_size_high;    /* Formerly i_dir_acl, directory ACL */
++      __u32   i_faddr;        /* Fragment address */
++      union {
++              struct {
++                      __u16   l_i_blocks_hi;
++                      __u16   l_i_file_acl_high;
++                      __u16   l_i_uid_high;   /* these 2 fields    */
++                      __u16   l_i_gid_high;   /* were reserved2[0] */
++                      __u16   l_i_checksum_lo; /* crc32c(uuid+inum+inode) */
++                      __u16   l_i_reserved;
++              } linux2;
++              struct {
++                      __u8    h_i_frag;       /* Fragment number */
++                      __u8    h_i_fsize;      /* Fragment size */
++                      __u16   h_i_mode_high;
++                      __u16   h_i_uid_high;
++                      __u16   h_i_gid_high;
++                      __u32   h_i_author;
++              } hurd2;
++      } osd2;                         /* OS dependent 2 */
++};
++
++/*
++ * Permanent part of an large inode on the disk
++ */
++struct ext2_inode_large {
++      __u16   i_mode;         /* File mode */
++      __u16   i_uid;          /* Low 16 bits of Owner Uid */
++      __u32   i_size;         /* Size in bytes */
++      __u32   i_atime;        /* Access time */
++      __u32   i_ctime;        /* Inode Change time */
++      __u32   i_mtime;        /* Modification time */
++      __u32   i_dtime;        /* Deletion Time */
++      __u16   i_gid;          /* Low 16 bits of Group Id */
++      __u16   i_links_count;  /* Links count */
++      __u32   i_blocks;       /* Blocks count */
++      __u32   i_flags;        /* File flags */
++      union {
++              struct {
++                      __u32   l_i_version; /* was l_i_reserved1 */
++              } linux1;
++              struct {
++                      __u32  h_i_translator;
++              } hurd1;
++      } osd1;                         /* OS dependent 1 */
++      __u32   i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
++      __u32   i_generation;   /* File version (for NFS) */
++      __u32   i_file_acl;     /* File ACL */
++      __u32   i_size_high;    /* Formerly i_dir_acl, directory ACL */
++      __u32   i_faddr;        /* Fragment address */
++      union {
++              struct {
++                      __u16   l_i_blocks_hi;
++                      __u16   l_i_file_acl_high;
++                      __u16   l_i_uid_high;   /* these 2 fields    */
++                      __u16   l_i_gid_high;   /* were reserved2[0] */
++                      __u16   l_i_checksum_lo; /* crc32c(uuid+inum+inode) */
++                      __u16   l_i_reserved;
++              } linux2;
++              struct {
++                      __u8    h_i_frag;       /* Fragment number */
++                      __u8    h_i_fsize;      /* Fragment size */
++                      __u16   h_i_mode_high;
++                      __u16   h_i_uid_high;
++                      __u16   h_i_gid_high;
++                      __u32   h_i_author;
++              } hurd2;
++      } osd2;                         /* OS dependent 2 */
++      __u16   i_extra_isize;
++      __u16   i_checksum_hi;  /* crc32c(uuid+inum+inode) */
++      __u32   i_ctime_extra;  /* extra Change time (nsec << 2 | epoch) */
++      __u32   i_mtime_extra;  /* extra Modification time (nsec << 2 | epoch) */
++      __u32   i_atime_extra;  /* extra Access time (nsec << 2 | epoch) */
++      __u32   i_crtime;       /* File creation time */
++      __u32   i_crtime_extra; /* extra File creation time (nsec << 2 | epoch)*/
++      __u32   i_version_hi;   /* high 32 bits for 64-bit version */
++};
++
++#define i_dir_acl     i_size_high
++
++#if defined(__KERNEL__) || defined(__linux__)
++#define i_reserved1   osd1.linux1.l_i_reserved1
++#define i_frag                osd2.linux2.l_i_frag
++#define i_fsize               osd2.linux2.l_i_fsize
++#define i_uid_low     i_uid
++#define i_gid_low     i_gid
++#define i_uid_high    osd2.linux2.l_i_uid_high
++#define i_gid_high    osd2.linux2.l_i_gid_high
++#else
++#if defined(__GNU__)
++
++#define i_translator  osd1.hurd1.h_i_translator
++#define i_frag                osd2.hurd2.h_i_frag;
++#define i_fsize               osd2.hurd2.h_i_fsize;
++#define i_uid_high    osd2.hurd2.h_i_uid_high
++#define i_gid_high    osd2.hurd2.h_i_gid_high
++#define i_author      osd2.hurd2.h_i_author
++
++#endif  /* __GNU__ */
++#endif        /* defined(__KERNEL__) || defined(__linux__) */
++
++#define inode_uid(inode)      ((inode).i_uid | (inode).osd2.linux2.l_i_uid_high << 16)
++#define inode_gid(inode)      ((inode).i_gid | (inode).osd2.linux2.l_i_gid_high << 16)
++#define ext2fs_set_i_uid_high(inode,x) ((inode).osd2.linux2.l_i_uid_high = (x))
++#define ext2fs_set_i_gid_high(inode,x) ((inode).osd2.linux2.l_i_gid_high = (x))
++
++/*
++ * File system states
++ */
++#define EXT2_VALID_FS                 0x0001  /* Unmounted cleanly */
++#define EXT2_ERROR_FS                 0x0002  /* Errors detected */
++#define EXT3_ORPHAN_FS                        0x0004  /* Orphans being recovered */
++
++/*
++ * Misc. filesystem flags
++ */
++#define EXT2_FLAGS_SIGNED_HASH                0x0001  /* Signed dirhash in use */
++#define EXT2_FLAGS_UNSIGNED_HASH      0x0002  /* Unsigned dirhash in use */
++#define EXT2_FLAGS_TEST_FILESYS               0x0004  /* OK for use on development code */
++#define EXT2_FLAGS_IS_SNAPSHOT                0x0010  /* This is a snapshot image */
++#define EXT2_FLAGS_FIX_SNAPSHOT               0x0020  /* Snapshot inodes corrupted */
++#define EXT2_FLAGS_FIX_EXCLUDE                0x0040  /* Exclude bitmaps corrupted */
++
++/*
++ * Mount flags
++ */
++#define EXT2_MOUNT_CHECK              0x0001  /* Do mount-time checks */
++#define EXT2_MOUNT_GRPID              0x0004  /* Create files with directory's group */
++#define EXT2_MOUNT_DEBUG              0x0008  /* Some debugging messages */
++#define EXT2_MOUNT_ERRORS_CONT                0x0010  /* Continue on errors */
++#define EXT2_MOUNT_ERRORS_RO          0x0020  /* Remount fs ro on errors */
++#define EXT2_MOUNT_ERRORS_PANIC               0x0040  /* Panic on errors */
++#define EXT2_MOUNT_MINIX_DF           0x0080  /* Mimics the Minix statfs */
++#define EXT2_MOUNT_NO_UID32           0x0200  /* Disable 32-bit UIDs */
++
++#define clear_opt(o, opt)             o &= ~EXT2_MOUNT_##opt
++#define set_opt(o, opt)                       o |= EXT2_MOUNT_##opt
++#define test_opt(sb, opt)             (EXT2_SB(sb)->s_mount_opt & \
++                                       EXT2_MOUNT_##opt)
++/*
++ * Maximal mount counts between two filesystem checks
++ */
++#define EXT2_DFL_MAX_MNT_COUNT                20      /* Allow 20 mounts */
++#define EXT2_DFL_CHECKINTERVAL                0       /* Don't use interval check */
++
++/*
++ * Behaviour when detecting errors
++ */
++#define EXT2_ERRORS_CONTINUE          1       /* Continue execution */
++#define EXT2_ERRORS_RO                        2       /* Remount fs read-only */
++#define EXT2_ERRORS_PANIC             3       /* Panic */
++#define EXT2_ERRORS_DEFAULT           EXT2_ERRORS_CONTINUE
++
++#if (__GNUC__ >= 4)
++#define ext4_offsetof(TYPE,MEMBER) __builtin_offsetof(TYPE,MEMBER)
++#else
++#define ext4_offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
++#endif
++
++/*
++ * Structure of the super block
++ */
++struct ext2_super_block {
++      __u32   s_inodes_count;         /* Inodes count */
++      __u32   s_blocks_count;         /* Blocks count */
++      __u32   s_r_blocks_count;       /* Reserved blocks count */
++      __u32   s_free_blocks_count;    /* Free blocks count */
++      __u32   s_free_inodes_count;    /* Free inodes count */
++      __u32   s_first_data_block;     /* First Data Block */
++      __u32   s_log_block_size;       /* Block size */
++      __u32   s_log_cluster_size;     /* Allocation cluster size */
++      __u32   s_blocks_per_group;     /* # Blocks per group */
++      __u32   s_clusters_per_group;   /* # Fragments per group */
++      __u32   s_inodes_per_group;     /* # Inodes per group */
++      __u32   s_mtime;                /* Mount time */
++      __u32   s_wtime;                /* Write time */
++      __u16   s_mnt_count;            /* Mount count */
++      __s16   s_max_mnt_count;        /* Maximal mount count */
++      __u16   s_magic;                /* Magic signature */
++      __u16   s_state;                /* File system state */
++      __u16   s_errors;               /* Behaviour when detecting errors */
++      __u16   s_minor_rev_level;      /* minor revision level */
++      __u32   s_lastcheck;            /* time of last check */
++      __u32   s_checkinterval;        /* max. time between checks */
++      __u32   s_creator_os;           /* OS */
++      __u32   s_rev_level;            /* Revision level */
++      __u16   s_def_resuid;           /* Default uid for reserved blocks */
++      __u16   s_def_resgid;           /* Default gid for reserved blocks */
++      /*
++       * These fields are for EXT2_DYNAMIC_REV superblocks only.
++       *
++       * Note: the difference between the compatible feature set and
++       * the incompatible feature set is that if there is a bit set
++       * in the incompatible feature set that the kernel doesn't
++       * know about, it should refuse to mount the filesystem.
++       *
++       * e2fsck's requirements are more strict; if it doesn't know
++       * about a feature in either the compatible or incompatible
++       * feature set, it must abort and not try to meddle with
++       * things it doesn't understand...
++       */
++      __u32   s_first_ino;            /* First non-reserved inode */
++      __u16   s_inode_size;           /* size of inode structure */
++      __u16   s_block_group_nr;       /* block group # of this superblock */
++      __u32   s_feature_compat;       /* compatible feature set */
++      __u32   s_feature_incompat;     /* incompatible feature set */
++      __u32   s_feature_ro_compat;    /* readonly-compatible feature set */
++      __u8    s_uuid[16];             /* 128-bit uuid for volume */
++      char    s_volume_name[16];      /* volume name */
++      char    s_last_mounted[64];     /* directory where last mounted */
++      __u32   s_algorithm_usage_bitmap; /* For compression */
++      /*
++       * Performance hints.  Directory preallocation should only
++       * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
++       */
++      __u8    s_prealloc_blocks;      /* Nr of blocks to try to preallocate*/
++      __u8    s_prealloc_dir_blocks;  /* Nr to preallocate for dirs */
++      __u16   s_reserved_gdt_blocks;  /* Per group table for online growth */
++      /*
++       * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
++       */
++      __u8    s_journal_uuid[16];     /* uuid of journal superblock */
++      __u32   s_journal_inum;         /* inode number of journal file */
++      __u32   s_journal_dev;          /* device number of journal file */
++      __u32   s_last_orphan;          /* start of list of inodes to delete */
++      __u32   s_hash_seed[4];         /* HTREE hash seed */
++      __u8    s_def_hash_version;     /* Default hash version to use */
++      __u8    s_jnl_backup_type;      /* Default type of journal backup */
++      __u16   s_desc_size;            /* Group desc. size: INCOMPAT_64BIT */
++      __u32   s_default_mount_opts;
++      __u32   s_first_meta_bg;        /* First metablock group */
++      __u32   s_mkfs_time;            /* When the filesystem was created */
++      __u32   s_jnl_blocks[17];       /* Backup of the journal inode */
++      __u32   s_blocks_count_hi;      /* Blocks count high 32bits */
++      __u32   s_r_blocks_count_hi;    /* Reserved blocks count high 32 bits*/
++      __u32   s_free_blocks_hi;       /* Free blocks count */
++      __u16   s_min_extra_isize;      /* All inodes have at least # bytes */
++      __u16   s_want_extra_isize;     /* New inodes should reserve # bytes */
++      __u32   s_flags;                /* Miscellaneous flags */
++      __u16   s_raid_stride;          /* RAID stride */
++      __u16   s_mmp_update_interval;  /* # seconds to wait in MMP checking */
++      __u64   s_mmp_block;            /* Block for multi-mount protection */
++      __u32   s_raid_stripe_width;    /* blocks on all data disks (N*stride)*/
++      __u8    s_log_groups_per_flex;  /* FLEX_BG group size */
++      __u8    s_reserved_char_pad;
++      __u16   s_reserved_pad;         /* Padding to next 32bits */
++      __u64   s_kbytes_written;       /* nr of lifetime kilobytes written */
++      __u32   s_snapshot_inum;        /* Inode number of active snapshot */
++      __u32   s_snapshot_id;          /* sequential ID of active snapshot */
++      __u64   s_snapshot_r_blocks_count; /* reserved blocks for active
++                                            snapshot's future use */
++      __u32   s_snapshot_list;        /* inode number of the head of the on-disk snapshot list */
++#define EXT4_S_ERR_START ext4_offsetof(struct ext2_super_block, s_error_count)
++      __u32   s_error_count;          /* number of fs errors */
++      __u32   s_first_error_time;     /* first time an error happened */
++      __u32   s_first_error_ino;      /* inode involved in first error */
++      __u64   s_first_error_block;    /* block involved of first error */
++      __u8    s_first_error_func[32]; /* function where the error happened */
++      __u32   s_first_error_line;     /* line number where error happened */
++      __u32   s_last_error_time;      /* most recent time of an error */
++      __u32   s_last_error_ino;       /* inode involved in last error */
++      __u32   s_last_error_line;      /* line number where error happened */
++      __u64   s_last_error_block;     /* block involved of last error */
++      __u8    s_last_error_func[32];  /* function where the error happened */
++#define EXT4_S_ERR_END ext4_offsetof(struct ext2_super_block, s_mount_opts)
++      __u8    s_mount_opts[64];
++      __u32   s_usr_quota_inum;       /* inode number of user quota file */
++      __u32   s_grp_quota_inum;       /* inode number of group quota file */
++      __u32   s_overhead_blocks;      /* overhead blocks/clusters in fs */
++      __u32   s_reserved[108];        /* Padding to the end of the block */
++      __u32   s_checksum;             /* crc32c(superblock) */
++};
++
++#define EXT4_S_ERR_LEN (EXT4_S_ERR_END - EXT4_S_ERR_START)
++
++/*
++ * Codes for operating systems
++ */
++#define EXT2_OS_LINUX         0
++#define EXT2_OS_HURD          1
++#define EXT2_OBSO_OS_MASIX    2
++#define EXT2_OS_FREEBSD               3
++#define EXT2_OS_LITES         4
++
++/*
++ * Revision levels
++ */
++#define EXT2_GOOD_OLD_REV     0       /* The good old (original) format */
++#define EXT2_DYNAMIC_REV      1       /* V2 format w/ dynamic inode sizes */
++
++#define EXT2_CURRENT_REV      EXT2_GOOD_OLD_REV
++#define EXT2_MAX_SUPP_REV     EXT2_DYNAMIC_REV
++
++#define EXT2_GOOD_OLD_INODE_SIZE 128
++
++/*
++ * Journal inode backup types
++ */
++#define EXT3_JNL_BACKUP_BLOCKS        1
++
++/*
++ * Feature set definitions
++ */
++
++#define EXT2_HAS_COMPAT_FEATURE(sb,mask)                      \
++      ( EXT2_SB(sb)->s_feature_compat & (mask) )
++#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask)                   \
++      ( EXT2_SB(sb)->s_feature_ro_compat & (mask) )
++#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask)                    \
++      ( EXT2_SB(sb)->s_feature_incompat & (mask) )
++
++#define EXT2_FEATURE_COMPAT_DIR_PREALLOC      0x0001
++#define EXT2_FEATURE_COMPAT_IMAGIC_INODES     0x0002
++#define EXT3_FEATURE_COMPAT_HAS_JOURNAL               0x0004
++#define EXT2_FEATURE_COMPAT_EXT_ATTR          0x0008
++#define EXT2_FEATURE_COMPAT_RESIZE_INODE      0x0010
++#define EXT2_FEATURE_COMPAT_DIR_INDEX         0x0020
++#define EXT2_FEATURE_COMPAT_LAZY_BG           0x0040
++/* #define EXT2_FEATURE_COMPAT_EXCLUDE_INODE  0x0080 not used, legacy */
++#define EXT2_FEATURE_COMPAT_EXCLUDE_BITMAP    0x0100
++
++
++#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER   0x0001
++#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE     0x0002
++/* #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR   0x0004 not used */
++#define EXT4_FEATURE_RO_COMPAT_HUGE_FILE      0x0008
++#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM               0x0010
++#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK      0x0020
++#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE    0x0040
++#define EXT4_FEATURE_RO_COMPAT_HAS_SNAPSHOT   0x0080
++#define EXT4_FEATURE_RO_COMPAT_QUOTA          0x0100
++#define EXT4_FEATURE_RO_COMPAT_BIGALLOC               0x0200
++#define EXT4_FEATURE_RO_COMPAT_METADATA_CSUM  0x0400
++#define EXT4_FEATURE_RO_COMPAT_REPLICA                0x0800
++
++#define EXT2_FEATURE_INCOMPAT_COMPRESSION     0x0001
++#define EXT2_FEATURE_INCOMPAT_FILETYPE                0x0002
++#define EXT3_FEATURE_INCOMPAT_RECOVER         0x0004 /* Needs recovery */
++#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008 /* Journal device */
++#define EXT2_FEATURE_INCOMPAT_META_BG         0x0010
++#define EXT3_FEATURE_INCOMPAT_EXTENTS         0x0040
++#define EXT4_FEATURE_INCOMPAT_64BIT           0x0080
++#define EXT4_FEATURE_INCOMPAT_MMP             0x0100
++#define EXT4_FEATURE_INCOMPAT_FLEX_BG         0x0200
++#define EXT4_FEATURE_INCOMPAT_EA_INODE                0x0400
++#define EXT4_FEATURE_INCOMPAT_DIRDATA         0x1000
++
++#define EXT2_FEATURE_COMPAT_SUPP      0
++#define EXT2_FEATURE_INCOMPAT_SUPP    (EXT2_FEATURE_INCOMPAT_FILETYPE| \
++                                     EXT4_FEATURE_INCOMPAT_MMP)
++#define EXT2_FEATURE_RO_COMPAT_SUPP   (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
++                                       EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
++                                       EXT4_FEATURE_RO_COMPAT_DIR_NLINK| \
++                                       EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
++
++/*
++ * Default values for user and/or group using reserved blocks
++ */
++#define EXT2_DEF_RESUID               0
++#define EXT2_DEF_RESGID               0
++
++/*
++ * Default mount options
++ */
++#define EXT2_DEFM_DEBUG               0x0001
++#define EXT2_DEFM_BSDGROUPS   0x0002
++#define EXT2_DEFM_XATTR_USER  0x0004
++#define EXT2_DEFM_ACL         0x0008
++#define EXT2_DEFM_UID16               0x0010
++#define EXT3_DEFM_JMODE               0x0060
++#define EXT3_DEFM_JMODE_DATA  0x0020
++#define EXT3_DEFM_JMODE_ORDERED       0x0040
++#define EXT3_DEFM_JMODE_WBACK 0x0060
++#define EXT4_DEFM_NOBARRIER   0x0100
++#define EXT4_DEFM_BLOCK_VALIDITY 0x0200
++#define EXT4_DEFM_DISCARD     0x0400
++#define EXT4_DEFM_NODELALLOC  0x0800
++
++/*
++ * Structure of a directory entry
++ */
++#define EXT2_NAME_LEN 255
++
++struct ext2_dir_entry {
++      __u32   inode;                  /* Inode number */
++      __u16   rec_len;                /* Directory entry length */
++      __u16   name_len;               /* Name length */
++      char    name[EXT2_NAME_LEN];    /* File name */
++};
++
++/*
++ * The new version of the directory entry.  Since EXT2 structures are
++ * stored in intel byte order, and the name_len field could never be
++ * bigger than 255 chars, it's safe to reclaim the extra byte for the
++ * file_type field.
++ */
++struct ext2_dir_entry_2 {
++      __u32   inode;                  /* Inode number */
++      __u16   rec_len;                /* Directory entry length */
++      __u8    name_len;               /* Name length */
++      __u8    file_type;
++      char    name[EXT2_NAME_LEN];    /* File name */
++};
++
++/*
++ * Ext2 directory file types.  Only the low 3 bits are used.  The
++ * other bits are reserved for now.
++ */
++#define EXT2_FT_UNKNOWN               0
++#define EXT2_FT_REG_FILE      1
++#define EXT2_FT_DIR           2
++#define EXT2_FT_CHRDEV                3
++#define EXT2_FT_BLKDEV                4
++#define EXT2_FT_FIFO          5
++#define EXT2_FT_SOCK          6
++#define EXT2_FT_SYMLINK               7
++
++#define EXT2_FT_MAX           8
++
++/*
++ * EXT2_DIR_PAD defines the directory entries boundaries
++ *
++ * NOTE: It must be a multiple of 4
++ */
++#define EXT2_DIR_PAD                  4
++#define EXT2_DIR_ROUND                        (EXT2_DIR_PAD - 1)
++#define EXT2_DIR_REC_LEN(name_len)    (((name_len) + 8 + EXT2_DIR_ROUND) & \
++                                       ~EXT2_DIR_ROUND)
++
++/*
++ * This structure is used for multiple mount protection. It is written
++ * into the block number saved in the s_mmp_block field in the superblock.
++ * Programs that check MMP should assume that if SEQ_FSCK (or any unknown
++ * code above SEQ_MAX) is present then it is NOT safe to use the filesystem,
++ * regardless of how old the timestamp is.
++ *
++ * The timestamp in the MMP structure will be updated by e2fsck at some
++ * arbitary intervals (start of passes, after every few groups of inodes
++ * in pass1 and pass1b).  There is no guarantee that e2fsck is updating
++ * the MMP block in a timely manner, and the updates it does are purely
++ * for the convenience of the sysadmin and not for automatic validation.
++ *
++ * Note: Only the mmp_seq value is used to determine whether the MMP block
++ *    is being updated.  The mmp_time, mmp_nodename, and mmp_bdevname
++ *    fields are only for informational purposes for the administrator,
++ *    due to clock skew between nodes and hostname HA service takeover.
++ */
++#define EXT4_MMP_MAGIC     0x004D4D50U /* ASCII for MMP */
++#define EXT4_MMP_SEQ_CLEAN 0xFF4D4D50U /* mmp_seq value for clean unmount */
++#define EXT4_MMP_SEQ_FSCK  0xE24D4D50U /* mmp_seq value when being fscked */
++#define EXT4_MMP_SEQ_MAX   0xE24D4D4FU /* maximum valid mmp_seq value */
++
++struct mmp_struct {
++      __u32   mmp_magic;              /* Magic number for MMP */
++      __u32   mmp_seq;                /* Sequence no. updated periodically */
++      __u64   mmp_time;               /* Time last updated */
++      char    mmp_nodename[64];       /* Node which last updated MMP block */
++      char    mmp_bdevname[32];       /* Bdev which last updated MMP block */
++      __u16   mmp_check_interval;     /* Changed mmp_check_interval */
++      __u16   mmp_pad1;
++      __u32   mmp_pad2[227];
++};
++
++/*
++ * Default interval for MMP update in seconds.
++ */
++#define EXT4_MMP_UPDATE_INTERVAL      5
++
++/*
++ * Maximum interval for MMP update in seconds.
++ */
++#define EXT4_MMP_MAX_UPDATE_INTERVAL  300
++
++/*
++ * Minimum interval for MMP checking in seconds.
++ */
++#define EXT4_MMP_MIN_CHECK_INTERVAL     5
++
++#endif        /* _EXT2FS_EXT2_FS_H */
+diff -urpN syslinux-4.05/libinstaller/linuxioctl.h.ext2 syslinux-4.05/libinstaller/linuxioctl.h
+--- syslinux-4.05/libinstaller/linuxioctl.h.ext2       2011-12-09 13:28:17.000000000 -0500
++++ syslinux-4.05/libinstaller/linuxioctl.h    2012-08-06 09:52:42.653335110 -0400
+@@ -9,17 +9,33 @@
+ #include <sys/ioctl.h>
++#ifdef __linux__
++
+ #define statfs _kernel_statfs /* HACK to deal with broken 2.4 distros */
+ #include <linux/fd.h>         /* Floppy geometry */
+ #include <linux/hdreg.h>      /* Hard disk geometry */
+-#include <linux/fs.h>         /* FIGETBSZ, FIBMAP, FS_IOC_FIEMAP */
++#include <linux/fs.h>         /* FIGETBSZ, FIBMAP, FS_IOC_* */
+ #include <linux/msdos_fs.h>   /* FAT_IOCTL_SET_ATTRIBUTES */
+ #undef SECTOR_SIZE            /* Defined in msdos_fs.h for no good reason */
+ #undef SECTOR_BITS
+-#include <linux/ext2_fs.h>    /* EXT2_IOC_* */
++
++#ifndef FS_IOC_GETFLAGS
++/* Old kernel headers, these were once ext2-specific... */
++# include <linux/ext2_fs.h>   /* EXT2_IOC_* */
++
++# define FS_IOC_GETFLAGS EXT2_IOC_GETFLAGS
++# define FS_IOC_SETFLAGS EXT2_IOC_SETFLAGS
++
++# define FS_IMMUTABLE_FL EXT2_IMMUTABLE_FL
++
++#else
++
++# include <ext2fs/ext2_fs.h>
++
++#endif
+ #ifndef FAT_IOCTL_GET_ATTRIBUTES
+ # define FAT_IOCTL_GET_ATTRIBUTES     _IOR('r', 0x10, __u32)
+@@ -37,11 +53,13 @@
+ #undef statfs
+-#if defined(__linux__) && !defined(BLKGETSIZE64)
++#ifndef  BLKGETSIZE64
+ /* This takes a u64, but the size field says size_t.  Someone screwed big. */
+ # define BLKGETSIZE64 _IOR(0x12,114,size_t)
+ #endif
+ #include <linux/loop.h>
++#endif /* __linux__ */
++
+ #endif /* LIBINSTALLER_LINUXIOCTL_H */
+diff -urpN syslinux-4.05/libinstaller/syslxcom.c.ext2 syslinux-4.05/libinstaller/syslxcom.c
+--- syslinux-4.05/libinstaller/syslxcom.c.ext2 2011-12-09 13:28:17.000000000 -0500
++++ syslinux-4.05/libinstaller/syslxcom.c      2012-08-06 09:48:43.797645032 -0400
+@@ -121,9 +121,9 @@ void clear_attributes(int fd)
+       {
+           int flags;
+-          if (!ioctl(fd, EXT2_IOC_GETFLAGS, &flags)) {
+-              flags &= ~EXT2_IMMUTABLE_FL;
+-              ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
++          if (!ioctl(fd, FS_IOC_GETFLAGS, &flags)) {
++              flags &= ~FS_IMMUTABLE_FL;
++              ioctl(fd, FS_IOC_SETFLAGS, &flags);
+           }
+           break;
+       }
+@@ -151,9 +151,9 @@ void set_attributes(int fd)
+       {
+           int flags;
+-          if (st.st_uid == 0 && !ioctl(fd, EXT2_IOC_GETFLAGS, &flags)) {
+-              flags |= EXT2_IMMUTABLE_FL;
+-              ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
++          if (st.st_uid == 0 && !ioctl(fd, FS_IOC_GETFLAGS, &flags)) {
++              flags |= FS_IMMUTABLE_FL;
++              ioctl(fd, FS_IOC_SETFLAGS, &flags);
+           }
+           break;
+       }
diff --git a/packaging/correct-uuid-link-lib.patch b/packaging/correct-uuid-link-lib.patch
deleted file mode 100644 (file)
index 9360773..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/utils/Makefile b/utils/Makefile
-index 44cb54f..be73993 100644
---- a/utils/Makefile
-+++ b/utils/Makefile
-@@ -51,7 +51,7 @@ isohdpfx.c: $(ISOHDPFX) isohdpfxarray.pl
-       $(PERL) isohdpfxarray.pl $(ISOHDPFX) > $@
- isohybrid: isohybrid.o isohdpfx.o
--      $(CC) $(LDFLAGS) -luuid -o $@ $^
-+      $(CC) $(LDFLAGS) -o $@ $^ -luuid
- gethostip: gethostip.o
-       $(CC) $(LDFLAGS) -o $@ $^
diff --git a/packaging/syslinux.changes b/packaging/syslinux.changes
deleted file mode 100644 (file)
index ff763c2..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-* Fri Dec  7 22:09:52 UTC 2012 - tracy.graydon@intel.com
-- Add syslinux.changes file, syslinux.manifest
index d06c7a9..019acb1 100644 (file)
@@ -1,29 +1,26 @@
 # -*- rpm -*-
 Summary: Kernel loader which uses a FAT, ext2/3 or iso9660 filesystem or a PXE network
 Name: syslinux
-Version: 4.05
+Version: 4.04
 Release: 1.2
-%if 0%{?suse_version}
-Vendor: openSUSE
-%endif
+VCS:     external/syslinux#submit/tizen_2.2/20130714.154204-0-g56211b861f0432f346a449a28b6c7e88809eef31
 License: GPLv2
 Url: http://syslinux.zytor.com/
 Group: System/Boot
-Source0: %{name}-%{version}.tar.gz
-Source1001: packaging/syslinux.manifest 
-Patch0: correct-uuid-link-lib.patch 
+Source0: ftp://ftp.kernel.org/pub/linux/utils/boot/syslinux/%{name}-%{version}.tar.gz
 ExclusiveArch: %{ix86} x86_64
 Buildroot: %{_tmppath}/%{name}-%{version}-root
-BuildRequires: nasm >= 0.98.39, perl, libuuid-devel
-%if 0%{?suse_version}
-BuildRequires: libuuid1
-%else
-BuildRequires: libuuid
-%endif
+BuildRequires: nasm >= 0.98.39, perl
 Source101: syslinux-rpmlintrc
+Source1001: packaging/syslinux.manifest 
+# >> gbp-patch-tags         # auto-added by gbp
+Patch0:    0001-btrfs-Correctly-determine-the-installation-subvolume.patch
+Patch1:    0002-syslinux-4.05-avoid-ext2_fs.h.patch
+# << gbp-patch-tags         # auto-added by gbp
+
 Autoreq: 0
 %ifarch x86_64
-Requires: mtools, libc.so.6()(64bit)
+Requires: mtools
 %define my_cc gcc
 %else
 Requires: mtools, libc.so.6
@@ -34,17 +31,17 @@ Requires: mtools, libc.so.6
 # a system bootloader, and may be necessary for system recovery.
 %define _sbindir /sbin
 
-%package devel
-Summary: Development environment for SYSLINUX add-on modules
-Group: Development/Libraries
-Requires: syslinux
-
 %description
 SYSLINUX is a suite of bootloaders, currently supporting DOS FAT
 filesystems, Linux ext2/ext3 filesystems (EXTLINUX), PXE network boots
 (PXELINUX), or ISO 9660 CD-ROMs (ISOLINUX).  It also includes a tool,
 MEMDISK, which loads legacy operating systems from these media.
 
+%package devel
+Summary: Development environment for SYSLINUX add-on modules
+Group: Development/Libraries
+Requires: syslinux
+
 %description devel
 The SYSLINUX boot loader contains an API, called COM32, for writing
 sophisticated add-on modules.  This package contains the libraries
@@ -70,7 +67,11 @@ booting in the /var/lib/tftpboot directory.
 
 %prep
 %setup -q -n syslinux-%{version}
+
+# >> gbp-apply-patches    # auto-added by gbp
 %patch0 -p1
+%patch1 -p1
+# << gbp-apply-patches    # auto-added by gbp
 
 %build
 cp %{SOURCE1001} .
@@ -93,9 +94,6 @@ rm -rf %{buildroot}
 %files
 %manifest syslinux.manifest
 %defattr(-,root,root)
-%doc COPYING NEWS doc/*
-%doc sample
-%doc %{_mandir}/man*/*
 %{_bindir}/*
 %dir %{_datadir}/syslinux
 %{_datadir}/syslinux/*.com
@@ -104,17 +102,16 @@ rm -rf %{buildroot}
 %{_datadir}/syslinux/*.bin
 %{_datadir}/syslinux/*.0
 %{_datadir}/syslinux/memdisk
-%dir %{_datadir}/syslinux/dosutil
-%{_datadir}/syslinux/dosutil/*
-%dir %{_datadir}/syslinux/diag
-%{_datadir}/syslinux/diag/*
-%{_sbindir}/extlinux
-/boot/extlinux
+%{_datadir}/syslinux/dosutil
 
 %files devel
 %manifest syslinux.manifest
 %defattr(-,root,root)
+%doc COPYING NEWS README doc/*
+%doc sample
+%doc %{_mandir}/man*/*
 %{_datadir}/syslinux/com32
+%{_datadir}/syslinux/diag
 
 %files extlinux
 %manifest syslinux.manifest
@@ -127,7 +124,6 @@ rm -rf %{buildroot}
 %defattr(-,root,root)
 /var/lib/tftpboot
 
-
 %post extlinux
 # If we have a /boot/extlinux.conf file, assume extlinux is our bootloader
 # and update it.
index 9e504d9..d7f439c 100644 (file)
@@ -15,8 +15,7 @@
 ##
 
 topdir = ..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/embedded.mk
+include $(topdir)/MCONFIG.embedded
 
 PPMTOLSS16 = $(topdir)/utils/ppmtolss16
 
diff --git a/syslinux.spec b/syslinux.spec
deleted file mode 100644 (file)
index 2fea49c..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-# -*- rpm -*-
-Summary: Kernel loader which uses a FAT, ext2/3 or iso9660 filesystem or a PXE network
-Name: syslinux
-Version: 4.05
-Release: 1.2
-%if 0%{?suse_version}
-Vendor: openSUSE
-%endif
-License: GPLv2
-Url: http://syslinux.zytor.com/
-Group: System/Boot
-#Source0: ftp://ftp.kernel.org/pub/linux/utils/boot/syslinux/%{name}-%{version}.tar.gz
-Source0: %{name}-%{version}.tar.gz
-Patch0: correct-uuid-link-lib.patch 
-ExclusiveArch: %{ix86} x86_64
-Buildroot: %{_tmppath}/%{name}-%{version}-root
-BuildRequires: nasm >= 0.98.39, perl, libuuid-devel
-%if 0%{?suse_version}
-BuildRequires: libuuid1
-%else
-BuildRequires: libuuid
-%endif
-Source101: syslinux-rpmlintrc
-Autoreq: 0
-%ifarch x86_64
-Requires: mtools, libc.so.6()(64bit)
-%define my_cc gcc
-%else
-Requires: mtools, libc.so.6
-%define my_cc gcc -m32
-%endif
-
-# NOTE: extlinux belongs in /sbin, not in /usr/sbin, since it is typically
-# a system bootloader, and may be necessary for system recovery.
-%define _sbindir /sbin
-
-%package devel
-Summary: Development environment for SYSLINUX add-on modules
-Group: Development/Libraries
-Requires: syslinux
-
-%description
-SYSLINUX is a suite of bootloaders, currently supporting DOS FAT
-filesystems, Linux ext2/ext3 filesystems (EXTLINUX), PXE network boots
-(PXELINUX), or ISO 9660 CD-ROMs (ISOLINUX).  It also includes a tool,
-MEMDISK, which loads legacy operating systems from these media.
-
-%description devel
-The SYSLINUX boot loader contains an API, called COM32, for writing
-sophisticated add-on modules.  This package contains the libraries
-necessary to compile such modules.
-
-%if "0%{?meego_version}" != "0" || 0%{?moblin_version} || 0%{?fedora_version} > 13
-%package extlinux
-Summary: The EXTLINUX bootloader, for booting the local system
-Group: System/Boot
-Requires: syslinux
-
-%description extlinux
-The EXTLINUX bootloader, for booting the local system, as well as all
-the SYSLINUX/PXELINUX modules in /boot.
-%endif
-
-%package tftpboot
-Summary: SYSLINUX modules in /var/lib/tftpboot, available for network booting
-Group: Applications/Internet
-Requires: syslinux
-
-%description tftpboot
-All the SYSLINUX/PXELINUX modules directly available for network
-booting in the /var/lib/tftpboot directory.
-
-%prep
-%setup -q -n syslinux-%{version}
-%patch0 -p1
-
-%build
-make CC='%{my_cc}' clean
-make CC='%{my_cc}' installer
-make CC='%{my_cc}' -C sample tidy
-
-%install
-rm -rf %{buildroot}
-make CC='%{my_cc}' install-all \
-       INSTALLROOT=%{buildroot} BINDIR=%{_bindir} SBINDIR=%{_sbindir} \
-       LIBDIR=%{_libdir} DATADIR=%{_datadir} \
-       MANDIR=%{_mandir} INCDIR=%{_includedir} \
-       TFTPBOOT=/var/lib/tftpboot EXTLINUXDIR=/boot/extlinux
-make CC='%{my_cc}' -C sample tidy
-
-%clean
-rm -rf %{buildroot}
-
-%files
-%defattr(-,root,root)
-%doc COPYING NEWS doc/*
-%doc sample
-%doc %{_mandir}/man*/*
-%{_bindir}/*
-%dir %{_datadir}/syslinux
-%{_datadir}/syslinux/*.com
-%{_datadir}/syslinux/*.exe
-%{_datadir}/syslinux/*.c32
-%{_datadir}/syslinux/*.bin
-%{_datadir}/syslinux/*.0
-%{_datadir}/syslinux/memdisk
-%dir %{_datadir}/syslinux/dosutil
-%{_datadir}/syslinux/dosutil/*
-%dir %{_datadir}/syslinux/diag
-%{_datadir}/syslinux/diag/*
-%if 0%{?fedora_version} || 0%{?suse_version}
-%{_sbindir}/extlinux/*
-/boot/extlinux
-%endif
-
-%files devel
-%defattr(-,root,root)
-%{_datadir}/syslinux/com32
-
-%if "0%{?meego_version}" != "0" || 0%{?moblin_version} || 0%{?fedora_version} > 13
-%files extlinux
-%defattr(-,root,root)
-%{_sbindir}/extlinux/*
-/boot/extlinux
-%endif
-
-%files tftpboot
-%defattr(-,root,root)
-/var/lib/tftpboot
-
-%if "0%{?meego_version}" != "0" || 0%{?moblin_version} || 0%{?fedora_version} > 13
-%post extlinux
-# If we have a /boot/extlinux.conf file, assume extlinux is our bootloader
-# and update it.
-if [ -f /boot/extlinux/extlinux.conf ]; then \
-       ln -sf /boot/extlinux/extlinux.conf /etc/extlinux.conf; \
-       extlinux --update /boot/extlinux ; \
-elif [ -f /boot/extlinux.conf ]; then \
-       mkdir -p /boot/extlinux && \
-       mv /boot/extlinux.conf /boot/extlinux/extlinux.conf && \
-       extlinux --update /boot/extlinux ; \
-fi
-%endif
index 44cb54f..455eb82 100644 (file)
 #
 
 topdir = ..
-MAKEDIR = $(topdir)/mk
-include $(MAKEDIR)/syslinux.mk
+include $(topdir)/MCONFIG
 
 CFLAGS   = $(GCCWARN) -Os -fomit-frame-pointer -D_FILE_OFFSET_BITS=64
-LDFLAGS  = -O2
+LDFLAGS  = -O2 -s
 
-C_TARGETS       = isohybrid gethostip memdiskfind
-SCRIPT_TARGETS  = mkdiskimage
-SCRIPT_TARGETS += isohybrid.pl  # about to be obsoleted
-ASIS            = keytab-lilo lss16toppm md5pass ppmtolss16 sha1pass \
-                  syslinux2ansi pxelinux-options
-
-TARGETS = $(C_TARGETS) $(SCRIPT_TARGETS)
+TARGETS         = mkdiskimage isohybrid gethostip memdiskfind
+TARGETS += isohybrid.pl  # about to be obsoleted
+ASIS     = keytab-lilo lss16toppm md5pass ppmtolss16 sha1pass syslinux2ansi \
+          pxelinux-options
 
 ISOHDPFX = ../mbr/isohdpfx.bin ../mbr/isohdpfx_f.bin ../mbr/isohdpfx_c.bin \
           ../mbr/isohdppx.bin ../mbr/isohdppx_f.bin ../mbr/isohdppx_c.bin
@@ -51,7 +47,7 @@ isohdpfx.c: $(ISOHDPFX) isohdpfxarray.pl
        $(PERL) isohdpfxarray.pl $(ISOHDPFX) > $@
 
 isohybrid: isohybrid.o isohdpfx.o
-       $(CC) $(LDFLAGS) -luuid -o $@ $^
+       $(CC) $(LDFLAGS) -o $@ $^
 
 gethostip: gethostip.o
        $(CC) $(LDFLAGS) -o $@ $^
@@ -73,7 +69,4 @@ install: installer
        mkdir -m 755 -p $(INSTALLROOT)$(BINDIR)
        install -m 755 $(TARGETS) $(ASIS) $(INSTALLROOT)$(BINDIR)
 
-strip:
-       $(STRIP) $(C_TARGETS)
-
 -include .*.d
index 81f29ef..bb35c23 100755 (executable)
Binary files a/utils/gethostip and b/utils/gethostip differ
index 52bbe86..b57b99d 100755 (executable)
Binary files a/utils/isohybrid and b/utils/isohybrid differ
index 1dcbaa1..7ee9a7f 100644 (file)
 #include <unistd.h>
 #include <sys/stat.h>
 #include <inttypes.h>
-#include <uuid/uuid.h>
 
 #include "isohybrid.h"
 
 char *prog = NULL;
 extern int opterr, optind;
-struct stat isostat;
-unsigned int padding = 0;
-
-uuid_t disk_uuid, part_uuid, iso_uuid;
 
 uint8_t mode = 0;
-enum { VERBOSE = 1 , EFI = 2 , MAC = 4};
+enum { VERBOSE = 1 };
 
 /* user options */
 uint16_t head = 64;             /* 1 <= head <= 256 */
@@ -66,150 +61,10 @@ uint16_t ve[16];
 uint32_t catoffset = 0;
 uint32_t c = 0, cc = 0, cs = 0;
 
-uint32_t psize = 0, isosize = 0;
-
 /* boot catalogue parameters */
 uint32_t de_lba = 0;
 uint16_t de_seg = 0, de_count = 0, de_mbz2 = 0;
 uint8_t de_boot = 0, de_media = 0, de_sys = 0, de_mbz1 = 0;
-uint32_t efi_lba = 0, mac_lba = 0;
-uint16_t efi_count = 0, mac_count = 0;
-uint8_t efi_boot = 0, efi_media = 0, efi_sys = 0;
-
-int apm_parts = 3;
-
-uint8_t afp_header[] = { 0x45, 0x52, 0x08, 0x00, 0x00, 0x00, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-
-uuid_t efi_system_partition = {0xC1, 0x2A, 0x73, 0x28, 0xF8, 0x1F, 0x11, 0xD2, 0xBA, 0x4B, 0x00, 0xA0, 0xC9, 0x3E, 0xC9, 0x3B};
-uuid_t basic_partition = {0xEB,0xD0,0xA0,0xA2,0xB9,0xE5,0x44,0x33,0x87,0xC0,0x68,0xB6,0xB7,0x26,0x99,0xC7};
-uuid_t hfs_partition = {0x48, 0x46, 0x53, 0x00, 0x00, 0x00, 0x11, 0xAA, 0xAA, 0x11, 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC};
-
-uint32_t crc_tab[256] =
-{
-    0, 0x77073096, 0xEE0E612C, 0x990951BA,
-    0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
-    0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
-    0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
-    0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
-    0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
-    0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
-    0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
-    0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
-    0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
-    0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
-    0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
-    0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
-    0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
-    0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
-    0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
-    0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
-    0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
-    0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
-    0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
-    0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
-    0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
-    0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
-    0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
-    0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
-    0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
-    0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
-    0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
-    0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
-    0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
-    0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
-    0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
-    0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
-    0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
-    0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
-    0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
-    0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
-    0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
-    0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
-    0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
-    0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
-    0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
-    0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
-    0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
-    0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
-    0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
-    0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
-    0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
-    0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
-    0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
-    0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
-    0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
-    0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
-    0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
-    0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
-    0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
-    0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
-    0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
-    0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
-    0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
-    0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
-    0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
-    0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
-    0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
-};
-
-struct iso_primary_descriptor {
-    uint8_t ignore [80];
-    uint32_t size;
-    uint8_t ignore2 [44];
-    uint16_t block_size;
-};
-
-struct gpt_header {
-    uint64_t signature;
-    uint32_t revision;
-    uint32_t headerSize;
-    uint32_t headerCRC;
-    uint32_t reserved;
-    uint64_t currentLBA;
-    uint64_t backupLBA;
-    uint64_t firstUsableLBA;
-    uint64_t lastUsableLBA;
-    uuid_t diskGUID;
-    uint64_t partitionEntriesLBA;
-    uint32_t numParts;
-    uint32_t sizeOfPartitionEntries;
-    uint32_t partitionEntriesCRC;
-    uint8_t reserved2[420];
-};
-
-struct gpt_part_header {
-    uuid_t partTypeGUID;
-    uuid_t partGUID;
-    uint64_t firstLBA;
-    uint64_t lastLBA;
-    uint64_t attributes;
-    uint16_t name[36];
-};
-
-#define APM_OFFSET 2048
-
-struct apple_part_header {
-    uint16_t        signature;      /* expected to be MAC_PARTITION_MAGIC */
-    uint16_t        res1;
-    uint32_t        map_count;      /* # blocks in partition map */
-    uint32_t        start_block;    /* absolute starting block # of partition */
-    uint32_t        block_count;    /* number of blocks in partition */
-    char            name[32];       /* partition name */
-    char            type[32];       /* string type description */
-    uint32_t        data_start;     /* rel block # of first data block */
-    uint32_t        data_count;     /* number of data blocks */
-    uint32_t        status;         /* partition status bits */
-    uint32_t        boot_start;
-    uint32_t        boot_count;
-    uint32_t        boot_load;
-    uint32_t        boot_load2;
-    uint32_t        boot_entry;
-    uint32_t        boot_entry2;
-    uint32_t        boot_cksum;
-    char            processor[16];  /* Contains 680x0, x=0,2,3,4; or empty */
-    uint32_t        driver_sig;
-    char            _padding[372];
-};
 
 
 void
@@ -234,8 +89,6 @@ printh(void)
     printf(FMT, "   -o --offset", "Specify partition offset (default 0)");
     printf(FMT, "   -t --type", "Specify partition type (default 0x17)");
     printf(FMT, "   -i --id", "Specify MBR ID (default random)");
-    printf(FMT, "   -u --uefi", "Build EFI bootable image");
-    printf(FMT, "   -m --mac", "Add AFP table support");
 
     printf("\n");
     printf(FMT, "   --forcehd0", "Assume we are loaded as disk ID 0");
@@ -255,7 +108,6 @@ printh(void)
 int
 check_option(int argc, char *argv[])
 {
-    char *err = NULL;
     int n = 0, ind = 0;
 
     const char optstr[] = ":h:s:e:o:t:i:fcp?vV";
@@ -269,8 +121,6 @@ check_option(int argc, char *argv[])
         { "forcehd0", no_argument, NULL, 'f' },
         { "ctrlhd0", no_argument, NULL, 'c' },
         { "partok", no_argument, NULL, 'p'},
-       { "uefi", no_argument, NULL, 'u'},
-       { "mac", no_argument, NULL, 'm'},
 
         { "help", no_argument, NULL, '?' },
         { "verbose", no_argument, NULL, 'v' },
@@ -285,38 +135,32 @@ check_option(int argc, char *argv[])
         switch (n)
         {
         case 'h':
-            head = strtoul(optarg, &err, 0);
-            if (head < 1 || head > 256)
+            if (!sscanf(optarg, "%hu", &head) || head < 1 || head > 256)
                 errx(1, "invalid head: `%s', 1 <= head <= 256", optarg);
             break;
 
         case 's':
-            sector = strtoul(optarg, &err, 0);
-            if (sector < 1 || sector > 63)
+            if (!sscanf(optarg, "%hhu", &sector) || sector < 1 || sector > 63)
                 errx(1, "invalid sector: `%s', 1 <= sector <= 63", optarg);
             break;
 
         case 'e':
-            entry = strtoul(optarg, &err, 0);
-            if (entry < 1 || entry > 4)
+            if (!sscanf(optarg, "%hhu", &entry) || entry < 1 || entry > 4)
                 errx(1, "invalid entry: `%s', 1 <= entry <= 4", optarg);
             break;
 
         case 'o':
-            offset = strtoul(optarg, &err, 0);
-            if (*err || offset > 64)
+            if (!sscanf(optarg, "%hhu", &offset) || offset > 64)
                 errx(1, "invalid offset: `%s', 0 <= offset <= 64", optarg);
             break;
 
         case 't':
-            type = strtoul(optarg, &err, 0);
-            if (*err || type > 255)
+            if (!sscanf(optarg, "%hu", &type) || type > 255)
                 errx(1, "invalid type: `%s', 0 <= type <= 255", optarg);
             break;
 
         case 'i':
-            id = strtoul(optarg, &err, 0);
-            if (*err)
+            if (!sscanf(optarg, "%u", &id))
                 errx(1, "invalid id: `%s'", optarg);
             break;
 
@@ -332,14 +176,6 @@ check_option(int argc, char *argv[])
             partok = 1;
             break;
 
-       case 'u':
-           mode |= EFI;
-           break;
-
-       case 'm':
-           mode |= MAC;
-           break;
-
         case 'v':
             mode |= VERBOSE;
             break;
@@ -364,33 +200,6 @@ check_option(int argc, char *argv[])
     return optind;
 }
 
-uint16_t
-bendian_short(const uint16_t s)
-{
-    uint16_t r = 1;
-
-    if (!*(uint8_t *)&r)
-        return s;
-
-    r = (s & 0x00FF) << 8 | (s & 0xFF00) >> 8;
-
-    return r;
-}
-
-
-uint32_t
-bendian_int(const uint32_t s)
-{
-    uint32_t r = 1;
-
-    if (!*(uint8_t *)&r)
-        return s;
-
-    r = (s & 0x000000FF) << 24 | (s & 0xFF000000) >> 24
-        | (s & 0x0000FF00) << 8 | (s & 0x00FF0000) >> 8;
-
-    return r;
-}
 
 uint16_t
 lendian_short(const uint16_t s)
@@ -420,22 +229,6 @@ lendian_int(const uint32_t s)
     return r;
 }
 
-uint64_t
-lendian_64(const uint64_t s)
-{
-       uint64_t r = 1;
-
-       if (*(uint8_t *)&r)
-               return s;
-
-       r = (s & 0x00000000000000FF) << 56 | (s & 0xFF00000000000000) >> 56
-            | (s & 0x000000000000FF00) << 40 | (s & 0x00FF000000000000) >> 40
-            | (s & 0x0000000000FF0000) << 24 | (s & 0x0000FF0000000000) >> 24
-            | (s & 0x00000000FF000000) << 8 | (s & 0x000000FF00000000) >> 8;
-
-       return r;
-}
-
 
 int
 check_banner(const uint8_t *buf)
@@ -514,43 +307,6 @@ read_catalogue(const uint8_t *buf)
 }
 
 
-int
-read_efi_section(const uint8_t *buf)
-{
-       unsigned char header_indicator;
-       unsigned char platform_id;
-       short count;
-
-       memcpy(&header_indicator, buf++, 1);
-       memcpy(&platform_id, buf++, 1);
-
-       memcpy(&count, buf, 2);
-       count = lendian_short(count);
-       buf += 2;
-
-       if (platform_id == 0xef)
-               return 0;
-
-       return 1;
-}
-
-int
-read_efi_catalogue(const uint8_t *buf, uint16_t *count, uint32_t *lba)
-{
-    buf += 6;
-
-    memcpy(count, buf, 2);
-    *count = lendian_short(*count);
-    buf += 2;
-
-    memcpy(lba, buf, 4);
-    *lba = lendian_int(*lba);
-    buf += 6;
-
-    return 0;
-}
-
-
 void
 display_catalogue(void)
 {
@@ -564,11 +320,12 @@ display_catalogue(void)
     printf("de_mbz2: %hu\n", de_mbz2);
 }
 
+
 int
 initialise_mbr(uint8_t *mbr)
 {
     int i = 0;
-    uint32_t tmp = 0;
+    uint32_t psize = 0, tmp = 0;
     uint8_t ptype = 0, *rbm = mbr;
     uint8_t bhead = 0, bsect = 0, bcyle = 0;
     uint8_t ehead = 0, esect = 0, ecyle = 0;
@@ -576,11 +333,6 @@ initialise_mbr(uint8_t *mbr)
     extern unsigned char isohdpfx[][MBRSIZE];
 
     memcpy(mbr, &isohdpfx[hd0 + 3 * partok], MBRSIZE);
-
-    if (mode & MAC) {
-       memcpy(mbr, afp_header, sizeof(afp_header));
-    }
-
     mbr += MBRSIZE;                                 /* offset 432 */
 
     tmp = lendian_int(de_lba * 4);
@@ -642,6 +394,7 @@ initialise_mbr(uint8_t *mbr)
     return mbr - rbm;
 }
 
+
 void
 display_mbr(const uint8_t *mbr, size_t len)
 {
@@ -671,179 +424,14 @@ display_mbr(const uint8_t *mbr, size_t len)
 }
 
 
-uint32_t chksum_crc32 (unsigned char *block, unsigned int length)
-{
-       register unsigned long crc;
-       unsigned long i;
-
-       crc = 0xFFFFFFFF;
-       for (i = 0; i < length; i++)
-       {
-               crc = ((crc >> 8) & 0x00FFFFFF) ^ crc_tab[(crc ^ *block++) & 0xFF];
-       }
-       return (crc ^ 0xFFFFFFFF);
-}
-
-void
-reverse_uuid(uuid_t uuid)
-{
-       uint8_t t, *p = (uint8_t *)uuid;
-
-       t = p[0]; p[0] = p[3]; p[3] = t;
-       t = p[1]; p[1] = p[2]; p[2] = t;
-       t = p[4]; p[4] = p[5]; p[5] = t;
-       t = p[6]; p[6] = p[7]; p[7] = t;
-}
-
-void
-initialise_gpt(uint8_t *gpt, uint32_t current, uint32_t alternate, int primary)
-{
-    struct gpt_header *header = (struct gpt_header *)gpt;
-    struct gpt_part_header *part;
-    int hole = 0;
-    int gptsize = 128 / 4 + 2;
-
-    if (mac_lba) {
-       /* 2048 bytes per partition, plus round to 2048 boundary */
-       hole = (apm_parts * 4) + 2;
-    }
-
-    if (primary) {
-       uuid_generate(disk_uuid);
-       reverse_uuid(disk_uuid);
-    }
-
-    header->signature = lendian_64(0x5452415020494645);
-    header->revision = lendian_int(0x010000);
-    header->headerSize = lendian_int(0x5c);
-    header->currentLBA = lendian_64(current);
-    header->backupLBA = lendian_64(alternate);
-    header->firstUsableLBA = lendian_64(gptsize + hole);
-    header->lastUsableLBA = lendian_64((isostat.st_size + padding)/512 -
-                                      gptsize);
-    if (primary)
-       header->partitionEntriesLBA = lendian_64(0x02 + hole);
-    else
-       header->partitionEntriesLBA = lendian_64(current - (128 / 4));
-    header->numParts = lendian_int(0x80);
-    header->sizeOfPartitionEntries = lendian_int(0x80);
-    memcpy(header->diskGUID, disk_uuid, sizeof(uuid_t));
-
-    if (primary)
-       gpt += sizeof(struct gpt_header) + hole * 512;
-    else
-       gpt -= header->sizeOfPartitionEntries * header->numParts;
-
-    part = (struct gpt_part_header *)gpt;
-    if (primary) {
-       uuid_generate(part_uuid);
-       uuid_generate(iso_uuid);
-       reverse_uuid(part_uuid);
-       reverse_uuid(iso_uuid);
-    }
-
-    memcpy(part->partGUID, iso_uuid, sizeof(uuid_t));
-    memcpy(part->partTypeGUID, basic_partition, sizeof(uuid_t));
-    part->firstLBA = lendian_64(0);
-    part->lastLBA = lendian_64(psize);
-    memcpy(part->name, "ISOHybrid ISO", 28);
-
-    gpt += sizeof(struct gpt_part_header);
-    part++;
-
-    memcpy(part->partGUID, part_uuid, sizeof(uuid_t));
-    memcpy(part->partTypeGUID, basic_partition, sizeof(uuid_t));
-    part->firstLBA = lendian_64(efi_lba * 4);
-    part->lastLBA = lendian_64(part->firstLBA + efi_count - 1);
-    memcpy(part->name, "ISOHybrid", 20);
-
-    gpt += sizeof(struct gpt_part_header);
-
-    if (mac_lba) {
-       gpt += sizeof(struct gpt_part_header);
-
-       part++;
-
-       memcpy(part->partGUID, part_uuid, sizeof(uuid_t));
-       memcpy(part->partTypeGUID, hfs_partition, sizeof(uuid_t));
-       part->firstLBA = lendian_64(mac_lba * 4);
-       part->lastLBA = lendian_64(part->firstLBA + mac_count - 1);
-       memcpy(part->name, "ISOHybrid", 20);
-
-       part--;
-    }
-
-    part--;
-
-    header->partitionEntriesCRC = lendian_int (chksum_crc32((uint8_t *)part,
-                          header->numParts * header->sizeOfPartitionEntries));
-
-    header->headerCRC = lendian_int(chksum_crc32((uint8_t *)header,
-                                                header->headerSize));
-}
-
-void
-initialise_apm(uint8_t *gpt, uint32_t start)
-{
-    struct apple_part_header *part = (struct apple_part_header *)gpt;
-
-    part->signature = bendian_short(0x504d);
-    part->map_count = bendian_int(apm_parts);
-    part->start_block = bendian_int(1);
-    part->block_count = bendian_int(0x10);
-    strcpy(part->name, "Apple");
-    strcpy(part->type, "Apple_partition_map");
-    part->data_start = bendian_int(0);
-    part->data_count = bendian_int(10);
-    part->status = bendian_int(0x03);
-
-    part = (struct apple_part_header *)(gpt + 2048);
-
-    part->signature = bendian_short(0x504d);
-    part->map_count = bendian_int(3);
-    part->start_block = bendian_int(efi_lba);
-    part->block_count = bendian_int(efi_count);
-    strcpy(part->name, "EFI");
-    strcpy(part->type, "Apple_HFS");
-    part->data_start = bendian_int(0);
-    part->data_count = bendian_int(efi_count);
-    part->status = bendian_int(0x33);
-
-    part = (struct apple_part_header *)(gpt + 4096);
-
-    if (mac_lba)
-    {
-       part->signature = bendian_short(0x504d);
-       part->map_count = bendian_int(3);
-       part->start_block = bendian_int(mac_lba);
-       part->block_count = bendian_int(mac_count);
-       strcpy(part->name, "EFI");
-       strcpy(part->type, "Apple_HFS");
-       part->data_start = bendian_int(0);
-       part->data_count = bendian_int(mac_count);
-       part->status = bendian_int(0x33);
-    } else {
-       part->signature = bendian_short(0x504d);
-       part->map_count = bendian_int(3);
-       part->start_block = bendian_int((start/2048) + 10);
-       part->block_count = bendian_int(efi_lba - start/2048 - 10);
-       strcpy(part->name, "ISO");
-       strcpy(part->type, "Apple_Free");
-       part->data_start = bendian_int(0);
-       part->data_count = bendian_int(efi_lba - start/2048 - 10);
-       part->status = bendian_int(0x01);
-    }
-}
-
 int
 main(int argc, char *argv[])
 {
     int i = 0;
     FILE *fp = NULL;
+    struct stat isostat;
     uint8_t *buf = NULL, *bufz = NULL;
-    int cylsize = 0, frac = 0;
-    size_t orig_gpt_size, free_space, gpt_size;
-    struct iso_primary_descriptor descriptor;
+    int cylsize = 0, frac = 0, padding = 0;
 
     prog = strcpy(alloca(strlen(argv[0]) + 1), argv[0]);
     i = check_option(argc, argv);
@@ -855,21 +443,10 @@ main(int argc, char *argv[])
         usage();
         return 1;
     }
-
-    if ((mode & EFI) && offset)
-       errx(1, "%s: --offset is invalid with UEFI images\n", argv[0]);
-
     srand(time(NULL) << (getppid() << getpid()));
 
     if (!(fp = fopen(argv[0], "r+")))
         err(1, "could not open file `%s'", argv[0]);
-
-    if (fseek(fp, (16 << 11), SEEK_SET))
-        err(1, "%s: seek error - 0", argv[0]);
-
-    if (fread(&descriptor, sizeof(char), sizeof(descriptor), fp) != sizeof(descriptor))
-        err(1, "%s: read error - 0", argv[0]);
-
     if (fseek(fp, 17 * 2048, SEEK_SET))
         err(1, "%s: seek error - 1", argv[0]);
 
@@ -901,40 +478,6 @@ main(int argc, char *argv[])
     if (mode & VERBOSE)
         display_catalogue();
 
-    buf += 32;
-
-    if (mode & EFI)
-    {
-       if (!read_efi_section(buf)) {
-           buf += 32;
-           if (!read_efi_catalogue(buf, &efi_count, &efi_lba) && efi_lba) {
-               offset = 1;
-               type = 0xee;
-           } else {
-               errx(1, "%s: invalid efi catalogue", argv[0]);
-           }
-       } else {
-           errx(1, "%s: unable to find efi image", argv[0]);
-       }
-    }
-
-    buf += 32;
-
-    if (mode & MAC)
-    {
-       if (!read_efi_section(buf)) {
-           buf += 32;
-           if (!read_efi_catalogue(buf, &mac_count, &mac_lba) && mac_lba) {
-               offset = 1;
-               type = 0xee;
-           } else {
-               errx(1, "%s: invalid efi catalogue", argv[0]);
-           }
-       } else {
-           errx(1, "%s: unable to find mac efi image", argv[0]);
-       }
-    }
-
     if (fseek(fp, (de_lba * 2048 + 0x40), SEEK_SET))
         err(1, "%s: seek error - 3", argv[0]);
 
@@ -951,9 +494,6 @@ main(int argc, char *argv[])
     if (stat(argv[0], &isostat))
         err(1, "%s", argv[0]);
 
-    isosize = lendian_int(descriptor.size) * lendian_short(descriptor.block_size);
-    free_space = isostat.st_size - isosize;
-
     cylsize = head * sector * 512;
     frac = isostat.st_size % cylsize;
     padding = (frac > 0) ? cylsize - frac : 0;
@@ -961,7 +501,7 @@ main(int argc, char *argv[])
     if (mode & VERBOSE)
         printf("imgsize: %zu, padding: %d\n", (size_t)isostat.st_size, padding);
 
-    cc = c = ( isostat.st_size + padding) / cylsize;
+    cc = c = (isostat.st_size + padding) / cylsize;
     if (c > 1024)
     {
         warnx("Warning: more than 1024 cylinders: %d", c);
@@ -1001,62 +541,6 @@ main(int argc, char *argv[])
     if (fwrite(buf, sizeof(char), i, fp) != (size_t)i)
         err(1, "%s: write error - 1", argv[0]);
 
-    if (efi_lba) {
-       reverse_uuid(basic_partition);
-       reverse_uuid(hfs_partition);
-
-       /* 512 byte header, 128 entries of 128 bytes */
-       orig_gpt_size = gpt_size = 512 + (128 * 128);
-
-       /* Leave space for the APM if necessary */
-       if (mac_lba)
-           gpt_size += (4 * 2048);
-
-       buf = calloc(gpt_size, sizeof(char));
-       memset(buf, 0, gpt_size);
-
-       /*
-        * We need to ensure that we have enough space for the secondary GPT.
-        * Unlike the primary, this doesn't need a hole for the APM. We still
-        * want to be 1MB aligned so just bump the padding by a megabyte.
-        */
-       if (free_space < orig_gpt_size && padding < orig_gpt_size) {
-           padding += 1024 * 1024;
-       }
-
-       /*
-        * Determine the size of the ISO filesystem. This will define the size
-        * of the partition that covers it.
-        */
-       psize = isosize / 512;
-
-       /*
-        * Primary GPT starts at sector 1, secondary GPT starts at 1 sector
-        * before the end of the image
-        */
-       initialise_gpt(buf, 1, (isostat.st_size + padding - 1024) / 512, 1);
-
-       if (fseek(fp, 512, SEEK_SET))
-           err(1, "%s: seek error - 6", argv[0]);
-
-       if (fwrite(buf, sizeof(char), gpt_size, fp) != (size_t)gpt_size)
-           err(1, "%s: write error - 2", argv[0]);
-    }
-
-    if (mac_lba)
-    {
-       /* Apple partition entries filling 2048 bytes each */
-       int apm_size = apm_parts * 2048;
-
-       buf = realloc(buf, apm_size);
-       memset(buf, 0, apm_size);
-
-       initialise_apm(buf, APM_OFFSET);
-
-       fseek(fp, APM_OFFSET, SEEK_SET);
-       fwrite(buf, sizeof(char), apm_size, fp);
-    }
-
     if (padding)
     {
         if (fsync(fileno(fp)))
@@ -1066,30 +550,6 @@ main(int argc, char *argv[])
             err(1, "%s: could not add padding bytes", argv[0]);
     }
 
-    if (efi_lba) {
-       buf = realloc(buf, orig_gpt_size);
-       memset(buf, 0, orig_gpt_size);
-
-       buf += orig_gpt_size - sizeof(struct gpt_header);
-
-       initialise_gpt(buf, (isostat.st_size + padding - 1024) / 512, 1, 0);
-
-       /* Shift back far enough to write the 128 GPT entries */
-       buf -= 128 * sizeof(struct gpt_part_header);
-
-       /*
-        * Seek far enough back that the gpt header is 512 bytes before the
-        * end of the image
-        */
-
-       if (fseek(fp, (isostat.st_size + padding) - orig_gpt_size - 512,
-                 SEEK_SET))
-           err(1, "%s: seek error - 8", argv[0]);
-
-       if (fwrite(buf, sizeof(char), orig_gpt_size, fp) != orig_gpt_size)
-           err(1, "%s: write error - 4", argv[0]);
-    }
-
     free(buf);
     fclose(fp);
 
index eecf1ca..826e90c 100644 (file)
@@ -20,7 +20,7 @@
  *
  */
 
-#define VERSION     "0.12"
+#define VERSION     "0.11"
 #define BUFSIZE     2048
 #define MBRSIZE      432
 
index 9bbd7d0..333a2dd 100755 (executable)
@@ -256,11 +256,43 @@ close(FILE);
 
 exit 0;
 __END__
-33 ed 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
-90 90 90 90 90 90 90 33 ed fa 8e d5 bc 0 7c fb fc 66 31 db 66 31 c9 66 53
-66 51 6 57 8e dd 8e c5 52 be 0 7c bf 0 6 b9 0 1 f3 a5 ea 4b 6 0 0 52 b4 41
+33 ed fa 8e d5 bc 0 7c fb fc 66 31 db 66 31 c9 66 53 66 51 6 57 8e dd 8e c5
+52 be 0 7c bf 0 6 b9 0 1 f3 a5 ea 2b 6 0 0 52 b4 41 bb aa 55 31 c9 30 f6 f9
+cd 13 72 16 81 fb 55 aa 75 10 83 e1 1 74 b 66 c7 6 d1 6 b4 42 eb 15 eb 0 5a
+51 b4 8 cd 13 83 e1 3f 5b 51 f b6 c6 40 50 f7 e1 53 52 50 bb 0 7c b9 4 0 66
+a1 b0 7 e8 44 0 f 82 80 0 66 40 80 c7 2 e2 f2 66 81 3e 40 7c fb c0 78 70 75
+9 fa bc ec 7b ea 44 7c 0 0 e8 83 0 69 73 6f 6c 69 6e 75 78 2e 62 69 6e 20
+6d 69 73 73 69 6e 67 20 6f 72 20 63 6f 72 72 75 70 74 2e d a 66 60 66 31 d2
+66 3 6 f8 7b 66 13 16 fc 7b 66 52 66 50 6 53 6a 1 6a 10 89 e6 66 f7 36 e8
+7b c0 e4 6 88 e1 88 c5 92 f6 36 ee 7b 88 c6 8 e1 41 b8 1 2 8a 16 f2 7b cd
+13 8d 64 10 66 61 c3 e8 1e 0 4f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65
+6d 20 6c 6f 61 64 20 65 72 72 6f 72 2e d a 5e ac b4 e 8a 3e 62 4 b3 7 cd 10
+3c a 75 f1 cd 18 f4 eb fd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+*
+33 ed fa 8e d5 bc 0 7c fb fc 66 31 db 66 31 c9 66 53 66 51 6 57 8e dd 8e c5
+b2 80 52 be 0 7c bf 0 6 b9 0 1 f3 a5 ea 2d 6 0 0 52 b4 41 bb aa 55 31 c9 30
+f6 f9 cd 13 72 16 81 fb 55 aa 75 10 83 e1 1 74 b 66 c7 6 d3 6 b4 42 eb 15
+eb 0 5a 51 b4 8 cd 13 83 e1 3f 5b 51 f b6 c6 40 50 f7 e1 53 52 50 bb 0 7c
+b9 4 0 66 a1 b0 7 e8 44 0 f 82 80 0 66 40 80 c7 2 e2 f2 66 81 3e 40 7c fb
+c0 78 70 75 9 fa bc ec 7b ea 44 7c 0 0 e8 83 0 69 73 6f 6c 69 6e 75 78 2e
+62 69 6e 20 6d 69 73 73 69 6e 67 20 6f 72 20 63 6f 72 72 75 70 74 2e d a 66
+60 66 31 d2 66 3 6 f8 7b 66 13 16 fc 7b 66 52 66 50 6 53 6a 1 6a 10 89 e6
+66 f7 36 e8 7b c0 e4 6 88 e1 88 c5 92 f6 36 ee 7b 88 c6 8 e1 41 b8 1 2 8a
+16 f2 7b cd 13 8d 64 10 66 61 c3 e8 1e 0 4f 70 65 72 61 74 69 6e 67 20 73
+79 73 74 65 6d 20 6c 6f 61 64 20 65 72 72 6f 72 2e d a 5e ac b4 e 8a 3e 62
+4 b3 7 cd 10 3c a 75 f1 cd 18 f4 eb fd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 
+*
+33 ed fa 8e d5 bc 0 7c fb fc 66 31 db 66 31 c9 66 53 66 51 6 57 8e dd 8e c5
+f6 6 17 4 4 74 2 b2 80 52 be 0 7c bf 0 6 b9 0 1 f3 a5 ea 34 6 0 0 52 b4 41
 bb aa 55 31 c9 30 f6 f9 cd 13 72 16 81 fb 55 aa 75 10 83 e1 1 74 b 66 c7 6
-f1 6 b4 42 eb 15 eb 0 5a 51 b4 8 cd 13 83 e1 3f 5b 51 f b6 c6 40 50 f7 e1
+da 6 b4 42 eb 15 eb 0 5a 51 b4 8 cd 13 83 e1 3f 5b 51 f b6 c6 40 50 f7 e1
 53 52 50 bb 0 7c b9 4 0 66 a1 b0 7 e8 44 0 f 82 80 0 66 40 80 c7 2 e2 f2 66
 81 3e 40 7c fb c0 78 70 75 9 fa bc ec 7b ea 44 7c 0 0 e8 83 0 69 73 6f 6c
 69 6e 75 78 2e 62 69 6e 20 6d 69 73 73 69 6e 67 20 6f 72 20 63 6f 72 72 75
@@ -271,48 +303,47 @@ f1 6 b4 42 eb 15 eb 0 5a 51 b4 8 cd 13 83 e1 3f 5b 51 f b6 c6 40 50 f7 e1
 e 8a 3e 62 4 b3 7 cd 10 3c a 75 f1 cd 18 f4 eb fd 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 *
-33 ed 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
-90 90 90 90 90 90 90 33 ed fa 8e d5 bc 0 7c fb fc 66 31 db 66 31 c9 66 53
-66 51 6 57 8e dd 8e c5 b2 80 52 be 0 7c bf 0 6 b9 0 1 f3 a5 ea 4d 6 0 0 52
-b4 41 bb aa 55 31 c9 30 f6 f9 cd 13 72 16 81 fb 55 aa 75 10 83 e1 1 74 b 66
-c7 6 f3 6 b4 42 eb 15 eb 0 5a 51 b4 8 cd 13 83 e1 3f 5b 51 f b6 c6 40 50 f7
-e1 53 52 50 bb 0 7c b9 4 0 66 a1 b0 7 e8 44 0 f 82 80 0 66 40 80 c7 2 e2 f2
-66 81 3e 40 7c fb c0 78 70 75 9 fa bc ec 7b ea 44 7c 0 0 e8 83 0 69 73 6f
-6c 69 6e 75 78 2e 62 69 6e 20 6d 69 73 73 69 6e 67 20 6f 72 20 63 6f 72 72
-75 70 74 2e d a 66 60 66 31 d2 66 3 6 f8 7b 66 13 16 fc 7b 66 52 66 50 6 53
-6a 1 6a 10 89 e6 66 f7 36 e8 7b c0 e4 6 88 e1 88 c5 92 f6 36 ee 7b 88 c6 8
-e1 41 b8 1 2 8a 16 f2 7b cd 13 8d 64 10 66 61 c3 e8 1e 0 4f 70 65 72 61 74
-69 6e 67 20 73 79 73 74 65 6d 20 6c 6f 61 64 20 65 72 72 6f 72 2e d a 5e ac
-b4 e 8a 3e 62 4 b3 7 cd 10 3c a 75 f1 cd 18 f4 eb fd 0 0 0 0 0 0 0 0 0 0 0
+33 ed fa 8e d5 bc 0 7c fb fc 66 31 db 66 31 c9 21 f6 74 26 f6 4 7f 75 21 38
+4c 4 74 1c 66 3d 21 47 50 58 75 10 80 7c 4 ed 75 a 66 8b 4c 34 66 8b 5c 38
+eb 4 66 8b 4c 8 66 53 66 51 6 57 8e dd 8e c5 52 be 0 7c bf 0 6 b9 0 1 f3 a5
+ea 55 6 0 0 52 b4 41 bb aa 55 31 c9 30 f6 f9 cd 13 72 16 81 fb 55 aa 75 10
+83 e1 1 74 b 66 c7 6 fb 6 b4 42 eb 15 eb 0 5a 51 b4 8 cd 13 83 e1 3f 5b 51
+f b6 c6 40 50 f7 e1 53 52 50 bb 0 7c b9 4 0 66 a1 b0 7 e8 44 0 f 82 80 0 66
+40 80 c7 2 e2 f2 66 81 3e 40 7c fb c0 78 70 75 9 fa bc ec 7b ea 44 7c 0 0
+e8 83 0 69 73 6f 6c 69 6e 75 78 2e 62 69 6e 20 6d 69 73 73 69 6e 67 20 6f
+72 20 63 6f 72 72 75 70 74 2e d a 66 60 66 31 d2 66 3 6 f8 7b 66 13 16 fc
+7b 66 52 66 50 6 53 6a 1 6a 10 89 e6 66 f7 36 e8 7b c0 e4 6 88 e1 88 c5 92
+f6 36 ee 7b 88 c6 8 e1 41 b8 1 2 8a 16 f2 7b cd 13 8d 64 10 66 61 c3 e8 1e
+0 4f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 6c 6f 61 64 20 65 72
+72 6f 72 2e d a 5e ac b4 e 8a 3e 62 4 b3 7 cd 10 3c a 75 f1 cd 18 f4 eb fd
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 *
-33 ed 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
-90 90 90 90 90 90 90 33 ed fa 8e d5 bc 0 7c fb fc 66 31 db 66 31 c9 66 53
-66 51 6 57 8e dd 8e c5 f6 6 17 4 4 74 2 b2 80 52 be 0 7c bf 0 6 b9 0 1 f3
-a5 ea 54 6 0 0 52 b4 41 bb aa 55 31 c9 30 f6 f9 cd 13 72 16 81 fb 55 aa 75
-10 83 e1 1 74 b 66 c7 6 fa 6 b4 42 eb 15 eb 0 5a 51 b4 8 cd 13 83 e1 3f 5b
-51 f b6 c6 40 50 f7 e1 53 52 50 bb 0 7c b9 4 0 66 a1 b0 7 e8 44 0 f 82 80
-0 66 40 80 c7 2 e2 f2 66 81 3e 40 7c fb c0 78 70 75 9 fa bc ec 7b ea 44 7c
-0 0 e8 83 0 69 73 6f 6c 69 6e 75 78 2e 62 69 6e 20 6d 69 73 73 69 6e 67 20
-6f 72 20 63 6f 72 72 75 70 74 2e d a 66 60 66 31 d2 66 3 6 f8 7b 66 13 16
-fc 7b 66 52 66 50 6 53 6a 1 6a 10 89 e6 66 f7 36 e8 7b c0 e4 6 88 e1 88 c5
-92 f6 36 ee 7b 88 c6 8 e1 41 b8 1 2 8a 16 f2 7b cd 13 8d 64 10 66 61 c3 e8
-1e 0 4f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 6c 6f 61 64 20 65
-72 72 6f 72 2e d a 5e ac b4 e 8a 3e 62 4 b3 7 cd 10 3c a 75 f1 cd 18 f4 eb
-fd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+33 ed fa 8e d5 bc 0 7c fb fc 66 31 db 66 31 c9 21 f6 74 26 f6 4 7f 75 21 38
+4c 4 74 1c 66 3d 21 47 50 58 75 10 80 7c 4 ed 75 a 66 8b 4c 34 66 8b 5c 38
+eb 4 66 8b 4c 8 66 53 66 51 6 57 8e dd 8e c5 b2 80 52 be 0 7c bf 0 6 b9 0
+1 f3 a5 ea 57 6 0 0 52 b4 41 bb aa 55 31 c9 30 f6 f9 cd 13 72 16 81 fb 55
+aa 75 10 83 e1 1 74 b 66 c7 6 fd 6 b4 42 eb 15 eb 0 5a 51 b4 8 cd 13 83 e1
+3f 5b 51 f b6 c6 40 50 f7 e1 53 52 50 bb 0 7c b9 4 0 66 a1 b0 7 e8 44 0 f
+82 80 0 66 40 80 c7 2 e2 f2 66 81 3e 40 7c fb c0 78 70 75 9 fa bc ec 7b ea
+44 7c 0 0 e8 83 0 69 73 6f 6c 69 6e 75 78 2e 62 69 6e 20 6d 69 73 73 69 6e
+67 20 6f 72 20 63 6f 72 72 75 70 74 2e d a 66 60 66 31 d2 66 3 6 f8 7b 66
+13 16 fc 7b 66 52 66 50 6 53 6a 1 6a 10 89 e6 66 f7 36 e8 7b c0 e4 6 88 e1
+88 c5 92 f6 36 ee 7b 88 c6 8 e1 41 b8 1 2 8a 16 f2 7b cd 13 8d 64 10 66 61
+c3 e8 1e 0 4f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 6c 6f 61 64
+20 65 72 72 6f 72 2e d a 5e ac b4 e 8a 3e 62 4 b3 7 cd 10 3c a 75 f1 cd 18
+f4 eb fd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 *
-33 ed 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
-90 90 90 90 90 90 90 33 ed fa 8e d5 bc 0 7c fb fc 66 31 db 66 31 c9 21 f6
-74 26 f6 4 7f 75 21 38 4c 4 74 1c 66 3d 21 47 50 58 75 10 80 7c 4 ed 75 a
-66 8b 4c 34 66 8b 5c 38 eb 4 66 8b 4c 8 66 53 66 51 6 57 8e dd 8e c5 52 be
-0 7c bf 0 6 b9 0 1 f3 a5 ea 75 6 0 0 52 b4 41 bb aa 55 31 c9 30 f6 f9 cd 13
-72 16 81 fb 55 aa 75 10 83 e1 1 74 b 66 c7 6 1b 7 b4 42 eb 15 eb 0 5a 51 b4
+33 ed fa 8e d5 bc 0 7c fb fc 66 31 db 66 31 c9 21 f6 74 26 f6 4 7f 75 21 38
+4c 4 74 1c 66 3d 21 47 50 58 75 10 80 7c 4 ed 75 a 66 8b 4c 34 66 8b 5c 38
+eb 4 66 8b 4c 8 66 53 66 51 6 57 8e dd 8e c5 f6 6 17 4 4 74 2 b2 80 52 be
+0 7c bf 0 6 b9 0 1 f3 a5 ea 5e 6 0 0 52 b4 41 bb aa 55 31 c9 30 f6 f9 cd 13
+72 16 81 fb 55 aa 75 10 83 e1 1 74 b 66 c7 6 4 7 b4 42 eb 15 eb 0 5a 51 b4
 8 cd 13 83 e1 3f 5b 51 f b6 c6 40 50 f7 e1 53 52 50 bb 0 7c b9 4 0 66 a1 b0
 7 e8 44 0 f 82 80 0 66 40 80 c7 2 e2 f2 66 81 3e 40 7c fb c0 78 70 75 9 fa
 bc ec 7b ea 44 7c 0 0 e8 83 0 69 73 6f 6c 69 6e 75 78 2e 62 69 6e 20 6d 69
@@ -322,39 +353,6 @@ e4 6 88 e1 88 c5 92 f6 36 ee 7b 88 c6 8 e1 41 b8 1 2 8a 16 f2 7b cd 13 8d
 64 10 66 61 c3 e8 1e 0 4f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20
 6c 6f 61 64 20 65 72 72 6f 72 2e d a 5e ac b4 e 8a 3e 62 4 b3 7 cd 10 3c a
 75 f1 cd 18 f4 eb fd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
-*
-33 ed 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
-90 90 90 90 90 90 90 33 ed fa 8e d5 bc 0 7c fb fc 66 31 db 66 31 c9 21 f6
-74 26 f6 4 7f 75 21 38 4c 4 74 1c 66 3d 21 47 50 58 75 10 80 7c 4 ed 75 a
-66 8b 4c 34 66 8b 5c 38 eb 4 66 8b 4c 8 66 53 66 51 6 57 8e dd 8e c5 b2 80
-52 be 0 7c bf 0 6 b9 0 1 f3 a5 ea 77 6 0 0 52 b4 41 bb aa 55 31 c9 30 f6 f9
-cd 13 72 16 81 fb 55 aa 75 10 83 e1 1 74 b 66 c7 6 1d 7 b4 42 eb 15 eb 0 5a
-51 b4 8 cd 13 83 e1 3f 5b 51 f b6 c6 40 50 f7 e1 53 52 50 bb 0 7c b9 4 0 66
-a1 b0 7 e8 44 0 f 82 80 0 66 40 80 c7 2 e2 f2 66 81 3e 40 7c fb c0 78 70 75
-9 fa bc ec 7b ea 44 7c 0 0 e8 83 0 69 73 6f 6c 69 6e 75 78 2e 62 69 6e 20
-6d 69 73 73 69 6e 67 20 6f 72 20 63 6f 72 72 75 70 74 2e d a 66 60 66 31 d2
-66 3 6 f8 7b 66 13 16 fc 7b 66 52 66 50 6 53 6a 1 6a 10 89 e6 66 f7 36 e8
-7b c0 e4 6 88 e1 88 c5 92 f6 36 ee 7b 88 c6 8 e1 41 b8 1 2 8a 16 f2 7b cd
-13 8d 64 10 66 61 c3 e8 1e 0 4f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65
-6d 20 6c 6f 61 64 20 65 72 72 6f 72 2e d a 5e ac b4 e 8a 3e 62 4 b3 7 cd 10
-3c a 75 f1 cd 18 f4 eb fd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
-*
-33 ed 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
-90 90 90 90 90 90 90 33 ed fa 8e d5 bc 0 7c fb fc 66 31 db 66 31 c9 21 f6
-74 26 f6 4 7f 75 21 38 4c 4 74 1c 66 3d 21 47 50 58 75 10 80 7c 4 ed 75 a
-66 8b 4c 34 66 8b 5c 38 eb 4 66 8b 4c 8 66 53 66 51 6 57 8e dd 8e c5 f6 6
-17 4 4 74 2 b2 80 52 be 0 7c bf 0 6 b9 0 1 f3 a5 ea 7e 6 0 0 52 b4 41 bb aa
-55 31 c9 30 f6 f9 cd 13 72 16 81 fb 55 aa 75 10 83 e1 1 74 b 66 c7 6 24 7
-b4 42 eb 15 eb 0 5a 51 b4 8 cd 13 83 e1 3f 5b 51 f b6 c6 40 50 f7 e1 53 52
-50 bb 0 7c b9 4 0 66 a1 b0 7 e8 44 0 f 82 80 0 66 40 80 c7 2 e2 f2 66 81 3e
-40 7c fb c0 78 70 75 9 fa bc ec 7b ea 44 7c 0 0 e8 83 0 69 73 6f 6c 69 6e
-75 78 2e 62 69 6e 20 6d 69 73 73 69 6e 67 20 6f 72 20 63 6f 72 72 75 70 74
-2e d a 66 60 66 31 d2 66 3 6 f8 7b 66 13 16 fc 7b 66 52 66 50 6 53 6a 1 6a
-10 89 e6 66 f7 36 e8 7b c0 e4 6 88 e1 88 c5 92 f6 36 ee 7b 88 c6 8 e1 41 b8
-1 2 8a 16 f2 7b cd 13 8d 64 10 66 61 c3 e8 1e 0 4f 70 65 72 61 74 69 6e 67
-20 73 79 73 74 65 6d 20 6c 6f 61 64 20 65 72 72 6f 72 2e d a 5e ac b4 e 8a
-3e 62 4 b3 7 cd 10 3c a 75 f1 cd 18 f4 eb fd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 *
index 8a4f57e..3b9c054 100755 (executable)
Binary files a/utils/memdiskfind and b/utils/memdiskfind differ
index ae2d546..5af9083 100755 (executable)
@@ -229,7 +229,7 @@ for ( $y = 0 ; $y < $ysize ; $y++ ) {
     start_new_row();
     for ( $x = 0 ; $x < $xsize ; $x++ ) {
        die "$0: Premature EOF at ($x,$y) of ($xsize,$ysize)\n"
-           if ( !scalar(@pnmrgb = getrgb($form)) );
+           if ( !defined(@pnmrgb = getrgb($form)) );
        # Convert to 6-bit representation
        $rgb = rgbconvert($pnmrgb[0], $pnmrgb[1], $pnmrgb[2], $maxmult);
        $color_count{$rgb}++;
diff --git a/version b/version
index c85bb01..427de92 100644 (file)
--- a/version
+++ b/version
@@ -1 +1 @@
-4.05 2011
+4.04 2011
index 2e64b09..86f40d5 100644 (file)
@@ -1,6 +1,6 @@
-%define VERSION 4.05
-%define VERSION_STR "4.05"
+%define VERSION 4.04
+%define VERSION_STR "4.04"
 %define VERSION_MAJOR 4
-%define VERSION_MINOR 5
+%define VERSION_MINOR 4
 %define YEAR 2011
 %define YEAR_STR "2011"
index 3f2bd85..6613499 100644 (file)
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
-#define VERSION 4.05
-#define VERSION_STR "4.05"
+#define VERSION 4.04
+#define VERSION_STR "4.04"
 #define VERSION_MAJOR 4
-#define VERSION_MINOR 5
+#define VERSION_MINOR 4
 #define YEAR 2011
 #define YEAR_STR "2011"
index 6200f54..adcb437 100644 (file)
@@ -1,6 +1,6 @@
-VERSION := 4.05
-VERSION_STR := "4.05"
+VERSION := 4.04
+VERSION_STR := "4.04"
 VERSION_MAJOR := 4
-VERSION_MINOR := 5
+VERSION_MINOR := 4
 YEAR := 2011
 YEAR_STR := "2011"
index 9c82cf9..a67dc0d 100755 (executable)
Binary files a/win32/syslinux.exe and b/win32/syslinux.exe differ
index 3f34a9d..f276085 100755 (executable)
Binary files a/win64/syslinux64.exe and b/win64/syslinux64.exe differ