void parse_line(char * sec, char * lin, dictionary * d) { char key[ASCIILINESZ+1]; char val[ASCIILINESZ+1]; char * wher ; wher = strskp(lin); /* Skip leading spaces */ if (*wher==';' || *wher=='#' || *wher==0) return ; /* Comment lines */ else { if (sscanf(wher, "[%[^]]", sec)==1) { /* Valid section name */ iniparser_add_entry(d, sec, NULL, NULL); } else if (sscanf (wher, "%[^=] = \"%[^\"]\"", key, val) == 2 || sscanf (wher, "%[^=] = '%[^\']'", key, val) == 2 || sscanf (wher, "%[^=] = %[^;#]", key, val) == 2) { strcpy(key, strcrop(key)); /* * sscanf cannot handle "" or '' as empty value, * this is done here */ if (!strcmp(val, "\"\"") || !strcmp(val, "''")) { val[0] = (char)0; } else { strcpy(val, strcrop(val)); } iniparser_add_entry(d, sec, key, val); } } }
dictionary * iniparser_load(const char * ininame) { dictionary * d ; char lin[ASCIILINESZ+1]; char sec[ASCIILINESZ+1]; char key[ASCIILINESZ+1]; char val[ASCIILINESZ+1]; char * where ; FILE * ini ; int lineno ; if ((ini=fopen(ininame, "r"))==NULL) { return NULL ; } sec[0]=0; /* * Initialize a new dictionary entry */ if (!(d = dictionary_new(0))) { fclose(ini); return NULL; } lineno = 0 ; while (fgets(lin, ASCIILINESZ, ini)!=NULL) { lineno++ ; where = strskp(lin); /* Skip leading spaces */ if (*where==';' || *where=='#' || *where==0) continue ; /* Comment lines */ else { if (sscanf(where, "[%[^]]", sec)==1) { /* Valid section name */ strcpy(sec, strlwc(sec)); iniparser_add_entry(d, sec, NULL, NULL); } else if (sscanf (where, "%[^=] = \"%[^\"]\"", key, val) == 2 || sscanf (where, "%[^=] = '%[^\']'", key, val) == 2 || sscanf (where, "%[^=] = %[^;#]", key, val) == 2) { strcpy(key, strlwc(strcrop(key))); /* * sscanf cannot handle "" or '' as empty value, * this is done here */ if (!strcmp(val, "\"\"") || !strcmp(val, "''")) { val[0] = (char)0; } else { strcpy(val, strcrop(val)); } iniparser_add_entry(d, sec, key, val); } } } fclose(ini); return d ; }
static void setIniString (IniDictionary *dictionary, const char *section, const char *entry, const char *value) { char *sectionName; asprintf (§ionName, "%s:%s", section, entry); if (!iniparser_find_entry (dictionary, (char*) section)) iniparser_add_entry (dictionary, (char*) section, NULL, NULL); iniparser_setstr (dictionary, sectionName, (char*) value); free (sectionName); }
dictionary * paraparser_load(int argc, char *argv[], int booleanc, char *booleanv[]) { dictionary *d; int i, j; int booleanParameter; char trueValue[2]; char argumentNumber[3]; /* * Initialize a new dictionary entry */ d = dictionary_new(0, 1); // Case sensitive argumentNumber[0] = '0'; argumentNumber[1] = '\0'; argumentNumber[2] = '\0'; trueValue[0] = 'Y'; trueValue[1] = '\0'; for(i=0;i<argc;i++) { if (*argv[i] == '-') { if (*(argv[i]+1) != '\0') { // check if it is a boolean parameters booleanParameter = 0; for (j=0; j<booleanc; j++) { if (strcmp(argv[i], booleanv[j]) == 0) { booleanParameter = 1; break; } } if (booleanParameter == 1) { iniparser_add_entry(d, "parameter", argv[i], trueValue); } else { if (i+1 >= argc) { // invalid input! Do nothing! } else { iniparser_add_entry(d, "parameter", argv[i], argv[i+1]); i++; } } } } else { iniparser_add_entry(d, "argument", argumentNumber, argv[i]); if (argumentNumber[1] != '\0') { if (argumentNumber[1] == '9') { if (argumentNumber[0] == '9') { break; } else { argumentNumber[0]++; argumentNumber[1] = '0'; } } else { argumentNumber[1]++; } } else { if (argumentNumber[0] == '9') { argumentNumber[0] = '1'; argumentNumber[1] = '0'; } else { argumentNumber[0]++; } } } } return d ; }
/*--------------------------------------------------------------------------*/ dictionary* iniparser_new (char *ininame) { dictionary * d; char lin[ASCIILINESZ+1]; char sec[ASCIILINESZ+1]; char key[ASCIILINESZ+1]; char val[ASCIILINESZ+1]; char * where; FILE * ini; int lineno; FileLock * lock; lock = ini_file_lock (ininame, FALSE); if (!lock) ccsWarning ("unable to lock file %s, reads may conflict", ininame); ini = fopen (ininame, "r"); if (!ini) { if (lock) ini_file_unlock (lock ); return NULL; } sec[0] = 0; /* * Initialize a new dictionary entry */ d = dictionary_new (0); lineno = 0; while (fgets (lin, ASCIILINESZ, ini) != NULL) { ++lineno; where = strskp (lin); /* Skip leading spaces */ if (*where == ';' || *where == '#' || *where == 0) continue; /* Comment lines */ else { val[0] = '\0'; if (sscanf (where, "[%[^]]", sec) == 1) { /* Valid section name */ strcpy (sec, strlwc (sec)); iniparser_add_entry (d, sec, NULL, NULL); } else if (sscanf (where, "%[^=] = \"%[^\"]\"", key, val) == 2 || sscanf (where, "%[^=] = '%[^\']'", key, val) == 2 || sscanf (where, "%[^=] = %[^\n]", key, val) >= 1) { strcpy (key, strlwc (strcrop (key))); /* * sscanf cannot handle "" or '' as empty value, * this is done here */ if (!strcmp (val, "\"\"") || !strcmp (val, "''")) { val[0] = (char) 0; } else { strcpy (val, strcrop (val)); } iniparser_add_entry (d, sec, key, val); } } } fclose (ini); if (lock) ini_file_unlock (lock ); return d; }