From 60f3833ab2b5899771b4eab654e88f9888b99501 Mon Sep 17 00:00:00 2001 From: Robert Yang Date: Wed, 31 Dec 2014 16:01:55 +0800 Subject: [PATCH 1/9] linux/syslinux: support ext2/3/4 device * Support ext2/3/4 deivce. * The open_ext2_fs() checks whether it is an ext2/3/4 device, do the ext2/3/4 installation (install_to_ext2()) if yes, otherwise go on to the fat/ntfs. * The ext2/3/4 support doesn't require root privileges since it doesn't need mount (but write permission is required). Upstream-Status: Submitted [https://www.syslinux.org/archives/2015-January/023039.html] Signed-off-by: Robert Yang Tested-by: Du Dolpher --- linux/syslinux.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/linux/syslinux.c b/linux/syslinux.c index 912de71..36fc202 100755 --- a/linux/syslinux.c +++ b/linux/syslinux.c @@ -256,6 +256,23 @@ int do_open_file(char *name) return fd; } +/* + * Check whether the device contains an ext2, ext3 or ext4 fs and open it if + * true. + * return value: + * 0: Everything is OK + * 1: Not an ext2, ext3 or ext4 + * -1: unexpected error + */ +static int open_ext2_fs(const char *device, const char *subdir) +{ +} + +/* The install func for ext2, ext3 and ext4 */ +static int install_to_ext2(const char *device, int dev_fd, const char *subdir) +{ +} + int main(int argc, char *argv[]) { static unsigned char sectbuf[SECTOR_SIZE]; @@ -313,6 +330,24 @@ int main(int argc, char *argv[]) die("can't combine an offset with a block device"); } + /* + * Check if it is an ext2, ext3 or ext4 + */ + rv = open_ext2_fs(opt.device, subdir); + if (rv == 0) { + if (install_to_ext2(opt.device, dev_fd, subdir)) { + fprintf(stderr, "%s: installation failed\n", opt.device); + exit(1); + } + return 0; + /* Unexpected errors */ + } else if (rv == -1) { + exit(1); + } + + /* Reset rv */ + rv = 0; + xpread(dev_fd, sectbuf, SECTOR_SIZE, opt.offset); fsync(dev_fd); @@ -322,6 +357,7 @@ int main(int argc, char *argv[]) */ if ((errmsg = syslinux_check_bootsect(sectbuf, &fs_type))) { fprintf(stderr, "%s: %s\n", opt.device, errmsg); + fprintf(stderr, "%s: supported fs: fat/ntfs/ext2/ex3/ext4\n", program); exit(1); } -- 1.9.1