static gboolean _kv_scanner_extract_key(KVScanner *self) { const gchar *input_ptr = &self->input[self->input_pos]; const gchar *start_of_key; const gchar *separator; gsize len; separator = strchr(input_ptr, self->value_separator); do { if (!separator) return FALSE; start_of_key = separator; while (start_of_key > input_ptr && _is_valid_key_character(*(start_of_key - 1))) start_of_key--; len = separator - start_of_key; if (len < 1) separator = strchr(separator + 1, self->value_separator); } while (len < 1); g_string_assign_len(self->key, start_of_key, len); self->input_pos = separator - self->input + 1; return TRUE; }
static gboolean _kv_scanner_extract_key(KVScanner *self) { const gchar *input_ptr = &self->input[self->input_pos]; const gchar *start_of_key; const gchar *equal; equal = strchr(input_ptr, '='); if (!equal) return FALSE; start_of_key = equal - 1; while (start_of_key > input_ptr && _is_valid_key_character(*start_of_key)) start_of_key--; if (!_is_valid_key_character(*start_of_key)) start_of_key++; g_string_assign_len(self->key, start_of_key, equal - start_of_key); self->input_pos = equal - self->input + 1; return TRUE; }