]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - util.c
Big-endian: Byteswap only the field contents when writing progs.dat
[xonotic/gmqcc.git] / util.c
diff --git a/util.c b/util.c
index 4e1f4f013074b4f93928d8b55d196f7ea6211df1..bcffdcbf9fa43df7be0bb4925f33240a065e1ad1 100644 (file)
--- a/util.c
+++ b/util.c
@@ -95,7 +95,7 @@ const char *util_instr_str[VINSTR_END] = {
     }
 #endif
 
-void util_endianswap(void *_data, size_t length, unsigned int typesize) {
+void util_tolittleendianarray(void *_data, size_t length, unsigned int typesize) {
 #   if PLATFORM_BYTE_ORDER == -1 /* runtime check */
     if (*((char*)&typesize))
         return;
@@ -111,21 +111,27 @@ void util_endianswap(void *_data, size_t length, unsigned int typesize) {
         switch (typesize) {
             case 1: return;
             case 2:
-                util_swap16((uint16_t*)_data, length>>1);
+                util_swap16((uint16_t*)_data, length);
                 return;
             case 4:
-                util_swap32((uint32_t*)_data, length>>2);
+                util_swap32((uint32_t*)_data, length);
                 return;
             case 8:
-                util_swap64((uint32_t*)_data, length>>3);
+                util_swap64((uint32_t*)_data, length);
                 return;
 
-            default: exit(EXIT_FAILURE); /* please blow the fuck up! */
+            default:
+                con_err ("util_tolittleendianarray: I don't know how to swap a %d byte structure!\n", typesize);
+                exit(EXIT_FAILURE); /* please blow the fuck up! */
         }
 #   endif
 #endif
 }
 
+void util_tolittleendian(void *_data, unsigned int typesize) {
+    util_tolittleendianarray(_data, 1, typesize);
+}
+
 /*
 * Based On:
 *   Slicing-by-8 algorithms by Michael E.