Hi. This is the feed program for Cosm. (The previous name of the services is Pachube.)

Dependencies:   mbed ThermistorPack Pachube ConfigFile EthernetNetIf TextLCD HTTPClient_ToBeRemoved FatFileSystem SDFileSystem

Committer:
shintamainjp
Date:
Mon Aug 06 12:37:59 2012 +0000
Revision:
0:521ba375aa0f
Pachube renamed to Cosm.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:521ba375aa0f 1 /**
shintamainjp 0:521ba375aa0f 2 * Configuration file interface class (Version 0.0.1)
shintamainjp 0:521ba375aa0f 3 *
shintamainjp 0:521ba375aa0f 4 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
shintamainjp 0:521ba375aa0f 5 * http://shinta.main.jp/
shintamainjp 0:521ba375aa0f 6 */
shintamainjp 0:521ba375aa0f 7 #include "ConfigFile.h"
shintamainjp 0:521ba375aa0f 8
shintamainjp 0:521ba375aa0f 9 #define NEWLINE_UNIX "\n"
shintamainjp 0:521ba375aa0f 10 #define NEWLINE_DOS "\r\n"
shintamainjp 0:521ba375aa0f 11 #define NEWLINE_MAC "\r"
shintamainjp 0:521ba375aa0f 12
shintamainjp 0:521ba375aa0f 13 /**
shintamainjp 0:521ba375aa0f 14 * Create a configuration file class.
shintamainjp 0:521ba375aa0f 15 */
shintamainjp 0:521ba375aa0f 16 ConfigFile::ConfigFile() {
shintamainjp 0:521ba375aa0f 17 /*
shintamainjp 0:521ba375aa0f 18 * Allocation for a config_t list.
shintamainjp 0:521ba375aa0f 19 */
shintamainjp 0:521ba375aa0f 20 configlist = (config_t **)malloc(sizeof(config_t *) * MAXCONFIG);
shintamainjp 0:521ba375aa0f 21 for (int i = 0; i < MAXCONFIG; i++) {
shintamainjp 0:521ba375aa0f 22 configlist[i] = NULL;
shintamainjp 0:521ba375aa0f 23 }
shintamainjp 0:521ba375aa0f 24 }
shintamainjp 0:521ba375aa0f 25
shintamainjp 0:521ba375aa0f 26 /**
shintamainjp 0:521ba375aa0f 27 * Destroy a configuration file class.
shintamainjp 0:521ba375aa0f 28 */
shintamainjp 0:521ba375aa0f 29 ConfigFile::~ConfigFile() {
shintamainjp 0:521ba375aa0f 30 /*
shintamainjp 0:521ba375aa0f 31 * Remove all storage and the contents.
shintamainjp 0:521ba375aa0f 32 */
shintamainjp 0:521ba375aa0f 33 for (int i = 0; i < MAXCONFIG; i++) {
shintamainjp 0:521ba375aa0f 34 config_t *cfg = configlist[i];
shintamainjp 0:521ba375aa0f 35 if (cfg != NULL) {
shintamainjp 0:521ba375aa0f 36 free(cfg->key);
shintamainjp 0:521ba375aa0f 37 free(cfg->value);
shintamainjp 0:521ba375aa0f 38 free(cfg);
shintamainjp 0:521ba375aa0f 39 }
shintamainjp 0:521ba375aa0f 40 configlist[i] = NULL;
shintamainjp 0:521ba375aa0f 41 }
shintamainjp 0:521ba375aa0f 42
shintamainjp 0:521ba375aa0f 43 /*
shintamainjp 0:521ba375aa0f 44 * Remove cnofig_t list.
shintamainjp 0:521ba375aa0f 45 */
shintamainjp 0:521ba375aa0f 46 free(configlist);
shintamainjp 0:521ba375aa0f 47 configlist = NULL;
shintamainjp 0:521ba375aa0f 48 }
shintamainjp 0:521ba375aa0f 49
shintamainjp 0:521ba375aa0f 50 /**
shintamainjp 0:521ba375aa0f 51 * Get a value for a key.
shintamainjp 0:521ba375aa0f 52 *
shintamainjp 0:521ba375aa0f 53 * @param key A target key name.
shintamainjp 0:521ba375aa0f 54 * @param value A pointer to a value storage.
shintamainjp 0:521ba375aa0f 55 * @param siz A size of a value storage.
shintamainjp 0:521ba375aa0f 56 * @return A value or NULL.
shintamainjp 0:521ba375aa0f 57 */
shintamainjp 0:521ba375aa0f 58 bool ConfigFile::getValue(char *key, char *value, size_t siz) {
shintamainjp 0:521ba375aa0f 59 /*
shintamainjp 0:521ba375aa0f 60 * Null check.
shintamainjp 0:521ba375aa0f 61 */
shintamainjp 0:521ba375aa0f 62 if (key == NULL) {
shintamainjp 0:521ba375aa0f 63 return false;
shintamainjp 0:521ba375aa0f 64 }
shintamainjp 0:521ba375aa0f 65
shintamainjp 0:521ba375aa0f 66 /*
shintamainjp 0:521ba375aa0f 67 * Search a config_t object from the key.
shintamainjp 0:521ba375aa0f 68 */
shintamainjp 0:521ba375aa0f 69 config_t *p = search(key);
shintamainjp 0:521ba375aa0f 70 if (p == NULL) {
shintamainjp 0:521ba375aa0f 71 return false;
shintamainjp 0:521ba375aa0f 72 }
shintamainjp 0:521ba375aa0f 73
shintamainjp 0:521ba375aa0f 74 /*
shintamainjp 0:521ba375aa0f 75 * Check the storage size.
shintamainjp 0:521ba375aa0f 76 */
shintamainjp 0:521ba375aa0f 77 if (siz <= strlen(p->value)) {
shintamainjp 0:521ba375aa0f 78 return false;
shintamainjp 0:521ba375aa0f 79 }
shintamainjp 0:521ba375aa0f 80
shintamainjp 0:521ba375aa0f 81 /*
shintamainjp 0:521ba375aa0f 82 * Copy the value to the storage.
shintamainjp 0:521ba375aa0f 83 */
shintamainjp 0:521ba375aa0f 84 strcpy(value, p->value);
shintamainjp 0:521ba375aa0f 85 return true;
shintamainjp 0:521ba375aa0f 86 }
shintamainjp 0:521ba375aa0f 87
shintamainjp 0:521ba375aa0f 88 /**
shintamainjp 0:521ba375aa0f 89 * Set a set of a key and value.
shintamainjp 0:521ba375aa0f 90 *
shintamainjp 0:521ba375aa0f 91 * @param key A key.
shintamainjp 0:521ba375aa0f 92 * @param value A value.
shintamainjp 0:521ba375aa0f 93 *
shintamainjp 0:521ba375aa0f 94 * @return True if it succeed.
shintamainjp 0:521ba375aa0f 95 */
shintamainjp 0:521ba375aa0f 96 bool ConfigFile::setValue(char *key, char *value) {
shintamainjp 0:521ba375aa0f 97 /*
shintamainjp 0:521ba375aa0f 98 * Null check.
shintamainjp 0:521ba375aa0f 99 */
shintamainjp 0:521ba375aa0f 100 if ((key == NULL) || (value == NULL)) {
shintamainjp 0:521ba375aa0f 101 return false;
shintamainjp 0:521ba375aa0f 102 }
shintamainjp 0:521ba375aa0f 103
shintamainjp 0:521ba375aa0f 104 /*
shintamainjp 0:521ba375aa0f 105 * Size check.
shintamainjp 0:521ba375aa0f 106 */
shintamainjp 0:521ba375aa0f 107 if ((MAXLEN_KEY < strlen(key)) || (MAXLEN_VALUE < strlen(value))) {
shintamainjp 0:521ba375aa0f 108 return false;
shintamainjp 0:521ba375aa0f 109 }
shintamainjp 0:521ba375aa0f 110
shintamainjp 0:521ba375aa0f 111 /*
shintamainjp 0:521ba375aa0f 112 * Search a config_t object from the key.
shintamainjp 0:521ba375aa0f 113 */
shintamainjp 0:521ba375aa0f 114 config_t *p = search(key);
shintamainjp 0:521ba375aa0f 115 if (p == NULL) {
shintamainjp 0:521ba375aa0f 116 /*
shintamainjp 0:521ba375aa0f 117 * Allocation a memory for a new key.
shintamainjp 0:521ba375aa0f 118 */
shintamainjp 0:521ba375aa0f 119 char *k = (char *)malloc(sizeof(char) * (strlen(key) + 1));
shintamainjp 0:521ba375aa0f 120 if (k == NULL) {
shintamainjp 0:521ba375aa0f 121 return false;
shintamainjp 0:521ba375aa0f 122 }
shintamainjp 0:521ba375aa0f 123 strcpy(k, key);
shintamainjp 0:521ba375aa0f 124
shintamainjp 0:521ba375aa0f 125 /*
shintamainjp 0:521ba375aa0f 126 * Allocation a memory for a new value.
shintamainjp 0:521ba375aa0f 127 */
shintamainjp 0:521ba375aa0f 128 char *v = (char *)malloc(sizeof(char) * (strlen(value) + 1));
shintamainjp 0:521ba375aa0f 129 if (v == NULL) {
shintamainjp 0:521ba375aa0f 130 free(k);
shintamainjp 0:521ba375aa0f 131 return false;
shintamainjp 0:521ba375aa0f 132 }
shintamainjp 0:521ba375aa0f 133 strcpy(v, value);
shintamainjp 0:521ba375aa0f 134
shintamainjp 0:521ba375aa0f 135 /*
shintamainjp 0:521ba375aa0f 136 * Allocation a memory for a new configuration.
shintamainjp 0:521ba375aa0f 137 */
shintamainjp 0:521ba375aa0f 138 config_t *cfg = (config_t *)malloc(sizeof(config_t) * 1);
shintamainjp 0:521ba375aa0f 139 if (cfg == NULL) {
shintamainjp 0:521ba375aa0f 140 free(k);
shintamainjp 0:521ba375aa0f 141 free(v);
shintamainjp 0:521ba375aa0f 142 return false;
shintamainjp 0:521ba375aa0f 143 }
shintamainjp 0:521ba375aa0f 144 cfg->key = k;
shintamainjp 0:521ba375aa0f 145 cfg->value = v;
shintamainjp 0:521ba375aa0f 146
shintamainjp 0:521ba375aa0f 147 /*
shintamainjp 0:521ba375aa0f 148 * Add the new configuration.
shintamainjp 0:521ba375aa0f 149 */
shintamainjp 0:521ba375aa0f 150 if (!add(cfg)) {
shintamainjp 0:521ba375aa0f 151 free(k);
shintamainjp 0:521ba375aa0f 152 free(v);
shintamainjp 0:521ba375aa0f 153 free(cfg);
shintamainjp 0:521ba375aa0f 154 return false;
shintamainjp 0:521ba375aa0f 155 }
shintamainjp 0:521ba375aa0f 156
shintamainjp 0:521ba375aa0f 157 return true;
shintamainjp 0:521ba375aa0f 158 } else {
shintamainjp 0:521ba375aa0f 159 /*
shintamainjp 0:521ba375aa0f 160 * The value is same.
shintamainjp 0:521ba375aa0f 161 */
shintamainjp 0:521ba375aa0f 162 if (strcmp(value, p->value) == 0) {
shintamainjp 0:521ba375aa0f 163 return true;
shintamainjp 0:521ba375aa0f 164 }
shintamainjp 0:521ba375aa0f 165
shintamainjp 0:521ba375aa0f 166 /*
shintamainjp 0:521ba375aa0f 167 * Free a memory for the value.
shintamainjp 0:521ba375aa0f 168 */
shintamainjp 0:521ba375aa0f 169 free(p->value);
shintamainjp 0:521ba375aa0f 170 p->value = NULL;
shintamainjp 0:521ba375aa0f 171
shintamainjp 0:521ba375aa0f 172 /*
shintamainjp 0:521ba375aa0f 173 * Allocation memory for the new value.
shintamainjp 0:521ba375aa0f 174 */
shintamainjp 0:521ba375aa0f 175 char *v = (char *)malloc(sizeof(char) * (strlen(value) + 1));
shintamainjp 0:521ba375aa0f 176 if (v == NULL) {
shintamainjp 0:521ba375aa0f 177 return false;
shintamainjp 0:521ba375aa0f 178 }
shintamainjp 0:521ba375aa0f 179
shintamainjp 0:521ba375aa0f 180 /*
shintamainjp 0:521ba375aa0f 181 * Store it.
shintamainjp 0:521ba375aa0f 182 */
shintamainjp 0:521ba375aa0f 183 strcpy(v, value);
shintamainjp 0:521ba375aa0f 184 p->value = v;
shintamainjp 0:521ba375aa0f 185
shintamainjp 0:521ba375aa0f 186 return true;
shintamainjp 0:521ba375aa0f 187 }
shintamainjp 0:521ba375aa0f 188 }
shintamainjp 0:521ba375aa0f 189
shintamainjp 0:521ba375aa0f 190 /**
shintamainjp 0:521ba375aa0f 191 * Remove a config.
shintamainjp 0:521ba375aa0f 192 *
shintamainjp 0:521ba375aa0f 193 * @param key A key.
shintamainjp 0:521ba375aa0f 194 *
shintamainjp 0:521ba375aa0f 195 * @return True if it succeed.
shintamainjp 0:521ba375aa0f 196 */
shintamainjp 0:521ba375aa0f 197 bool ConfigFile::remove(char *key) {
shintamainjp 0:521ba375aa0f 198 if (key == NULL) {
shintamainjp 0:521ba375aa0f 199 return false;
shintamainjp 0:521ba375aa0f 200 }
shintamainjp 0:521ba375aa0f 201 for (int i = 0; i < MAXCONFIG; i++) {
shintamainjp 0:521ba375aa0f 202 config_t *cfg = configlist[i];
shintamainjp 0:521ba375aa0f 203 if (cfg != NULL) {
shintamainjp 0:521ba375aa0f 204 if (strcmp(cfg->key, key) == 0) {
shintamainjp 0:521ba375aa0f 205 free(cfg->key);
shintamainjp 0:521ba375aa0f 206 free(cfg->value);
shintamainjp 0:521ba375aa0f 207 free(cfg);
shintamainjp 0:521ba375aa0f 208 configlist[i] = NULL;
shintamainjp 0:521ba375aa0f 209 return true;
shintamainjp 0:521ba375aa0f 210 }
shintamainjp 0:521ba375aa0f 211 }
shintamainjp 0:521ba375aa0f 212 }
shintamainjp 0:521ba375aa0f 213 return false;
shintamainjp 0:521ba375aa0f 214 }
shintamainjp 0:521ba375aa0f 215
shintamainjp 0:521ba375aa0f 216 /**
shintamainjp 0:521ba375aa0f 217 * Remove all config.
shintamainjp 0:521ba375aa0f 218 *
shintamainjp 0:521ba375aa0f 219 * @return True if it succeed.
shintamainjp 0:521ba375aa0f 220 */
shintamainjp 0:521ba375aa0f 221 bool ConfigFile::removeAll(void) {
shintamainjp 0:521ba375aa0f 222 for (int i = 0; i < MAXCONFIG; i++) {
shintamainjp 0:521ba375aa0f 223 config_t *p = configlist[i];
shintamainjp 0:521ba375aa0f 224 if (p != NULL) {
shintamainjp 0:521ba375aa0f 225 free(p->key);
shintamainjp 0:521ba375aa0f 226 free(p->value);
shintamainjp 0:521ba375aa0f 227 }
shintamainjp 0:521ba375aa0f 228 free(p);
shintamainjp 0:521ba375aa0f 229 configlist[i] = NULL;
shintamainjp 0:521ba375aa0f 230 }
shintamainjp 0:521ba375aa0f 231 return true;
shintamainjp 0:521ba375aa0f 232 }
shintamainjp 0:521ba375aa0f 233
shintamainjp 0:521ba375aa0f 234 /**
shintamainjp 0:521ba375aa0f 235 * Get a number of configuration sets.
shintamainjp 0:521ba375aa0f 236 *
shintamainjp 0:521ba375aa0f 237 * @return number of configuration sets.
shintamainjp 0:521ba375aa0f 238 */
shintamainjp 0:521ba375aa0f 239 int ConfigFile::getCount() {
shintamainjp 0:521ba375aa0f 240 int cnt = 0;
shintamainjp 0:521ba375aa0f 241 for (int i = 0; i < MAXCONFIG; i++) {
shintamainjp 0:521ba375aa0f 242 config_t *p = configlist[i];
shintamainjp 0:521ba375aa0f 243 if (p != NULL) {
shintamainjp 0:521ba375aa0f 244 cnt++;
shintamainjp 0:521ba375aa0f 245 }
shintamainjp 0:521ba375aa0f 246 }
shintamainjp 0:521ba375aa0f 247 return cnt;
shintamainjp 0:521ba375aa0f 248 }
shintamainjp 0:521ba375aa0f 249
shintamainjp 0:521ba375aa0f 250 /**
shintamainjp 0:521ba375aa0f 251 * Get a key and a value.
shintamainjp 0:521ba375aa0f 252 *
shintamainjp 0:521ba375aa0f 253 * @param index Index number of this list.
shintamainjp 0:521ba375aa0f 254 * @param key A pointer to a buffer for key.
shintamainjp 0:521ba375aa0f 255 * @param keybufsiz A size of the key buffer.
shintamainjp 0:521ba375aa0f 256 * @param value A pointer to a buffer for value.
shintamainjp 0:521ba375aa0f 257 * @param valuebufsiz A size of the value buffer.
shintamainjp 0:521ba375aa0f 258 *
shintamainjp 0:521ba375aa0f 259 * @return true if it succeed.
shintamainjp 0:521ba375aa0f 260 */
shintamainjp 0:521ba375aa0f 261 bool ConfigFile::getKeyAndValue(int index, char *key, size_t keybufsiz, char *value, size_t valuebufsiz) {
shintamainjp 0:521ba375aa0f 262 int cnt = 0;
shintamainjp 0:521ba375aa0f 263 for (int i = 0; i < MAXCONFIG; i++) {
shintamainjp 0:521ba375aa0f 264 config_t *p = configlist[i];
shintamainjp 0:521ba375aa0f 265 if (p != NULL) {
shintamainjp 0:521ba375aa0f 266 if (cnt == index) {
shintamainjp 0:521ba375aa0f 267 if ((strlen(p->key) < keybufsiz) && (strlen(p->value) < valuebufsiz)) {
shintamainjp 0:521ba375aa0f 268 strcpy(key, p->key);
shintamainjp 0:521ba375aa0f 269 strcpy(value, p->value);
shintamainjp 0:521ba375aa0f 270 return true;
shintamainjp 0:521ba375aa0f 271 }
shintamainjp 0:521ba375aa0f 272 return false;
shintamainjp 0:521ba375aa0f 273 }
shintamainjp 0:521ba375aa0f 274 cnt++;
shintamainjp 0:521ba375aa0f 275 }
shintamainjp 0:521ba375aa0f 276 }
shintamainjp 0:521ba375aa0f 277 return false;
shintamainjp 0:521ba375aa0f 278 }
shintamainjp 0:521ba375aa0f 279
shintamainjp 0:521ba375aa0f 280 /**
shintamainjp 0:521ba375aa0f 281 * Read from the target file.
shintamainjp 0:521ba375aa0f 282 *
shintamainjp 0:521ba375aa0f 283 * @param file A target file name.
shintamainjp 0:521ba375aa0f 284 */
shintamainjp 0:521ba375aa0f 285 bool ConfigFile::read(char *file) {
shintamainjp 0:521ba375aa0f 286 /*
shintamainjp 0:521ba375aa0f 287 * Open the target file.
shintamainjp 0:521ba375aa0f 288 */
shintamainjp 0:521ba375aa0f 289 FILE *fp = fopen(file, "r");
shintamainjp 0:521ba375aa0f 290 if (fp == NULL) {
shintamainjp 0:521ba375aa0f 291 return false;
shintamainjp 0:521ba375aa0f 292 }
shintamainjp 0:521ba375aa0f 293
shintamainjp 0:521ba375aa0f 294 /*
shintamainjp 0:521ba375aa0f 295 * Remove all configuration.
shintamainjp 0:521ba375aa0f 296 */
shintamainjp 0:521ba375aa0f 297 removeAll();
shintamainjp 0:521ba375aa0f 298
shintamainjp 0:521ba375aa0f 299 /*
shintamainjp 0:521ba375aa0f 300 * Read from a file.
shintamainjp 0:521ba375aa0f 301 */
shintamainjp 0:521ba375aa0f 302 char buf[MAXLEN_KEY + 8 + MAXLEN_VALUE];
shintamainjp 0:521ba375aa0f 303 while (fgets(buf, sizeof(buf), fp) != NULL) {
shintamainjp 0:521ba375aa0f 304 /*
shintamainjp 0:521ba375aa0f 305 * Ignore a comment.
shintamainjp 0:521ba375aa0f 306 */
shintamainjp 0:521ba375aa0f 307 if (buf[0] == '#') {
shintamainjp 0:521ba375aa0f 308 continue;
shintamainjp 0:521ba375aa0f 309 }
shintamainjp 0:521ba375aa0f 310
shintamainjp 0:521ba375aa0f 311 /*
shintamainjp 0:521ba375aa0f 312 * Trim a return.
shintamainjp 0:521ba375aa0f 313 */
shintamainjp 0:521ba375aa0f 314 const size_t len = strlen(buf);
shintamainjp 0:521ba375aa0f 315 for (int i = 0; i < len; i++) {
shintamainjp 0:521ba375aa0f 316 if ((buf[i] == '\r') || (buf[i] == '\n')) {
shintamainjp 0:521ba375aa0f 317 buf[i] = '\0';
shintamainjp 0:521ba375aa0f 318 }
shintamainjp 0:521ba375aa0f 319 }
shintamainjp 0:521ba375aa0f 320
shintamainjp 0:521ba375aa0f 321 /*
shintamainjp 0:521ba375aa0f 322 * Separate key and value.
shintamainjp 0:521ba375aa0f 323 */
shintamainjp 0:521ba375aa0f 324 char k[MAXLEN_KEY];
shintamainjp 0:521ba375aa0f 325 char v[MAXLEN_VALUE];
shintamainjp 0:521ba375aa0f 326 char *sp = strchr(buf, SEPARATOR);
shintamainjp 0:521ba375aa0f 327 if (sp != NULL) {
shintamainjp 0:521ba375aa0f 328 strcpy(v, sp + 1);
shintamainjp 0:521ba375aa0f 329 *sp = '\0';
shintamainjp 0:521ba375aa0f 330 strcpy(k, buf);
shintamainjp 0:521ba375aa0f 331 setValue(k, v);
shintamainjp 0:521ba375aa0f 332 }
shintamainjp 0:521ba375aa0f 333 }
shintamainjp 0:521ba375aa0f 334 fclose(fp);
shintamainjp 0:521ba375aa0f 335 return true;
shintamainjp 0:521ba375aa0f 336 }
shintamainjp 0:521ba375aa0f 337
shintamainjp 0:521ba375aa0f 338 /**
shintamainjp 0:521ba375aa0f 339 * Write from the target file.
shintamainjp 0:521ba375aa0f 340 *
shintamainjp 0:521ba375aa0f 341 * @param file A pointer to a file name.
shintamainjp 0:521ba375aa0f 342 * @param header A pointer to a header.
shintamainjp 0:521ba375aa0f 343 * @param ff File format.
shintamainjp 0:521ba375aa0f 344 */
shintamainjp 0:521ba375aa0f 345 bool ConfigFile::write(char *file, char *header, FileFormat ff) {
shintamainjp 0:521ba375aa0f 346 /*
shintamainjp 0:521ba375aa0f 347 * Open the target file.
shintamainjp 0:521ba375aa0f 348 */
shintamainjp 0:521ba375aa0f 349 FILE *fp = fopen(file, "w");
shintamainjp 0:521ba375aa0f 350 if (fp == NULL) {
shintamainjp 0:521ba375aa0f 351 return false;
shintamainjp 0:521ba375aa0f 352 }
shintamainjp 0:521ba375aa0f 353
shintamainjp 0:521ba375aa0f 354 /*
shintamainjp 0:521ba375aa0f 355 * Set a type of new line.
shintamainjp 0:521ba375aa0f 356 */
shintamainjp 0:521ba375aa0f 357 char *newline = NEWLINE_UNIX;
shintamainjp 0:521ba375aa0f 358 switch (ff) {
shintamainjp 0:521ba375aa0f 359 case UNIX:
shintamainjp 0:521ba375aa0f 360 newline = NEWLINE_UNIX;
shintamainjp 0:521ba375aa0f 361 break;
shintamainjp 0:521ba375aa0f 362 case MAC:
shintamainjp 0:521ba375aa0f 363 newline = NEWLINE_MAC;
shintamainjp 0:521ba375aa0f 364 break;
shintamainjp 0:521ba375aa0f 365 case DOS:
shintamainjp 0:521ba375aa0f 366 newline = NEWLINE_DOS;
shintamainjp 0:521ba375aa0f 367 break;
shintamainjp 0:521ba375aa0f 368 default:
shintamainjp 0:521ba375aa0f 369 newline = NEWLINE_UNIX;
shintamainjp 0:521ba375aa0f 370 break;
shintamainjp 0:521ba375aa0f 371 }
shintamainjp 0:521ba375aa0f 372
shintamainjp 0:521ba375aa0f 373 /*
shintamainjp 0:521ba375aa0f 374 * Write the header.
shintamainjp 0:521ba375aa0f 375 */
shintamainjp 0:521ba375aa0f 376 if (header != NULL) {
shintamainjp 0:521ba375aa0f 377 fprintf(fp, "%s%s", header, newline);
shintamainjp 0:521ba375aa0f 378 }
shintamainjp 0:521ba375aa0f 379
shintamainjp 0:521ba375aa0f 380 /*
shintamainjp 0:521ba375aa0f 381 * Write the data.
shintamainjp 0:521ba375aa0f 382 */
shintamainjp 0:521ba375aa0f 383 for (int i = 0; i < MAXCONFIG; i++) {
shintamainjp 0:521ba375aa0f 384 config_t *cfg = configlist[i];
shintamainjp 0:521ba375aa0f 385 if (cfg != NULL) {
shintamainjp 0:521ba375aa0f 386 fprintf(fp, "%s=%s%s", cfg->key, cfg->value, newline);
shintamainjp 0:521ba375aa0f 387 }
shintamainjp 0:521ba375aa0f 388 }
shintamainjp 0:521ba375aa0f 389 fclose(fp);
shintamainjp 0:521ba375aa0f 390 return true;
shintamainjp 0:521ba375aa0f 391 }
shintamainjp 0:521ba375aa0f 392
shintamainjp 0:521ba375aa0f 393 ConfigFile::config_t *ConfigFile::search(char *key) {
shintamainjp 0:521ba375aa0f 394 if (key == NULL) {
shintamainjp 0:521ba375aa0f 395 return NULL;
shintamainjp 0:521ba375aa0f 396 }
shintamainjp 0:521ba375aa0f 397 for (int i = 0; i < MAXCONFIG; i++) {
shintamainjp 0:521ba375aa0f 398 if (configlist[i] != NULL) {
shintamainjp 0:521ba375aa0f 399 if (strcmp(configlist[i]->key, key) == 0) {
shintamainjp 0:521ba375aa0f 400 return configlist[i];
shintamainjp 0:521ba375aa0f 401 }
shintamainjp 0:521ba375aa0f 402 }
shintamainjp 0:521ba375aa0f 403 }
shintamainjp 0:521ba375aa0f 404 return NULL;
shintamainjp 0:521ba375aa0f 405 }
shintamainjp 0:521ba375aa0f 406
shintamainjp 0:521ba375aa0f 407 bool ConfigFile::add(config_t *cfg) {
shintamainjp 0:521ba375aa0f 408 for (int i = 0; i < MAXCONFIG; i++) {
shintamainjp 0:521ba375aa0f 409 if (configlist[i] == NULL) {
shintamainjp 0:521ba375aa0f 410 configlist[i] = cfg;
shintamainjp 0:521ba375aa0f 411 return true;
shintamainjp 0:521ba375aa0f 412 }
shintamainjp 0:521ba375aa0f 413 }
shintamainjp 0:521ba375aa0f 414 return false;
shintamainjp 0:521ba375aa0f 415 }