![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Backing up an unused program in case of future need
cfg.cpp
- Committer:
- andrewboyson
- Date:
- 2016-04-22
- Revision:
- 2:06fa34661f19
- Child:
- 6:be97d38e0b01
File content as of revision 2:06fa34661f19:
#include "mbed.h" #include "log.h" #define MAX_NAME_OR_VALUE 100 #define FILE_NAME "/local/cfg.txt" char *CfgSsid; char *CfgPassword; char *CfgNtpIp; int CfgBaud; static void saveString(char *value, char **dest) { *dest = (char*)realloc(*dest, strlen(value) + 1); //strlen does not include the null so add 1 if (*dest == NULL) { LogCrLf("Error reallocating memory in saveString"); return; } *dest = strcpy(*dest, value); } static void saveInt (char *value, int *dest) { *dest = atoi(value); } static void rtrim (int i, char *s) { //i is the length of the thing to trim while(1) { s[i] = '\0'; if (--i < 0) break; if (s[i] != ' ' && s[i] != '\t') break; } } static void handleLine(int n, int v, char *name, char *value) { rtrim(n, name); rtrim(v, value); if (strcmp(name, "ssid") == 0) saveString (value, &CfgSsid); if (strcmp(name, "password") == 0) saveString (value, &CfgPassword); if (strcmp(name, "ntp ip") == 0) saveString (value, &CfgNtpIp); if (strcmp(name, "baud") == 0) saveInt (value, &CfgBaud); } static void resetValues(void) { free(CfgSsid); CfgSsid = NULL; free(CfgPassword); CfgPassword = NULL; free(CfgNtpIp); CfgNtpIp = NULL; CfgBaud = 0; } int CfgInit() { FILE *fp = fopen(FILE_NAME, "r"); if (fp == NULL) { LogF("Error opening file %s for reading", FILE_NAME); return -1; } resetValues(); char name[MAX_NAME_OR_VALUE]; char value[MAX_NAME_OR_VALUE]; int isName = 1; int isValue = 0; int isStart = 0; //Used to trim starts int n = 0; int v = 0; while (1) { int c = fgetc(fp); if (c == '\r') continue; //Ignore windows <CR> characters if (c == EOF) { handleLine(n, v, name, value); break;} if (c == '\0') { handleLine(n, v, name, value); break;} if (c == '\n') { handleLine(n, v, name, value); isName = 1; isValue = 0; isStart = 0; n = 0; v = 0; continue;} if (c == '=' && isName) { isName = 0; isValue = 1; isStart = 0; continue;} if (c == '#') { isName = 0; isValue = 0; continue;} if (c != ' ' && c != '\t') isStart = -1; if (isName && isStart && n < MAX_NAME_OR_VALUE - 1) name[n++] = (char)c; //n can never exceed MAX_NAME_OR_VALUE - 1 leaving room for a null at length n if (isValue && isStart && v < MAX_NAME_OR_VALUE - 1) value[v++] = (char)c; //v can never exceed MAX_NAME_OR_VALUE - 1 leaving room for a null at length v } fclose(fp); return 0; }