[syslinux:pathbased] syslinux: fix sector arrays

syslinux-bot for Alek Du alek.du at intel.com
Thu May 20 20:39:02 PDT 2010


Commit-ID:  38eb0724824139a81342e3f676910187bc57ba9d
Gitweb:     http://syslinux.zytor.com/commit/38eb0724824139a81342e3f676910187bc57ba9d
Author:     Alek Du <alek.du at intel.com>
AuthorDate: Thu, 20 May 2010 18:24:35 +0800
Committer:  H. Peter Anvin <hpa at zytor.com>
CommitDate: Thu, 20 May 2010 19:57:44 -0700

syslinux: fix sector arrays

The first sector ptr is in bs->NextSector not in the array in
the patch_area. And actually the ADV sectors counting is wrong for a
while ...

Signed-off-by: Alek Du <alek.du at intel.com>
Signed-off-by: H. Peter Anvin <hpa at zytor.com>


---
 core/adv.inc            |    4 ++--
 extlinux/main.c         |    2 +-
 libinstaller/syslxmod.c |    2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/core/adv.inc b/core/adv.inc
index 2dc1633..6725261 100644
--- a/core/adv.inc
+++ b/core/adv.inc
@@ -77,8 +77,8 @@ adv_init:
 		mov bx,[DataSectors]
 		shl bx,2
 		mov ecx,[bsHidden]
-		mov eax,[bx+SectorPtrs]		; First ADV sector
-		mov edx,[bx+SectorPtrs+4]	; Second ADV sector
+		mov eax,[bx+SectorPtrs-4]; First ADV sector
+		mov edx,[bx+SectorPtrs]	; Second ADV sector
 		add eax,ecx
 		add edx,ecx
 		mov [ADVSec0],eax
diff --git a/extlinux/main.c b/extlinux/main.c
index dea2d19..6bf6872 100644
--- a/extlinux/main.c
+++ b/extlinux/main.c
@@ -561,7 +561,7 @@ int patch_file_and_bootblock(int fd, const char *dir, int devfd)
     nptrs = get_16(&patcharea->secptrcnt);
 
     memset(wp, 0, nptrs * 4);
-    while (nsect--)
+    while (--nsect) /* the first sector in bs->NextSector */
 	set_32(wp++, *sectp++);
 
     /* Poke in the base directory path */
diff --git a/libinstaller/syslxmod.c b/libinstaller/syslxmod.c
index e18d8a6..be06b9a 100644
--- a/libinstaller/syslxmod.c
+++ b/libinstaller/syslxmod.c
@@ -269,7 +269,7 @@ int syslinux_patch(const uint32_t * sectors, int nsectors,
 		       get_16_sl(&patcharea->secptroffset));
     nptrs = get_16_sl(&patcharea->secptrcnt);
 
-    while (nsect--) {
+    while (--nsect) { /* the first sector is in bs->NextSector */
 	set_32_sl(wp++, *sectors++);
 	nptrs--;
     }



More information about the Syslinux-commits mailing list