1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
--- a/libhfsp/src/btree.c
+++ b/libhfsp/src/btree.c
@@ -393,7 +393,7 @@ static int btree_init(btree* bt, volume*
{
p = volume_readfromfork(vol, nodebuf, fork, 0, bt->blkpernode,
HFSP_EXTENT_DATA, bt->cnid);
- ((char*) p) += HEADER_RESERVEDOFFSET; // skip header
+ p += HEADER_RESERVEDOFFSET; // skip header
}
bt->alloc_bits = malloc(alloc_size);
--- a/libhfsp/src/swab.h
+++ b/libhfsp/src/swab.h
@@ -36,28 +36,28 @@
#define bswabU16(val) bswap_16(val)
-#define bswabU16_inc(ptr) bswap_16(*((UInt16*) (ptr))++)
-#define bswabU32_inc(ptr) bswap_32(*((UInt32*) (ptr))++)
-#define bswabU64_inc(ptr) bswap_64(*((UInt64*) (ptr))++)
-
-#define bstoreU16_inc(ptr, val) (*((UInt16*) (ptr))++) = bswap_16(val)
-#define bstoreU32_inc(ptr, val) (*((UInt32*) (ptr))++) = bswap_32(val)
-#define bstoreU64_inc(ptr, val) (*((UInt64*) (ptr))++) = bswap_64(val)
+#define bswabU16_inc(ptr) bswap_16(*(*((UInt16**) (void *)(&ptr)))++)
+#define bswabU32_inc(ptr) bswap_32(*(*((UInt32**) (void *)(&ptr)))++)
+#define bswabU64_inc(ptr) bswap_64(*(*((UInt64**) (void *)(&ptr)))++)
+
+#define bstoreU16_inc(ptr, val) (*(*((UInt16**) (void *)(&ptr)))++) = bswap_16(val)
+#define bstoreU32_inc(ptr, val) (*(*((UInt32**) (void *)(&ptr)))++) = bswap_32(val)
+#define bstoreU64_inc(ptr, val) (*(*((UInt64**) (void *)(&ptr)))++) = bswap_64(val)
#else // BYTE_ORDER == BIG_ENDIAN
#define bswabU16(val) val
-#define bswabU16_inc(ptr) (*((UInt16*) (ptr))++)
-#define bswabU32_inc(ptr) (*((UInt32*) (ptr))++)
-#define bswabU64_inc(ptr) (*((UInt64*) (ptr))++)
-
-#define bstoreU16_inc(ptr, val) (*((UInt16*) (ptr))++) = val
-#define bstoreU32_inc(ptr, val) (*((UInt32*) (ptr))++) = val
-#define bstoreU64_inc(ptr, val) (*((UInt64*) (ptr))++) = val
+#define bswabU16_inc(ptr) (*(*((UInt16**) (void *)(&ptr)))++)
+#define bswabU32_inc(ptr) (*(*((UInt32**) (void *)(&ptr)))++)
+#define bswabU64_inc(ptr) (*(*((UInt64**) (void *)(&ptr)))++)
+
+#define bstoreU16_inc(ptr, val) (*(*((UInt16**) (void *)(&ptr)))++) = val
+#define bstoreU32_inc(ptr, val) (*(*((UInt32**) (void *)(&ptr)))++) = val
+#define bstoreU64_inc(ptr, val) (*(*((UInt64**) (void *)(&ptr)))++) = val
#endif
/* for the sake of compleetness and readability */
-#define bswabU8_inc(ptr) (*((UInt8*) (ptr))++)
-#define bstoreU8_inc(ptr,val) (*((UInt8*) (ptr))++) = val
+#define bswabU8_inc(ptr) (*(*((UInt8**) (void *)(&ptr)))++)
+#define bstoreU8_inc(ptr,val) (*(*((UInt8**) (void *)(&ptr)))++) = val
--- a/libhfsp/src/btreecheck.c
+++ b/libhfsp/src/btreecheck.c
@@ -264,7 +264,7 @@ static int fscheck_btree_init(btree* bt,
{
p = volume_readfromfork(vol, nodebuf, fork, 0, bt->blkpernode,
HFSP_EXTENT_DATA, bt->cnid);
- ((char*) p) += HEADER_RESERVEDOFFSET; // skip header
+ p += HEADER_RESERVEDOFFSET; // skip header
}
bt->alloc_bits = malloc(alloc_size);
--- a/libhfsp/src/fscheck.c
+++ b/libhfsp/src/fscheck.c
@@ -230,7 +230,7 @@ static int fscheck_volume_readbuf(volume
vh->write_count = bswabU32_inc(p);
vh->encodings_bmp = bswabU64_inc(p);
memcpy(vh->finder_info, p, 32);
- ((char*) p) += 32; // So finderinfo must be swapped later, ***
+ p += 32; // So finderinfo must be swapped later, ***
p = volume_readfork(p, &vh->alloc_file );
p = volume_readfork(p, &vh->ext_file );
p = volume_readfork(p, &vh->cat_file );
@@ -277,12 +277,12 @@ static int fscheck_read_wrapper(volume *
printf("Volume is wrapped in HFS volume "
" (use hfsck to check this)\n");
- ((char*) p) += 0x12; /* skip unneded HFS vol fields */
+ p += 0x12; /* skip unneded HFS vol fields */
drAlBlkSiz = bswabU32_inc(p); /* offset 0x14 */
- ((char*) p) += 0x4; /* skip unneded HFS vol fields */
+ p += 0x4; /* skip unneded HFS vol fields */
drAlBlSt = bswabU16_inc(p); /* offset 0x1C */
- ((char*) p) += 0x5E; /* skip unneded HFS vol fields */
+ p += 0x5E; /* skip unneded HFS vol fields */
signature = bswabU16_inc(p); /* offset 0x7C, drEmbedSigWord */
if (signature != HFSP_VOLHEAD_SIG)
HFSP_ERROR(-1, "This looks like a normal HFS volume");
--- a/libhfsp/src/volume.c
+++ b/libhfsp/src/volume.c
@@ -345,7 +345,7 @@ static int volume_readbuf(hfsp_vh* vh, v
vh->write_count = bswabU32_inc(p);
vh->encodings_bmp = bswabU64_inc(p);
memcpy(vh->finder_info, p, 32);
- ((char*) p) += 32; // finderinfo is not used by now
+ p += 32; // finderinfo is not used by now
p = volume_readfork(p, &vh->alloc_file );
p = volume_readfork(p, &vh->ext_file );
p = volume_readfork(p, &vh->cat_file );
@@ -381,7 +381,7 @@ static int volume_writebuf(hfsp_vh* vh,
bstoreU32_inc(p, vh->write_count );
bstoreU64_inc(p, vh->encodings_bmp );
memcpy(p, vh->finder_info, 32);
- ((char*) p) += 32; // finderinfo is not used by now
+ p += 32; // finderinfo is not used by now
p = volume_writefork(p, &vh->alloc_file );
p = volume_writefork(p, &vh->ext_file );
p = volume_writefork(p, &vh->cat_file );
@@ -417,12 +417,12 @@ static int volume_read_wrapper(volume *
UInt16 embeds, embedl; /* Start/lenght of embedded area in blocks */
- ((char*) p) += 0x12; /* skip unneeded HFS vol fields */
+ p += 0x12; /* skip unneeded HFS vol fields */
drAlBlkSiz = bswabU32_inc(p); /* offset 0x14 */
- ((char*) p) += 0x4; /* skip unneeded HFS vol fields */
+ p += 0x4; /* skip unneeded HFS vol fields */
drAlBlSt = bswabU16_inc(p); /* offset 0x1C */
- ((char*) p) += 0x5E; /* skip unneeded HFS vol fields */
+ p += 0x5E; /* skip unneeded HFS vol fields */
signature = bswabU16_inc(p); /* offset 0x7C, drEmbedSigWord */
if (signature != HFSP_VOLHEAD_SIG)
HFSP_ERROR(-1, "This looks like a normal HFS volume");
|