static groupRecord_t * groupListParseRecord(char * record) { char * pBuf = record + 1; //+1 is to ignore the 'for deletion' mark that may just be added to this record. static groupRecord_t group; static char groupName[MAX_SUPPORTED_GROUP_NAME_LENGTH + 1]; static groupMembersRecord_t member[MAX_SUPPORTED_GROUP_MEMBERS]; groupMembersRecord_t ** nextMemberPtr; parsingResult_t parsingResult = { SDB_TXT_PARSER_RESULT_OK, 0 }; int i; if (record == NULL) { return NULL; } sdb_txt_parser_get_numeric_field(&pBuf, (uint8_t *) &group.id, 2, FALSE, &parsingResult); sdb_txt_parser_get_quoted_string(&pBuf, groupName, MAX_SUPPORTED_GROUP_NAME_LENGTH, &parsingResult); nextMemberPtr = &group.members; for (i = 0; (parsingResult.code == SDB_TXT_PARSER_RESULT_OK) && (i < MAX_SUPPORTED_GROUP_MEMBERS); i++) { *nextMemberPtr = &(member[i]); sdb_txt_parser_get_numeric_field(&pBuf, (uint8_t *) &(member[i].nwkAddr), 2, FALSE, &parsingResult); sdb_txt_parser_get_numeric_field(&pBuf, (uint8_t *) &(member[i].endpoint), 1, FALSE, &parsingResult); nextMemberPtr = &(member[i].next); } *nextMemberPtr = NULL; if ((parsingResult.code != SDB_TXT_PARSER_RESULT_OK) && (parsingResult.code != SDB_TXT_PARSER_RESULT_REACHED_END_OF_RECORD)) { sdbtMarkError(db, record, &parsingResult); return NULL; } if (strlen(groupName) > 0) { group.name = groupName; } else { group.name = NULL; } return &group; }
bool sdbtErrorComment(db_descriptor * db, char * record) { parsingResult_t parsingResult = {SDB_TXT_PARSER_RESULT_OK, 0}; char * pBuf = record + 1; char comment[MAX_SUPPORTED_RECORD_SIZE]; uint8_t errorCode; uint16_t errorOffset; bool rc; char tempstr[3] = {SDBT_BAD_FORMAT_CHARACTER, '\n', '\0'}; if (record[0] == SDBT_PENDING_COMMENT_FORMAT_CHARACTER) { record[0] = SDBT_BAD_FORMAT_CHARACTER; sprintf(comment,"%c-------\n", SDBT_BAD_FORMAT_CHARACTER); rc = sdb_add_record(db, comment) && sdb_add_record(db, record); if (rc == TRUE) { // printf("here&\n"); sdb_txt_parser_get_numeric_field(&pBuf, &errorCode, 1, FALSE, &parsingResult); if (errorCode > SDB_TXT_PARSER_RESULT_MAX) { //printf("here0\n"); parsingResult.code = SDB_TXT_PARSER_RESULT_VALUE_OUT_OF_RANGE; parsingResult.errorLocation = pBuf - 2; } else { //printf("here1 %d \n", parsingResult.code); sdb_txt_parser_get_numeric_field(&pBuf, (uint8_t *)&errorOffset, 2, FALSE, &parsingResult); if (errorOffset >= strlen(record)) { parsingResult.code = SDB_TXT_PARSER_RESULT_VALUE_OUT_OF_RANGE; parsingResult.errorLocation = pBuf - 2; } } // printf("here2\n"); if (parsingResult.code == SDB_TXT_PARSER_RESULT_OK) { // printf("here3\n"); // printf("%s\n%d %d\n", record, errorOffset - 7 + 1, errorCode); sprintf(comment,"%cERROR:%*s %s\n", SDBT_BAD_FORMAT_CHARACTER, errorOffset - 7 + 1, "^", parsingErrorStrings[errorCode]); } else { // printf("here4\n"); // printf("%s\n%d %d\n", record, parsingResult.errorLocation - record - 1 + 1, parsingResult.code); sprintf(comment,"%c%*s %s (%s)\n", SDBT_BAD_FORMAT_CHARACTER, parsingResult.errorLocation - record - 1 + 1, "^", "BAD_ERROR_DESCRIPTION_HEADER", parsingErrorStrings[parsingResult.code]); } // printf("here5\n"); rc = sdb_add_record(db, comment) && sdb_add_record(db, tempstr); } } else { rc = sdb_add_record(db, record); } return rc; }