static int parse_username_and_password(const char *begin, const char *end, size_t *data_out_ptr, size_t out_limit, avs_url_t *parsed_url) { // parse username size_t user_ptr = *data_out_ptr; while (begin < end && *data_out_ptr < out_limit && *begin != ':') { parsed_url->data[(*data_out_ptr)++] = *begin++; } parsed_url->data[(*data_out_ptr)++] = '\0'; assert(begin == end || *begin == ':'); if (!is_valid_credential(&parsed_url->data[user_ptr]) || prepare_string(&parsed_url->data[user_ptr])) { LOG(ERROR, "invalid username"); return -1; } parsed_url->user_ptr = user_ptr; *data_out_ptr = user_ptr + strlen(&parsed_url->data[user_ptr]) + 1; if (begin >= end) { return 0; // no password } // parse password size_t password_ptr = *data_out_ptr; ++begin; // move after ':' while (begin < end && *data_out_ptr < out_limit) { parsed_url->data[(*data_out_ptr)++] = *begin++; } parsed_url->data[(*data_out_ptr)++] = '\0'; assert(begin == end); if (!is_valid_credential(&parsed_url->data[password_ptr]) || prepare_string(&parsed_url->data[password_ptr])) { LOG(ERROR, "invalid username"); return -1; } parsed_url->password_ptr = password_ptr; *data_out_ptr = password_ptr + strlen(&parsed_url->data[password_ptr]) + 1; return 0; }
static void writeText ( u8 *str, u16 pal, u8 inc_y ) { u8 x = 20 - strlen ( str ) / 2; SYS_disableInts(); VDP_setTextPalette ( pal ); VDP_drawText ( prepare_string(str), x, y ); SYS_enableInts(); y += inc_y; }