diff -ruN yaboot-1.2.5/fs_reiserfs.c yaboot-1.2.5.jeffm/fs_reiserfs.c
--- yaboot-1.2.5/fs_reiserfs.c	Thu Sep 20 14:34:14 2001
+++ yaboot-1.2.5.jeffm/fs_reiserfs.c	Mon Oct 15 00:39:49 2001
@@ -94,7 +94,7 @@
 	return FILE_ERR_NOTFOUND;
     }
 
-    DEBUG_F( "%s was successfully opened\n" );
+    DEBUG_F( "Device %s was successfully opened\n", buffer );
 
     if ( reiserfs_read_super() != 1 )
     {
@@ -104,7 +104,7 @@
 	return FILE_ERR_NOTFOUND;
     }
 
-    DEBUG_F( "Attempting to open %s\n", file_name );
+    DEBUG_F( "Attempting to open file %s\n", file_name );
     strcpy(buffer, file_name); /* reiserfs_open_file modifies argument */
     if( reiserfs_open_file(buffer) == 0 )
     {
@@ -114,7 +114,7 @@
         return FILE_ERR_NOTFOUND;
     }
 
-    DEBUG_F( "Successfully opened %s\n", file_name );
+    DEBUG_F( "Successfully opened file %s\n", file_name );
 
     DEBUG_LEAVE(FILE_ERR_OK);
     return FILE_ERR_OK;
@@ -165,12 +165,16 @@
 {
     __u16 fs_blocksize = INFO->blocksize == 0 ? REISERFS_OLD_BLOCKSIZE
                                               : INFO->blocksize;
-    unsigned long long pos = block * fs_blocksize;
-    pos += INFO->partition_offset + start;
+    unsigned long long pos =
+                (unsigned long long)block * (unsigned long long)fs_blocksize;
+    pos += (unsigned long long)INFO->partition_offset +
+           (unsigned long long)start;
     DEBUG_F( "Reading %lu bytes, starting at block %lu, disk offset %Lu\n",
              length, block, pos );
     prom_lseek( file->of_device, pos );
-    return prom_read( file->of_device, buf, length );
+
+    /* return 0 on success, 1 on failure */
+    return prom_read( file->of_device, buf, length ) == 0;
 }
 
 
@@ -223,7 +227,7 @@
 	    struct reiserfs_journal_commit commit;
 
 	    if ( !journal_read( desc_block, sizeof(desc), (char *) &desc ) )
-		return 0;
+		return -1;
 
 	    j_len = le32_to_cpu(desc.j_len);
 	    while ( i < j_len && i < JOURNAL_TRANS_HALF )
@@ -236,7 +240,7 @@
 
 		if ( !journal_read( commit_block,
 			sizeof(commit), (char *) &commit ) )
-		    return 0;
+		    return -1;
 
 		while ( i < j_len )
 		    if ( le32_to_cpu(commit.j_realblock[i++ - JOURNAL_TRANS_HALF]) == blockNr )
@@ -281,7 +285,12 @@
     __u32 next_trans_id;
     __u32 *journal_table = JOURNAL_START;
 
-    journal_read( block_count, sizeof ( header ), ( char * ) &header );
+    /* Read in the header block of the journal */
+    if (journal_read( block_count, sizeof (header), (char *) &header ) != 0) {
+        prom_printf ("ReiserFS: Disk error while reading journal header.\n");
+        return 0;
+    }
+
     desc_block = le32_to_cpu(header.j_first_unflushed_offset);
     if ( desc_block >= block_count )
 	return 0;
