Added support for big-endian architectures.

New support seems OK so far for me, but I want to test it a bit more
before making an official 0.3.5 release....
This commit is contained in:
srs5694
2009-08-26 00:48:01 -04:00
parent e19ba095c0
commit 2a9f5da3c3
8 changed files with 316 additions and 79 deletions

View File

@@ -130,7 +130,6 @@ uint64_t GetLastSector(uint64_t low, uint64_t high, char prompt[]) {
return ((uint64_t) response);
} // GetLastSector()
// Return a plain-text name for a partition type.
// Takes a size in bytes (in size) and converts this to a size in
// SI units (KiB, MiB, GiB, TiB, or PiB), returned in C++ string
// form
@@ -182,8 +181,8 @@ int GetBlockSize(int fd) {
#endif
if (result != 512) {
printf("\aWARNING! Sector size is not 512 bytes! This program is likely to");
printf("misbehave! Proceed at your own risk!\n\n");
printf("\aWARNING! Sector size is not 512 bytes! This program is likely to ");
printf("misbehave!\nProceed at your own risk!\n\n");
} // if
if (err == -1)
@@ -191,6 +190,7 @@ int GetBlockSize(int fd) {
return (result);
} // GetBlockSize()
// Return a plain-text name for a partition type.
// Convert a GUID to a string representation, suitable for display
// to humans....
char* GUIDToStr(struct GUIDData theGUID, char* theString) {
@@ -303,6 +303,34 @@ GUIDData GetGUID(void) {
return theGUID;
} // GetGUID()
// Return 1 if the CPU architecture is little endian, 0 if it's big endian....
int IsLittleEndian(void) {
int littleE = 1; // assume little-endian (Intel-style)
union {
uint32_t num;
unsigned char uc[sizeof(uint32_t)];
} endian;
endian.num = 1;
if (endian.uc[0] != (unsigned char) 1) {
littleE = 0;
} // if
return (littleE);
} // IsLittleEndian()
// Reverse the byte order of theValue; numBytes is number of bytes
void ReverseBytes(char* theValue, int numBytes) {
char* tempValue;
int i;
tempValue = (char*) malloc(numBytes);
for (i = 0; i < numBytes; i++)
tempValue[i] = theValue[i];
for (i = 0; i < numBytes; i++)
theValue[i] = tempValue[numBytes - i - 1];
free(tempValue);
} // ReverseBytes()
// Compute (2 ^ value). Given the return type, value must be 63 or less.
// Used in some bit-fiddling functions
uint64_t PowerOf2(int value) {