diff options
author | Matt Fleming <matt.fleming@intel.com> | 2012-07-27 10:41:30 +0100 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2012-07-30 09:51:36 +0100 |
commit | 0d6f330878173c7ba45b884f3e41ce40b917c73c (patch) | |
tree | 0a887066d35d8b01914330d6ab6818fe015a5a9d /linux | |
parent | 0fcd9a48603497dcc2727570a50a4401bb0fd085 (diff) | |
parent | f0bbf9dd40f37f8c4870a33784996efd56955a75 (diff) | |
download | syslinux-0d6f330878173c7ba45b884f3e41ce40b917c73c.tar.gz |
Merge remote-tracking branch 'mfleming/elflink' into for-hpa/elflink/firmware
Conflicts:
Makefile
com32/elflink/ldlinux/adv.c
com32/elflink/ldlinux/kernel.c
com32/elflink/ldlinux/ldlinux.c
com32/include/bitsize/stddef.h
com32/include/bitsize/stdint.h
com32/include/stdint.h
com32/include/sys/module.h
com32/include/sys/x86_64/bitops.h
com32/include/syslinux/linux.h
com32/lib/Makefile
com32/lib/sys/ansicon_write.c
com32/lib/sys/module/elfutils.h
com32/lib/sys/vesa/efi/fill.h
com32/lib/syslinux/load_linux.c
com32/lib/syslinux/serial.c
com32/lib/syslinux/shuffle.c
core/conio.c
core/elflink/config.c
core/elflink/load_env32.c
core/graphics.c
core/include/graphics.h
core/init.c
core/pxelinux.asm
mk/elf.mk
mk/lib.mk
Diffstat (limited to 'linux')
-rw-r--r-- | linux/Makefile | 9 | ||||
-rwxr-xr-x | linux/syslinux.c | 24 |
2 files changed, 22 insertions, 11 deletions
diff --git a/linux/Makefile b/linux/Makefile index b9dac179..08a3ed49 100644 --- a/linux/Makefile +++ b/linux/Makefile @@ -11,14 +11,14 @@ ## ----------------------------------------------------------------------- ## -## Linux FAT installer +## Linux FAT/NTFS installer ## topdir = .. MAKEDIR = $(topdir)/mk include $(MAKEDIR)/syslinux.mk -OPTFLAGS = -g -O0 -Dalloca=malloc +OPTFLAGS = -g -Os INCLUDES = -I. -I.. -I../libinstaller CFLAGS = $(GCCWARN) -D_FILE_OFFSET_BITS=64 $(OPTFLAGS) $(INCLUDES) LDFLAGS = @@ -28,7 +28,7 @@ SRCS = syslinux.c \ ../libinstaller/syslxcom.c \ ../libinstaller/setadv.c \ ../libinstaller/advio.c \ - ../libinstaller/fat.c \ + ../libinstaller/fs.c \ ../libinstaller/syslxmod.c \ ../libinstaller/bootsect_bin.c \ ../libinstaller/ldlinux_bin.c @@ -57,6 +57,9 @@ syslinux: $(OBJS) syslinux-nomtools: syslinux ln -f $< $@ +strip: + $(STRIP) syslinux syslinux-nomtools + %.o: %.c $(CC) $(UMAKEDEPS) $(CFLAGS) -c -o $@ $< %.i: %.c diff --git a/linux/syslinux.c b/linux/syslinux.c index c7a9ecc4..4b13b7fe 100755 --- a/linux/syslinux.c +++ b/linux/syslinux.c @@ -69,6 +69,7 @@ #include <getopt.h> #include <sysexits.h> #include "syslxcom.h" +#include "syslxfs.h" #include "setadv.h" #include "syslxopt.h" /* unified options */ @@ -294,14 +295,14 @@ int main(int argc, char *argv[]) die("can't combine an offset with a block device"); } - fs_type = VFAT; xpread(dev_fd, sectbuf, SECTOR_SIZE, opt.offset); fsync(dev_fd); /* - * Check to see that what we got was indeed an MS-DOS boot sector/superblock + * Check to see that what we got was indeed an FAT/NTFS + * boot sector/superblock */ - if ((errmsg = syslinux_check_bootsect(sectbuf))) { + if ((errmsg = syslinux_check_bootsect(sectbuf, &fs_type))) { fprintf(stderr, "%s: %s\n", opt.device, errmsg); exit(1); } @@ -357,10 +358,17 @@ int main(int argc, char *argv[]) mntpath = mntname; } - if (do_mount(dev_fd, &mnt_cookie, mntpath, "vfat") && - do_mount(dev_fd, &mnt_cookie, mntpath, "msdos")) { - rmdir(mntpath); - die("mount failed"); + if (fs_type == VFAT) { + if (do_mount(dev_fd, &mnt_cookie, mntpath, "vfat") && + do_mount(dev_fd, &mnt_cookie, mntpath, "msdos")) { + rmdir(mntpath); + die("failed on mounting fat volume"); + } + } else if (fs_type == NTFS) { + if (do_mount(dev_fd, &mnt_cookie, mntpath, "ntfs-3g")) { + rmdir(mntpath); + die("failed on mounting ntfs volume"); + } } ldlinux_path = alloca(strlen(mntpath) + strlen(subdir) + 1); @@ -474,7 +482,7 @@ umount: xpread(dev_fd, sectbuf, SECTOR_SIZE, opt.offset); /* Copy the syslinux code into the boot sector */ - syslinux_make_bootsect(sectbuf); + syslinux_make_bootsect(sectbuf, fs_type); /* Write new boot sector */ xpwrite(dev_fd, sectbuf, SECTOR_SIZE, opt.offset); |