From 9f4689e21d9305585cc607c491e880432cf5453c Mon Sep 17 00:00:00 2001 From: okuji Date: Thu, 7 Feb 2002 23:28:47 +0000 Subject: [PATCH] 2002-02-08 Yoshinori K. Okuji * stage2/fsys_jfs.c (jfs_read) [STAGE1_5]: Set and reset DISK_READ_FUNC even in Stage 1.5. * stage2/fsys_xfs.c (xfs_read) [STAGE1_5]: Likewise. * stage2/stage1_5.c (saved_sector): Initialized with -1. (cmain): Check if SAVED_SECTOR was set appropriately after reading the second sector of Stage 2. If SAVED_SECTOR is not set (i.e. it is equal to -1), print an error and stop. --- ChangeLog | 11 +++++++++++ stage2/fsys_jfs.c | 8 +++----- stage2/fsys_xfs.c | 8 +++----- stage2/stage1_5.c | 13 ++++++++++--- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index db6f479d2..7b83fde19 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2002-02-08 Yoshinori K. Okuji + + * stage2/fsys_jfs.c (jfs_read) [STAGE1_5]: Set and reset + DISK_READ_FUNC even in Stage 1.5. + * stage2/fsys_xfs.c (xfs_read) [STAGE1_5]: Likewise. + + * stage2/stage1_5.c (saved_sector): Initialized with -1. + (cmain): Check if SAVED_SECTOR was set appropriately after + reading the second sector of Stage 2. If SAVED_SECTOR is not + set (i.e. it is equal to -1), print an error and stop. + 2002-02-05 Yoshinori K. Okuji * stage2/builtins.c (setup_func): Add a VSTa fs entry into diff --git a/stage2/fsys_jfs.c b/stage2/fsys_jfs.c index 3dcb22271..307f83633 100644 --- a/stage2/fsys_jfs.c +++ b/stage2/fsys_jfs.c @@ -1,7 +1,7 @@ /* fsys_jfs.c - an implementation for the IBM JFS file system */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001 Free Software Foundation, Inc. + * Copyright (C) 2001,2002 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -243,14 +243,12 @@ jfs_read (char *buf, int len) endofcur = (offset + xadlen) << jfs.l2bsize; toread = (endofcur >= endpos) ? len : (endofcur - filepos); -#ifndef STAGE1_5 + disk_read_func = disk_read_hook; -#endif /* STAGE1_5 */ devread (addressXAD (xad) << jfs.bdlog, filepos - (offset << jfs.l2bsize), toread, buf); -#ifndef STAGE1_5 disk_read_func = NULL; -#endif /* STAGE1_5 */ + buf += toread; len -= toread; filepos += toread; diff --git a/stage2/fsys_xfs.c b/stage2/fsys_xfs.c index 349c1c20c..e626b878f 100644 --- a/stage2/fsys_xfs.c +++ b/stage2/fsys_xfs.c @@ -1,7 +1,7 @@ /* fsys_xfs.c - an implementation for the SGI XFS file system */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001 Free Software Foundation, Inc. + * Copyright (C) 2001,2002 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -499,14 +499,12 @@ xfs_read (char *buf, int len) endofcur = (offset + xadlen) << xfs.blklog; toread = (endofcur >= endpos) ? len : (endofcur - filepos); -#ifndef STAGE1_5 + disk_read_func = disk_read_hook; -#endif /* STAGE1_5 */ devread (fsb2daddr (xad->start), filepos - (offset << xfs.blklog), toread, buf); -#ifndef STAGE1_5 disk_read_func = NULL; -#endif /* STAGE1_5 */ + buf += toread; len -= toread; filepos += toread; diff --git a/stage2/stage1_5.c b/stage2/stage1_5.c index 3464a7e0a..5c45d4cef 100644 --- a/stage2/stage1_5.c +++ b/stage2/stage1_5.c @@ -1,6 +1,6 @@ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001 Free Software Foundation, Inc. + * Copyright (C) 2001,2002 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,7 +19,7 @@ #include "shared.h" -static int saved_sector; +static int saved_sector = -1; static void disk_read_savesect_func (int sector, int offset, int length) @@ -30,7 +30,7 @@ disk_read_savesect_func (int sector, int offset, int length) void cmain (void) { - printf ("\n\nGRUB loading, please wait...\n"); + grub_printf ("\n\nGRUB loading, please wait...\n"); /* * Here load the true second-stage boot-loader. @@ -43,6 +43,13 @@ cmain (void) disk_read_hook = disk_read_savesect_func; grub_read ((char *) 0x8000, SECTOR_SIZE * 2); disk_read_hook = NULL; + + /* Sanity check: catch an internal error. */ + if (saved_sector == -1) + { + grub_printf ("internal error: the second sector of Stage 2 is unknown."); + stop (); + } ret = grub_read ((char *) 0x8000 + SECTOR_SIZE * 2, -1);