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