Fix endianess bug in Rock Ridge extensions

git-svn-id: svn://coreboot.org/openbios/openbios-devel@450 f158a5a8-5612-0410-a976-696ce0be7e32
This commit is contained in:
Blue Swirl
2009-02-08 15:45:15 +00:00
parent c6040cb8a0
commit a72df592da
2 changed files with 7 additions and 8 deletions

View File

@@ -192,16 +192,16 @@ iso9660_dir (char *dirname)
rr_ptr.rr->signature >> 8);
#endif
}
else if (rr_ptr.rr->signature == RRMAGIC('R', 'R')
else if (CHECK2(&rr_ptr.rr->signature, 'R', 'R')
&& rr_ptr.rr->len >= 5)
rr_flag &= rr_ptr.rr->u.rr.flags.ENDIAN;
else if (rr_ptr.rr->signature == RRMAGIC('N', 'M'))
else if (CHECK2(&rr_ptr.rr->signature, 'N', 'M'))
{
name = (char *)rr_ptr.rr->u.nm.name;
name_len = rr_ptr.rr->len - 5;
rr_flag &= ~RR_FLAG_NM;
}
else if (rr_ptr.rr->signature == RRMAGIC('P', 'X')
else if (CHECK2(&rr_ptr.rr->signature, 'P', 'X')
&& rr_ptr.rr->len >= 36)
{
file_type = ((rr_ptr.rr->u.px.mode.ENDIAN & POSIX_S_IFMT)
@@ -212,7 +212,7 @@ iso9660_dir (char *dirname)
? ISO_DIRECTORY : ISO_OTHER));
rr_flag &= ~RR_FLAG_PX;
}
else if (rr_ptr.rr->signature == RRMAGIC('C', 'E')
else if (CHECK2(&rr_ptr.rr->signature, 'C', 'E')
&& rr_ptr.rr->len >= 28)
ce_ptr = rr_ptr.rr;
if (!rr_flag)

View File

@@ -157,10 +157,9 @@ typedef union RR_ptr {
int i;
} RR_ptr_t;
#define RRMAGIC(c1, c2) ((c1)|(c2) << 8)
#define CHECK2(ptr, c1, c2) \
(*(ptr) == (c1) && *(ptr + 1) == (c2))
#define CHECK2(ptr, c1, c2) \
(*(unsigned char *)(ptr) == (c1) && \
*((unsigned char *)(ptr) + 1) == (c2))
#define CHECK4(ptr, c1, c2, c3, c4) \
(*(unsigned char *)(ptr) == (c1) && \
*((unsigned char *)(ptr) + 1) == (c2) && \