[OpenBIOS] r306 - openbios-devel/fs/grubfs

svn at openbios.org svn at openbios.org
Mon Dec 22 17:01:13 CET 2008


Author: blueswirl
Date: 2008-12-22 17:01:12 +0100 (Mon, 22 Dec 2008)
New Revision: 306

Modified:
   openbios-devel/fs/grubfs/fsys_iso9660.c
Log:
Fix ISO9660 endian problems, ignore case

Modified: openbios-devel/fs/grubfs/fsys_iso9660.c
===================================================================
--- openbios-devel/fs/grubfs/fsys_iso9660.c	2008-12-22 06:19:19 UTC (rev 305)
+++ openbios-devel/fs/grubfs/fsys_iso9660.c	2008-12-22 16:01:12 UTC (rev 306)
@@ -42,6 +42,12 @@
 #define DEBUG_THIS 1
 #include "debug.h"
 
+#if defined(__sparc__) || defined(__PPC__)
+#define ENDIAN b
+#else
+#define ENDIAN l
+#endif
+
 struct iso_superblock {
     unsigned long vol_sector;
 
@@ -90,7 +96,7 @@
 	{
 	  ISO_SUPER->vol_sector = sector;
 	  ISO_SUPER->file_start = 0;
-	  fsmax = PRIMDESC->volume_space_size.l;
+          fsmax = PRIMDESC->volume_space_size.ENDIAN;
 	  return 1;
 	}
     }
@@ -125,8 +131,8 @@
 	  pathlen++)
 	;
 
-      size = idr->size.l;
-      extent = idr->extent.l;
+      size = idr->size.ENDIAN;
+      extent = idr->extent.ENDIAN;
 
       while (size > 0)
       {
@@ -138,13 +144,13 @@
 	  extent++;
 
 	  idr = (struct iso_directory_record *)DIRREC;
-	  for (; idr->length.l > 0;
-		 idr = (struct iso_directory_record *)((char *)idr + idr->length.l) )
+	  for (; idr->length.ENDIAN > 0;
+                 idr = (struct iso_directory_record *)((char *)idr + idr->length.ENDIAN) )
 	  {
               const char *name = (char *)idr->name;
-	      unsigned int name_len = idr->name_len.l;
+              unsigned int name_len = idr->name_len.ENDIAN;
 
-	      file_type = (idr->flags.l & 2) ? ISO_DIRECTORY : ISO_REGULAR;
+              file_type = (idr->flags.ENDIAN & 2) ? ISO_DIRECTORY : ISO_REGULAR;
 	      if (name_len == 1)
 	      {
 		  if ((name[0] == 0) ||	/* self */
@@ -161,10 +167,10 @@
 	      /*
 	       *  Parse Rock-Ridge extension
 	       */
-	      rr_len = (idr->length.l - idr->name_len.l
+              rr_len = (idr->length.ENDIAN - idr->name_len.ENDIAN
 			- (unsigned char)sizeof(struct iso_directory_record)
 			+ (unsigned char)sizeof(idr->name));
-	      rr_ptr.ptr = ((char *)idr + idr->name_len.l
+              rr_ptr.ptr = ((char *)idr + idr->name_len.ENDIAN
 			    + sizeof(struct iso_directory_record)
 			    - sizeof(idr->name));
 	      if (rr_ptr.i & 1)
@@ -187,7 +193,7 @@
 		  }
 		  else if (rr_ptr.rr->signature == RRMAGIC('R', 'R')
 			   && rr_ptr.rr->len >= 5)
-		    rr_flag &= rr_ptr.rr->u.rr.flags.l;
+                      rr_flag &= rr_ptr.rr->u.rr.flags.ENDIAN;
 		  else if (rr_ptr.rr->signature == RRMAGIC('N', 'M'))
 		  {
 		      name = (char *)rr_ptr.rr->u.nm.name;
@@ -197,10 +203,10 @@
 		  else if (rr_ptr.rr->signature == RRMAGIC('P', 'X')
 			   && rr_ptr.rr->len >= 36)
 		  {
-		      file_type = ((rr_ptr.rr->u.px.mode.l & POSIX_S_IFMT)
+                      file_type = ((rr_ptr.rr->u.px.mode.ENDIAN & POSIX_S_IFMT)
 				   == POSIX_S_IFREG
 				   ? ISO_REGULAR
-				   : ((rr_ptr.rr->u.px.mode.l & POSIX_S_IFMT)
+                                   : ((rr_ptr.rr->u.px.mode.ENDIAN & POSIX_S_IFMT)
 				      == POSIX_S_IFDIR
 				      ? ISO_DIRECTORY : ISO_OTHER));
 		      rr_flag &= ~RR_FLAG_PX;
@@ -224,9 +230,9 @@
 			  memcpy(NAME_BUF, name, name_len);
 			  name = (char *)NAME_BUF;
 		      }
-                      rr_ptr.ptr = (char *)(RRCONT_BUF + ce_ptr->u.ce.offset.l);
-		      rr_len = ce_ptr->u.ce.size.l;
-                      if (!iso9660_devread(ce_ptr->u.ce.extent.l, 0,
+                      rr_ptr.ptr = (char *)(RRCONT_BUF + ce_ptr->u.ce.offset.ENDIAN);
+                      rr_len = ce_ptr->u.ce.size.ENDIAN;
+                      if (!iso9660_devread(ce_ptr->u.ce.extent.ENDIAN, 0,
                                            ISO_SECTOR_SIZE, (char *)RRCONT_BUF))
 		      {
 			  errnum = 0;	/* this is not fatal. */
@@ -238,7 +244,7 @@
 
 	      filemax = MAXINT;
 	      if (name_len >= pathlen
-		  && !__builtin_memcmp(name, dirname, pathlen))
+                  && !strnicmp(name, dirname, pathlen))
 	      {
                 if (dirname[pathlen] == '/' || !print_possibilities)
 		{
@@ -262,9 +268,9 @@
 		          errnum = ERR_BAD_FILETYPE;
 		          return 0;
 		      }
-		      ISO_SUPER->file_start = idr->extent.l;
+                      ISO_SUPER->file_start = idr->extent.ENDIAN;
 		      filepos = 0;
-		      filemax = idr->size.l;
+                      filemax = idr->size.ENDIAN;
 		      return 1;
 		  }
 		}




More information about the OpenBIOS mailing list