@@ -294,7 +303,11 @@
 
     while ( 1 )
     {
-	journal_read( desc_block, sizeof(desc), (char *) &desc );
+	if (journal_read( desc_block, sizeof(desc), (char *) &desc ) != 0) {
+            prom_printf ("ReiserFS: Disk error while reading journal block.\n");
+            return 0;
+        }
+
 	if ( strcmp( JOURNAL_DESC_MAGIC, desc.j_magic ) != 0
 	    || desc.j_trans_id != next_trans_id
 	    || desc.j_mount_id != header.j_mount_id )
@@ -302,7 +315,11 @@
 	    break;
 
 	commit_block = ( desc_block + le32_to_cpu(desc.j_len) + 1 ) & ( block_count - 1 );
-	journal_read( commit_block, sizeof(commit), (char *) &commit );
+	if (journal_read( commit_block, sizeof(commit),
+                          (char *) &commit ) != 0) {
+            prom_printf ("ReiserFS: Disk error while reading journal block.\n");
+            return 0;
+        }
 	if ( desc.j_trans_id != commit.j_trans_id
 	    || desc.j_len != commit.j_len )
 	    /* no more valid transactions */
@@ -372,7 +389,11 @@
     struct reiserfs_super_block super;
     __u64 superblock = REISERFS_SUPERBLOCK_BLOCK;
 
-    read_disk_block( INFO->file, superblock, 0, sizeof(super), &super );
+    if (read_disk_block( INFO->file, superblock, 0,
+                         sizeof(super), &super ) != 0) {
+        prom_printf ("ReiserFS: Disk error while reading superblock\n");
+        return 0;
+    }
 
     DEBUG_F( "Found super->magic %s\n", super.s_magic );
 
@@ -381,7 +402,11 @@
     {
 	/* Try old super block position */
 	superblock = REISERFS_OLD_SUPERBLOCK_BLOCK;
-	read_disk_block( INFO->file, superblock, 0, sizeof (super),  &super );
+	if (read_disk_block( INFO->file, superblock, 0,
+                             sizeof (super),  &super ) != 0) {
+            prom_printf ("ReiserFS: Disk error while reading old superblock\n");
+            return 0;
+        }
 
 	if ( strcmp( REISER2FS_SUPER_MAGIC_STRING, super.s_magic ) != 0 &&
              strcmp( REISERFS_SUPER_MAGIC_STRING, super.s_magic ) != 0 )
@@ -447,13 +472,16 @@
 
 	journal_init();
 	/* Read in super block again, maybe it is in the journal */
-	block_read( superblock, 0, sizeof (struct reiserfs_super_block),
-                    (char *) &super );
+	if (block_read( superblock, 0, sizeof (struct reiserfs_super_block),
+                        (char *) &super ) != 0) {
+            prom_printf ("ReiserFS: Disk error while re-reading superblock\n");
+            return 0;
+        }
     }
 
     /* Read in the root block */
-    if ( !block_read( le32_to_cpu(super.s_root_block), 0,
-            INFO->blocksize, ROOT ) )
+    if ( block_read( le32_to_cpu(super.s_root_block), 0,
+            INFO->blocksize, ROOT ) != 0)
     {
         prom_printf( "ReiserFS: Failed to read in root block\n" );
 	return 0;
@@ -512,6 +540,7 @@
 {
     char *cache = CACHE(depth);
     int num_cached = INFO->cached_slots;
+    errnum = 0;
 
     if ( depth < num_cached )
     {
@@ -525,7 +554,7 @@
 
     DEBUG_F( "  next read_in: block=%u (depth=%u)\n", blockNr, depth );
 
-    if ( !block_read( blockNr, 0, INFO->blocksize, cache ) )
+    if ( block_read( blockNr, 0, INFO->blocksize, cache ) != 0)
     {
         DEBUG_F( "block_read failed\n" );
 	return 0;
@@ -657,6 +686,7 @@
     int nr_item;
     int i;
     struct item_head *ih;
+    errnum = 0;
 
 
     DEBUG_F( "search_stat:\n  key %u:%u:0:0\n", le32_to_cpu(dir_id),
@@ -731,6 +761,7 @@
     __u32 offset;
     __u32 to_read;
     char *prev_buf = buf;
+    errnum = 0;
 
 
     DEBUG_F( "reiserfs_read_data: INFO->file->pos=%Lu len=%u, offset=%Lu\n",
@@ -753,7 +784,7 @@
 	blocksize = ih_item_len(INFO->current_ih);
 
 
-	DEBUG_F( "  loop: INFO->file->pos=%Lu len=%u, offset=%u blocksize=%u\n",
+	DEBUG_F( "  loop: INFO->file->pos=%Lu len=%u, offset=%u ih_item_len=%u\n",
 	    INFO->file->pos, len, offset, blocksize );
 
 
@@ -784,8 +815,12 @@
 
 		/* Journal is only for meta data.
                    Data blocks can be read directly without using block_read */
-		read_disk_block( INFO->file, blocknr, blk_offset, to_read,
-                                 buf );
+		if (read_disk_block( INFO->file, blocknr, blk_offset,
+                                     to_read, buf ) != 0) {
+                    prom_printf ("ReiserFS: Disk error while reading "
+                                 "data block\n");
+                    return 0;
+                }
 
 	      update_buf_len:
 		len -= to_read;
@@ -821,6 +856,7 @@
     char linkbuf[PATH_MAX];	/* buffer for following symbolic links */
     int link_count = 0;
     int mode;
+    errnum = 0;
 
     dir_id = cpu_to_le32(REISERFS_ROOT_PARENT_OBJECTID);
     objectid = cpu_to_le32(REISERFS_ROOT_OBJECTID);
diff -ruN yaboot-1.2.5/yaboot.c yaboot-1.2.5.jeffm/yaboot.c
--- yaboot-1.2.5/yaboot.c	Thu Sep 20 14:34:14 2001
+++ yaboot-1.2.5.jeffm/yaboot.c	Mon Oct 15 00:38:33 2001
@@ -298,8 +298,7 @@
     fspec.dev = device;
     fspec.file = conf_path;
     fspec.part = partition;
-    result = open_file(&fspec, &file);
-    if (result != FILE_ERR_OK) {
+    if (open_file(&fspec, &file) != FILE_ERR_OK) {
     	prom_printf("Can't open config file '%s', err: %d\n", conf_path, result);
 	goto bail;
     }
@@ -664,6 +663,15 @@
 	    }
 	    params->args = make_params(label, params->args);
 	}
+    }
+
+    if (imagename == NULL) {
+	prom_printf(
+"Enter the kernel image name as [device:][partno]/path, where partno is a\n"
+"number from 0 to 16.  Instead of /path you can type [mm-nn] to specify a\n"
+"range of disk blocks (512B)\n"
+"Example: hd:3,/vmlinux\n");
+        return 0;
     }
 
     if (!strcmp (imagename, "halt")) {
