#include <sys/dir.h>
#include <sys/attr.h>
#include <kern/assert.h>
-#include <architecture/byte_order.h>
#include <isofs/cd9660/iso.h>
#include <isofs/cd9660/cd9660_node.h>
/*
* translate and compare a UCS-2 filename
* Note: Version number plus ';' may be omitted.
+ *
+ * The name pointed to by "fn" is the search name, whose characters are
+ * in native endian order. The name "ucsfn" is the on-disk name, whose
+ * characters are in big endian order.
*/
int
while (--fnlen >= 0) {
if (--ucslen < 0)
return *fn;
- if ((c = *ucsfn++) == UCS_SEPARATOR2) {
+ if ((c = OSSwapBigToHostInt16(*ucsfn++)) == UCS_SEPARATOR2) {
switch (*fn++) {
default:
return *--fn;
return -1;
}
}
- for (j = 0; --ucslen >= 0; j = j * 10 + *ucsfn++ - '0');
+ for (j = 0; --ucslen >= 0; j = j * 10 + OSSwapBigToHostInt16(*ucsfn++) - '0');
return i - j;
}
if (c != *fn)
switch (*ucsfn) {
default:
return -1;
- case UCS_SEPARATOR1:
- if (ucsfn[1] != UCS_SEPARATOR2)
+ case OSSwapHostToBigConstInt16(UCS_SEPARATOR1):
+ if (ucsfn[1] != OSSwapHostToBigConstInt16(UCS_SEPARATOR2))
return -1;
- case UCS_SEPARATOR2:
+ case OSSwapHostToBigConstInt16(UCS_SEPARATOR2):
return 0;
}
}
/* strip file version number */
for (fnidx--; fnidx > 0; fnidx--) {
/* stop when ';' is found */
- if (infn[fnidx] == UCS_SEPARATOR2) {
+ if (infn[fnidx] == OSSwapHostToBigConstInt16(UCS_SEPARATOR2)) {
/* drop dangling dot */
- if (fnidx > 0 && infn[fnidx-1] == UCS_SEPARATOR1)
+ if (fnidx > 0 && infn[fnidx-1] == OSSwapHostToBigConstInt16(UCS_SEPARATOR1))
fnidx--;
break;
}