}
-unsigned long array_to_integer (unsigned char *arr, int size) {
+unsigned long array_to_integer (unsigned char *arr, int size, int bigendian) {
unsigned long value = 0;
int i;
- for (i = 0; i < size; i++) {
- value |= arr[i] << (CHAR_BIT * i);
+ if (bigendian) {
+
+ int j;
+
+ for (i = size, j = 0; i > 0; i--, j++) {
+ value |= arr[j] << (CHAR_BIT * (i - 1));
+ }
+
+ } else {
+
+ for (i = 0; i < size; i++) {
+ value |= arr[i] << (CHAR_BIT * i);
+ }
+
}
return value;
char *xstrdup (const char *str);
char *xstrndup (const char *__p, unsigned long __size);
-unsigned long array_to_integer (unsigned char *arr, int size);
+unsigned long array_to_integer (unsigned char *arr, int size, int bigendian);
void *xmalloc (unsigned long size);
void *xrealloc (void *ptr, unsigned long size);
}
-unsigned long array_to_be_integer (unsigned char *arr, int size) {
-
- unsigned long value = 0;
- int i, j;
-
- for (i = size, j = 0; i > 0; i--, j++) {
- value |= arr[j] << (CHAR_BIT * (i - 1));
- }
-
- return value;
-
-}
-
static void hunk_get_symbols (void *object, unsigned long bytes, long offset) {
unsigned char *pos = (unsigned char *) object + 4;
struct strtab *strtab;
- name_size = array_to_be_integer (pos, 4);
+ name_size = array_to_integer (pos, 4, 1);
name_size *= 4;
pos = pos + 4 + name_size;
if (pos[3] != 0xEB) {
- size = array_to_be_integer (pos, 4);
+ size = array_to_integer (pos, 4, 1);
size *= 4;
pos = pos + 4 + size;
while (1) {
- name_size = array_to_be_integer (pos, 4);
+ name_size = array_to_integer (pos, 4, 1);
pos += 4;
if (name_size == 0) {
pos += 4;
}
- num_ref = array_to_be_integer (pos, 4);
+ num_ref = array_to_integer (pos, 4, 1);
num_ref *= 4;
pos = pos + 4 + num_ref;
while (1) {
- size = array_to_be_integer (pos, 4) * 4;
+ size = array_to_integer (pos, 4, 1) * 4;
pos += 4;
if (size == 0) {
big_fields = record_type & 1;
record_type &= ~1;
- record_len = array_to_be_integer (pos + 1, 2);
+ record_len = array_to_integer (pos + 1, 2, 1);
{