static long from_hex( byte const* in ) { unsigned result = 0; for ( int n = 4; n--; ) { int h = from_hex_char( *in++ ); if ( h > 15 ) return -1; result = result * 0x10 + h; } return result; }
static int from_hex( byte const in [] ) { int result = 0; for ( int n = 4; n--; ) { int h = from_hex_char( *in++ ); if ( h > 15 ) return -1; result = result * 0x10 + h; } return result; }
static char* parse_track( char* in, M3u_Playlist::entry_t& entry, int* result ) { if ( *in == '$' ) { in++; int n = 0; while ( 1 ) { int h = from_hex_char( *in ); if ( h > 15 ) break; in++; n = n * 16 + h; entry.track = n; } } else { in = parse_int_( in, &entry.track ); if ( entry.track >= 0 ) entry.decimal_track = 1; } return next_field( in, result ); }