[5~[5~[5~[5~diff -BurN OpenHackWare-release-0.4/src/libexec/chrp.c OpenHackWare-release-0.4.mine/src/libexec/chrp.c --- OpenHackWare-release-0.4/src/libexec/chrp.c 2005-03-30 23:23:33.000000000 -0800 +++ OpenHackWare-release-0.4.mine/src/libexec/chrp.c 2007-04-19 13:06:53.000000000 -0700 @@ -243,9 +243,8 @@ DPRINTF("Boot file embedded at the end of boot script\n"); break; default: - ERROR("XML error: unknown Forth script: %08x\n%s\n", - crc, (char *)tag->data); - goto out; + script_type = CHRP_SCRIPT_LOAD_BOOT; + goto do_script; } break; diff -BurN OpenHackWare-release-0.4/src/libfs/core.c OpenHackWare-release-0.4.mine/src/libfs/core.c --- OpenHackWare-release-0.4/src/libfs/core.c 2005-03-30 23:23:33.000000000 -0800 +++ OpenHackWare-release-0.4.mine/src/libfs/core.c 2007-04-20 15:50:02.000000000 -0700 @@ -421,13 +421,15 @@ int fs_read (inode_t *inode, void *buffer, int len) { - uint32_t bsize, total; + uint32_t bsize, total, max; int done, tmp; bsize = part_blocsize(inode->fs->part); total = 0; if (fs_seek(inode, inode->vbloc, inode->vpos) < 0) return -1; + max = inode->size.bloc * bsize + inode->size.offset + - inode->vbloc * bsize + inode->vpos; for (; len != 0; len -= done) { tmp = bsize - inode->vpos; if (len < tmp) @@ -444,6 +446,8 @@ total += done; } + if (total > max) + return max; return total; } diff -BurN OpenHackWare-release-0.4/src/main.ld OpenHackWare-release-0.4.mine/src/main.ld --- OpenHackWare-release-0.4/src/main.ld 2005-03-30 23:23:33.000000000 -0800 +++ OpenHackWare-release-0.4.mine/src/main.ld 2007-04-19 13:01:25.000000000 -0700 @@ -49,7 +49,7 @@ _sdata_end = . ; . = ALIGN(4) ; _ro_start = . ; - .rodata : { *(.rodata) } > bios + .rodata : { *(.rodata*) } > bios _ro_end = . ; . = ALIGN(4) ; _RTAS_start = .; diff -BurN OpenHackWare-release-0.4/src/of.c OpenHackWare-release-0.4.mine/src/of.c --- OpenHackWare-release-0.4/src/of.c 2007-04-20 15:46:23.000000000 -0700 +++ OpenHackWare-release-0.4.mine/src/of.c 2007-04-20 14:56:56.000000000 -0700 @@ -4058,7 +4058,7 @@ OF_DPRINTF("Return property name [%s]\n", next->name); OF_sts(next_name, (void *)(next->name)); OF_DUMP_STRING(OF_env, next_name); - pushd(OF_env, strlen(next->name) + 1); + pushd(OF_env, 1); } } }