[syslinux:disklib] chain.c32, libcom32: Move write_verify_sector() as disk_write_verify_sector()

syslinux-bot for Shao Miller shao.miller at yrdsb.edu.on.ca
Sun Jul 25 17:33:10 PDT 2010


Commit-ID:  3748a9dc3ead604596b7a2c94014ad3817a107cf
Gitweb:     http://syslinux.zytor.com/commit/3748a9dc3ead604596b7a2c94014ad3817a107cf
Author:     Shao Miller <shao.miller at yrdsb.edu.on.ca>
AuthorDate: Mon, 28 Jun 2010 02:26:11 -0400
Committer:  Shao Miller <shao.miller at yrdsb.edu.on.ca>
CommitDate: Sat, 10 Jul 2010 01:03:05 -0400

chain.c32, libcom32: Move write_verify_sector() as disk_write_verify_sector()

Moving portions of chain.c32 into libcom32.

Signed-off-by: Shao Miller <shao.miller at yrdsb.edu.on.ca>


---
 com32/include/syslinux/disk.h |    2 ++
 com32/lib/syslinux/disk.c     |   29 +++++++++++++++++++++++++++++
 com32/modules/chain.c         |   18 +-----------------
 3 files changed, 32 insertions(+), 17 deletions(-)

diff --git a/com32/include/syslinux/disk.h b/com32/include/syslinux/disk.h
index ef002e2..82513ce 100644
--- a/com32/include/syslinux/disk.h
+++ b/com32/include/syslinux/disk.h
@@ -63,5 +63,7 @@ extern void *disk_read_sectors(struct disk_info *diskinfo, uint64_t lba,
 			       uint8_t count);
 extern int disk_write_sector(struct disk_info *diskinfo, unsigned int lba,
 			     const void *data);
+extern int disk_write_verify_sector(struct disk_info *diskinfo,
+				    unsigned int lba, const void *buf);
 
 #endif /* _SYSLINUX_DISK_H */
diff --git a/com32/lib/syslinux/disk.c b/com32/lib/syslinux/disk.c
index 7b7cbe4..8223534 100644
--- a/com32/lib/syslinux/disk.c
+++ b/com32/lib/syslinux/disk.c
@@ -254,3 +254,32 @@ int disk_write_sector(struct disk_info *diskinfo, unsigned int lba,
 
     return 0;			/* ok */
 }
+
+/**
+ * Write a disk block and verify it was written.
+ *
+ * @v diskinfo			The disk drive to write to
+ * @v lba			The logical block address to begin writing at
+ * @v buf			The data to write
+ * @ret rv			0 upon success, -1 upon failure
+ *
+ * Uses the disk number and information from diskinfo.
+ * Writes a sector to a disk drive starting at lba, then reads it back
+ * to verify it was written correctly.
+ */
+int disk_write_verify_sector(struct disk_info *diskinfo, unsigned int lba,
+			     const void *buf)
+{
+    char *rb;
+    int rv;
+
+    rv = disk_write_sector(diskinfo, lba, buf);
+    if (rv)
+	return rv;		/* Write failure */
+    rb = disk_read_sectors(diskinfo, lba, 1);
+    if (!rb)
+	return -1;		/* Readback failure */
+    rv = memcmp(buf, rb, SECTOR);
+    free(rb);
+    return rv ? -1 : 0;
+}
diff --git a/com32/modules/chain.c b/com32/modules/chain.c
index de827a2..6bf8827 100644
--- a/com32/modules/chain.c
+++ b/com32/modules/chain.c
@@ -147,22 +147,6 @@ static inline void error(const char *msg)
 
 static struct disk_info diskinfo;
 
-static int write_verify_sector(unsigned int lba, const void *buf)
-{
-    char *rb;
-    int rv;
-
-    rv = disk_write_sector(&diskinfo, lba, buf);
-    if (rv)
-	return rv;		/* Write failure */
-    rb = disk_read_sectors(&diskinfo, lba, 1);
-    if (!rb)
-	return -1;		/* Readback failure */
-    rv = memcmp(buf, rb, SECTOR);
-    free(rb);
-    return rv ? -1 : 0;
-}
-
 /*
  * CHS (cylinder, head, sector) value extraction macros.
  * Taken from WinVBlock.  Does not expand to an lvalue
@@ -1008,7 +992,7 @@ static int hide_unhide(struct mbr *mbr, int part)
     }
 
     if (write_back)
-	return write_verify_sector(0, mbr);
+	return disk_write_verify_sector(&diskinfo, 0, mbr);
 
     return 0;			/* ok */
 }



More information about the Syslinux-commits mailing list