Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
config/ConfigParser.cpp
- Committer:
- xinlei
- Date:
- 2015-05-08
- Revision:
- 103:ede6611e064e
- Parent:
- 101:dbcd3bc51758
- Child:
- 106:c61f0d62b625
File content as of revision 103:ede6611e064e:
#include <string.h>
#include "ConfigParser.h"
#include "logging.h"
bool ConfigParser::parse(const char *buf)
{
if (buf == NULL) return false;
Token tok;
ptrPF = &ConfigParser::parseKey;
parseOK = true;
dict.clear();
for (const char*p = buf; *p;) {
p = lexConfig(p, tok);
(this->*ptrPF)(tok);
}
return parseOK;
}
void ConfigParser::parseKey(Token& tok)
{
if (tok.type == Token::STRING) {
memset(key, 0, MAX_KEY_LEN);
size_t num = tok.len<MAX_VALUE_LEN ? tok.len : MAX_VALUE_LEN;
strncpy(key, tok.p, num);
ptrPF = &ConfigParser::parseAssignOp;
} else {
parseError(tok);
}
}
void ConfigParser::parseAssignOp(Token& tok)
{
if (tok.type == Token::ASSIGN) {
ptrPF = &ConfigParser::parseValue;
} else {
parseError(tok);
}
}
void ConfigParser::parseValue(Token& tok)
{
if (tok.type != Token::NONE) {
if (strncmp(key, "interval", MAX_KEY_LEN) == 0 &&
tok.type != Token::INT) {
parseError(tok);
} else {
memset(value, 0, MAX_VALUE_LEN);
size_t num = tok.len<MAX_VALUE_LEN ? tok.len : MAX_VALUE_LEN;
strncpy(value, tok.p, num);
dict.set(key, value);
ptrPF = &ConfigParser::parseSemiColon;
}
} else {
parseError(tok);
}
}
void ConfigParser::parseSemiColon(Token& tok)
{
if (tok.type == Token::SEMICOLON) {
ptrPF = &ConfigParser::parseKey;
} else {
parseError(tok);
}
}
void ConfigParser::parseError(Token& tok)
{
parseOK = false;
aError("ConfParse: (%d) %.*s\n", tok.type, (int)tok.len, tok.p);
parseRecover(tok);
}
void ConfigParser::parseRecover(Token& tok)
{
if (tok.type == Token::SEMICOLON) {
ptrPF = &ConfigParser::parseKey;
} else {
ptrPF = &ConfigParser::parseRecover;
}
}

Cumulocity