in source/aws_profile.c [1073:1146]
static bool s_parse_property(const struct aws_byte_cursor *line_cursor, struct profile_file_parse_context *context) {
/*
* Strip whitespace-prefixed comment and right-side whitespace
*/
struct aws_byte_cursor property_line_cursor = s_trim_trailing_whitespace_comment(line_cursor);
struct aws_byte_cursor property_cursor = aws_byte_cursor_right_trim_pred(&property_line_cursor, s_is_whitespace);
context->current_property = NULL;
struct aws_byte_cursor key_cursor;
if (!s_parse_by_character_predicate(&property_cursor, s_is_not_assignment_operator, &key_cursor, 0)) {
AWS_LOGF_WARN(AWS_LS_SDKUTILS_PROFILE, "Property definition does not contain the assignment operator");
s_log_parse_context(AWS_LL_WARN, context);
context->parse_error = AWS_ERROR_SDKUTILS_PARSE_FATAL;
return true;
}
struct aws_byte_cursor trimmed_key_cursor = aws_byte_cursor_right_trim_pred(&key_cursor, s_is_whitespace);
struct aws_byte_cursor id_check_cursor = aws_byte_cursor_trim_pred(&trimmed_key_cursor, s_is_identifier);
if (id_check_cursor.len > 0) {
AWS_LOGF_WARN(AWS_LS_SDKUTILS_PROFILE, "Property definition does not begin with a valid identifier");
s_log_parse_context(AWS_LL_WARN, context);
context->parse_error = AWS_ERROR_SDKUTILS_PARSE_RECOVERABLE;
return true;
}
if (!s_parse_by_character_predicate(&property_cursor, s_is_assignment_operator, NULL, 1)) {
AWS_LOGF_WARN(AWS_LS_SDKUTILS_PROFILE, "Property definition does not contain the assignment operator");
s_log_parse_context(AWS_LL_WARN, context);
context->parse_error = AWS_ERROR_SDKUTILS_PARSE_FATAL;
return true;
}
s_parse_by_character_predicate(&property_cursor, s_is_whitespace, NULL, 0);
/*
* If appropriate, apply to the profile collection, property_cursor contains the trimmed value, if one exists
*/
if (context->current_profile != NULL) {
context->current_property =
s_profile_add_property(context->current_profile, &trimmed_key_cursor, &property_cursor);
if (context->current_property == NULL) {
AWS_LOGF_ERROR(
AWS_LS_SDKUTILS_PROFILE,
"Failed to add property \"" PRInSTR "\" to current profile \"%s\"",
AWS_BYTE_CURSOR_PRI(trimmed_key_cursor),
context->current_profile->name->bytes);
s_log_parse_context(AWS_LL_ERROR, context);
context->parse_error = AWS_ERROR_SDKUTILS_PARSE_FATAL;
}
} else {
/*
* By definition, if we haven't seen any profiles yet, this is a fatal error
*/
if (context->has_seen_profile) {
AWS_LOGF_WARN(AWS_LS_SDKUTILS_PROFILE, "Property definition seen outside a profile");
s_log_parse_context(AWS_LL_WARN, context);
context->parse_error = AWS_ERROR_SDKUTILS_PARSE_RECOVERABLE;
} else {
AWS_LOGF_WARN(AWS_LS_SDKUTILS_PROFILE, "Property definition seen before any profiles");
s_log_parse_context(AWS_LL_WARN, context);
context->parse_error = AWS_ERROR_SDKUTILS_PARSE_FATAL;
}
}
return true;
}