2002-02-08 Yoshinori K. Okuji <okuji@enbug.org>

* 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.
This commit is contained in:
okuji 2002-02-07 23:28:47 +00:00
parent 93718b5a41
commit 9f4689e21d
4 changed files with 27 additions and 13 deletions

View file

@ -1,3 +1,14 @@
2002-02-08 Yoshinori K. Okuji <okuji@enbug.org>
* 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 <okuji@enbug.org>
* stage2/builtins.c (setup_func): Add a VSTa fs entry into

View file

@ -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;

View file

@ -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;

View file

@ -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);