93{
94 size_t __3_or_4 = 3;
95 size_t __6_or_10 = 6;
96 if (_version > 2) {
97 __3_or_4 = 4;
98 __6_or_10 = 10;
99 }
100
101
102 const char* p = _begin;
103 bool valid = true;
104 while (p + __6_or_10 < _end && *p != '\0') {
107 uint32_t size = ID3v2::word8(p + __3_or_4, __3_or_4);
108 if (_debug) {
110 }
111 p += size + __6_or_10;
112 }
113 else {
114 if (_debug) {
116 }
117 valid = false;
118 break;
119 }
120 }
121
122 if (p > _end || (p < _end && *p != '\0')) {
123
124
125 if (_debug) {
127 }
128 valid = false;
129 }
130
131 if (valid) {
132 return 8;
133 }
134
135
136 p = _begin;
137 valid = true;
138 while (p + __6_or_10 < _end && *p != '\0') {
141 uint32_t size = ID3v2::word7(p + __3_or_4, __3_or_4);
142 if (_debug) {
144 }
145 p += size + __6_or_10;
146 }
147 else {
148 if (_debug) {
150 }
151 valid = false;
152 break;
153 }
154 }
155
156 if (p > _end || (p < _end && *p != '\0')) {
157
158
159 if (_debug) {
161 }
162 valid = false;
163 }
164
165 if (valid) {
166 return 7;
167 }
168
169 return 0;
170}
bool __IS_UPPER(const char *_begin, const char *_end)
#define __DCL_TRACE0(psz)
#define __DCL_TRACE3(fmt, arg1, arg2, arg3)
#define __DCL_TRACE2(fmt, arg1, arg2)