Bug fix
authorRobert Pengelly <robertapengelly@hotmail.com>
Thu, 12 Jun 2025 00:43:17 +0000 (01:43 +0100)
committerRobert Pengelly <robertapengelly@hotmail.com>
Thu, 12 Jun 2025 00:43:17 +0000 (01:43 +0100)
ranlib.c

index 89cbe8b275b5f7973e23628b49830eb15bb8a933..c513f05d7d5d8c4a8ea2d7fcf0b35412e0e505b2 100644 (file)
--- a/ranlib.c
+++ b/ranlib.c
@@ -343,6 +343,19 @@ static void elf_get_symbols (void *object, long offset, int endianess) {
 
 }
 
+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;
@@ -350,7 +363,7 @@ static void hunk_get_symbols (void *object, unsigned long bytes, long offset) {
     
     struct strtab *strtab;
     
-    name_size = array_to_integer (pos, 4);
+    name_size = array_to_be_integer (pos, 4);
     name_size *= 4;
     
     pos = pos + 4 + name_size;
@@ -374,7 +387,7 @@ static void hunk_get_symbols (void *object, unsigned long bytes, long offset) {
             
             if (pos[3] != 0xEB) {
             
-                size = array_to_integer (pos, 4);
+                size = array_to_be_integer (pos, 4);
                 size *= 4;
                 
                 pos = pos + 4 + size;
@@ -395,7 +408,7 @@ static void hunk_get_symbols (void *object, unsigned long bytes, long offset) {
             
             while (1) {
             
-                name_size = array_to_integer (pos, 4);
+                name_size = array_to_be_integer (pos, 4);
                 pos += 4;
                 
                 if (name_size == 0) {
@@ -418,7 +431,7 @@ static void hunk_get_symbols (void *object, unsigned long bytes, long offset) {
                         pos += 4;
                     }
                     
-                    num_ref = array_to_integer (pos, 4);
+                    num_ref = array_to_be_integer (pos, 4);
                     num_ref *= 4;
                     
                     pos = pos + 4 + num_ref;
@@ -445,7 +458,7 @@ static void hunk_get_symbols (void *object, unsigned long bytes, long offset) {
             
             while (1) {
             
-                size = array_to_integer (pos, 4) * 4;
+                size = array_to_be_integer (pos, 4) * 4;
                 pos += 4;
                 
                 if (size == 0) {