4320{
4321 for(;;) {
4323 if (f->
eof)
return 0;
4325 if (n == 0x4f) {
4328
4330 return 0;
4331
4332 for (i=1; i < 4; ++i)
4334 break;
4335 if (f->
eof)
return 0;
4336 if (i == 4) {
4338 uint32 i, crc, goal, len;
4339 for (i=0; i < 4; ++i)
4341 for (; i < 27; ++i)
4342 header[i] =
get8(f);
4343 if (f->
eof)
return 0;
4344 if (header[4] != 0) goto invalid;
4345 goal = header[22] + (header[23] << 8) + ((
uint32)header[24]<<16) + ((
uint32)header[25]<<24);
4346 for (i=22; i < 26; ++i)
4347 header[i] = 0;
4348 crc = 0;
4349 for (i=0; i < 27; ++i)
4351 len = 0;
4352 for (i=0; i < header[26]; ++i) {
4355 len += s;
4356 }
4357 if (len && f->
eof)
return 0;
4358 for (i=0; i < len; ++i)
4360
4361 if (crc == goal) {
4362
4363
4364
4365
4366
4367
4368
4369
4372 if (last) {
4373 if (header[5] & 0x04)
4374 *last = 1;
4375 else
4376 *last = 0;
4377 }
4379 return 1;
4380 }
4381 }
4382 invalid:
4383
4385 }
4386 }
4387}
static uint8 ogg_page_header[4]
FL_ALWAYS_INLINE uint32 crc32_update(uint32 crc, uint8 byte) FL_NOEXCEPT
static uint8 get8(vorb *z) FL_NOEXCEPT
uint32_t stb_vorbis_get_file_offset(stb_vorbis *f) FL_NOEXCEPT
static int32_t set_file_offset(stb_vorbis *f, uint32_t loc) FL_NOEXCEPT
constexpr T * end(T(&array)[N]) FL_NOEXCEPT