[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