Skip to content

Commit 0e1fa7c

Browse files
committed
adf_raw / swapTable, adfSwapEndian: refactor / simplify.
1 parent 370572b commit 0e1fa7c

1 file changed

Lines changed: 100 additions & 25 deletions

File tree

src/adf_raw.c

Lines changed: 100 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,103 @@
3535
#define SW_LONG 4
3636
#define SW_SHORT 2
3737
#define SW_CHAR 1
38+
#define TOT_LEN 0
3839

3940
#define MAX_SWTYPE 11
4041

41-
static const int swapTable [ MAX_SWTYPE + 1 ][ 15 ] = {
42-
{ 4, SW_CHAR, 2, SW_LONG, 1012, SW_CHAR, 0, 1024 }, /* first bytes of boot */
43-
{ 108, SW_LONG, 40, SW_CHAR, 10, SW_LONG, 0, 512 }, /* root */
44-
{ 6, SW_LONG, 488, SW_CHAR, 0, 512 }, /* data */
45-
/* file, dir, entry */
46-
{ 82, SW_LONG, 92, SW_CHAR, 3, SW_LONG, 36, SW_CHAR, 11, SW_LONG, 0, 512 },
47-
{ 6, SW_LONG, 0, 24 }, /* cache */
48-
{ 128, SW_LONG, 0, 512 }, /* bitmap, fext */
49-
/* link */
50-
{ 6, SW_LONG, 64, SW_CHAR, 86, SW_LONG, 32, SW_CHAR, 12, SW_LONG, 0, 512 },
51-
{ 4, SW_CHAR, 39, SW_LONG, 56, SW_CHAR, 10, SW_LONG, 0, 256 }, /* RDSK */
52-
{ 4, SW_CHAR, 127, SW_LONG, 0, 512 }, /* BADB */
53-
{ 4, SW_CHAR, 8, SW_LONG, 32, SW_CHAR, 31, SW_LONG, 4, SW_CHAR, /* PART */
54-
15, SW_LONG, 0, 256 },
55-
{ 4, SW_CHAR, 7, SW_LONG, 4, SW_CHAR, 55, SW_LONG, 0, 256 }, /* FSHD */
56-
{ 4, SW_CHAR, 4, SW_LONG, 492, SW_CHAR, 0, 512 } /* LSEG */
57-
};
42+
43+
struct swapEl {
44+
int type, len;
45+
};
46+
47+
static const struct swapEl swapTable [ MAX_SWTYPE + 1 ][ 7 ] = {
48+
/* first bytes of boot */
49+
{ { SW_CHAR, 4 },
50+
{ SW_LONG, 2 },
51+
{ SW_CHAR, 1012 },
52+
{ TOT_LEN, 1024 } // total len. (control)
53+
},
54+
55+
/* root */
56+
{ { SW_LONG, 108 },
57+
{ SW_CHAR, 40 },
58+
{ SW_LONG, 10 },
59+
{ TOT_LEN, 512 }
60+
},
61+
62+
/* data */
63+
{ { SW_LONG, 6 },
64+
{ SW_CHAR, 488 },
65+
{ TOT_LEN, 512 }
66+
},
67+
68+
/* file, dir, entry */
69+
{ { SW_LONG, 82 },
70+
{ SW_CHAR, 92 },
71+
{ SW_LONG, 3 },
72+
{ SW_CHAR, 36 },
73+
{ SW_LONG, 11 },
74+
{ TOT_LEN, 512 }
75+
},
76+
77+
/* cache */
78+
{ { SW_LONG, 6 },
79+
{ TOT_LEN, 24 }
80+
},
81+
82+
/* bitmap, fext */
83+
{ { SW_LONG, 128 },
84+
{ TOT_LEN, 512 }
85+
},
86+
87+
/* link */
88+
{ { SW_LONG, 6 },
89+
{ SW_CHAR, 64 },
90+
{ SW_LONG, 86 },
91+
{ SW_CHAR, 32 },
92+
{ SW_LONG, 12 },
93+
{ TOT_LEN, 512 }
94+
},
95+
96+
/* RDSK */
97+
{ { SW_CHAR, 4 },
98+
{ SW_LONG, 39 },
99+
{ SW_CHAR, 56 },
100+
{ SW_LONG, 10 },
101+
{ TOT_LEN, 256 }
102+
},
103+
104+
/* BADB */
105+
{ { SW_CHAR, 4 },
106+
{ SW_LONG, 127 },
107+
{ TOT_LEN, 512 }
108+
},
109+
110+
/* PART */
111+
{ { SW_CHAR, 4 },
112+
{ SW_LONG, 8 },
113+
{ SW_CHAR, 32 },
114+
{ SW_LONG, 31 },
115+
{ SW_CHAR, 4 },
116+
{ SW_LONG, 15 },
117+
{ TOT_LEN, 256 }
118+
},
119+
120+
/* FSHD */
121+
{ { SW_CHAR, 4 },
122+
{ SW_LONG, 7 },
123+
{ SW_CHAR, 4 },
124+
{ SW_LONG, 55 },
125+
{ TOT_LEN, 256 }
126+
},
127+
128+
/* LSEG */
129+
{ { SW_CHAR, 4 },
130+
{ SW_LONG, 4 },
131+
{ SW_CHAR, 492 },
132+
{ TOT_LEN, 512 }
133+
}
134+
};
58135

59136

60137
/*
@@ -77,9 +154,9 @@ void adfSwapEndian( uint8_t * const buf,
77154
return;
78155
}
79156

80-
while ( swapTable[ type ][ i ] != 0 ) {
81-
for ( int j = 0 ; j < swapTable[ type ][ i ] ; j++ ) {
82-
switch ( swapTable[ type ][ i + 1 ] ) {
157+
while ( swapTable[ type ][ i ].type != TOT_LEN ) {
158+
for ( int j = 0 ; j < swapTable[ type ][ i ].len ; j++ ) {
159+
switch ( swapTable[ type ][ i ].type ) {
83160
case SW_LONG:
84161
swapUint32AtPtr( buf + p );
85162
p += 4;
@@ -95,16 +172,14 @@ void adfSwapEndian( uint8_t * const buf,
95172
;
96173
}
97174
}
98-
i += 2;
175+
i++;
99176
}
100-
if ( p != swapTable[ type ][ i + 1 ] )
177+
178+
if ( p != swapTable[ type ][ i ].len )
101179
adfEnv.wFct("%s: Warning: Endian Swapping length", __func__ ); /* BV */
102180
}
103181

104182

105-
106-
107-
108183
/*
109184
* adfReadRootBlock
110185
*

0 commit comments

Comments
 (0)