misc: get rid of an unaligned read
authornotaz <notasas@gmail.com>
Sun, 28 Aug 2022 20:51:40 +0000 (23:51 +0300)
committerLibretroAdmin <reallibretroretroarch@gmail.com>
Mon, 29 Aug 2022 23:15:14 +0000 (01:15 +0200)
96c6ec7055ecef55b3dd221c86b796512bf52107 introduced an unaligned read
which is undefined behavior in C, even if most hardware allows it
(but some very old ARMs don't). Perf. doesn't matter here so read
byte-by-byte.

notaz/pcsx_rearmed#261

libpcsxcore/misc.c

index f6fe19a..854bbb8 100644 (file)
@@ -56,10 +56,11 @@ struct iso_directory_record {
        char name                       [1];
 };
 
-void mmssdd( char *b, char *p )
+static void mmssdd( char *b, char *p )
 {
        int m, s, d;
-       int block = SWAP32(*((uint32_t*) b));
+       unsigned char *ub = (void *)b;
+       int block = (ub[3] << 24) | (ub[2] << 16) | (ub[1] << 8) | ub[0];
 
        block += 150;
        m = block / 4500;                       // minutes