Squashed 'yocto-poky/' content from commit ea562de

git-subtree-dir: yocto-poky
git-subtree-split: ea562de57590c966cd5a75fda8defecd397e6436
diff --git a/meta/recipes-devtools/syslinux/syslinux/0004-linux-syslinux-add-ext_file_read-and-ext_file_write.patch b/meta/recipes-devtools/syslinux/syslinux/0004-linux-syslinux-add-ext_file_read-and-ext_file_write.patch
new file mode 100644
index 0000000..64b56d9
--- /dev/null
+++ b/meta/recipes-devtools/syslinux/syslinux/0004-linux-syslinux-add-ext_file_read-and-ext_file_write.patch
@@ -0,0 +1,91 @@
+From 35d3842cc4b930c5102eed2921e0189b7f4fd069 Mon Sep 17 00:00:00 2001
+From: Robert Yang <liezhi.yang@windriver.com>
+Date: Wed, 31 Dec 2014 16:43:37 +0800
+Subject: [PATCH 4/9] linux/syslinux: add ext_file_read() and ext_file_write()
+
+Will use them to read and write on the extX device.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+Tested-by: Du Dolpher <dolpher.du@intel.com>
+---
+ linux/syslinux.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 62 insertions(+)
+
+diff --git a/linux/syslinux.c b/linux/syslinux.c
+index 45f080d..247c86a 100755
+--- a/linux/syslinux.c
++++ b/linux/syslinux.c
+@@ -349,6 +349,68 @@ fail:
+ 
+ }
+ 
++/* Read from an ext2_file */
++static int ext_file_read(ext2_file_t e2_file, void *buf, size_t count,
++                        off_t offset, const char *msg)
++{
++    int                 retval;
++    char                *ptr = (char *) buf;
++    unsigned int        got = 0;
++    size_t              done = 0;
++
++    /* Always lseek since e2_file is uncontrolled by this func */
++    if (ext2fs_file_lseek(e2_file, offset, EXT2_SEEK_SET, NULL)) {
++        fprintf(stderr, "%s: ext2fs_file_lseek() failed.\n",
++            program);
++        return -1;
++    }
++
++    while (1) {
++        retval = ext2fs_file_read(e2_file, ptr, count, &got);
++        if (retval) {
++            fprintf(stderr, "%s: error while reading %s\n",
++                    program, msg);
++            return -1;
++        }
++        count -= got;
++        ptr += got;
++        done += got;
++        if (got == 0 || count == 0)
++            break;
++    }
++
++    return done;
++}
++
++/* Write to an ext2_file */
++static int ext_file_write(ext2_file_t e2_file, const void *buf, size_t count,
++                        off_t offset)
++{
++    const char          *ptr = (const char *) buf;
++    unsigned int        written = 0;
++    size_t              done = 0;
++
++    /* Always lseek since e2_file is uncontrolled by this func */
++    if (ext2fs_file_lseek(e2_file, offset, EXT2_SEEK_SET, NULL)) {
++            fprintf(stderr, "%s: ext2fs_file_lseek() failed.\n",
++                program);
++            return -1;
++    }
++
++    while (count > 0) {
++        if (ext2fs_file_write(e2_file, ptr, count, &written)) {
++            fprintf(stderr, "%s: failed to write syslinux adv.\n",
++                    program);
++            return -1;
++        }
++        count -= written;
++        ptr += written;
++        done += written;
++    }
++
++    return done;
++}
++
+ /*
+  * Install the boot block on the specified device.
+  * Must be run AFTER file installed.
+-- 
+1.9.1
+