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

