Example #1
0
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);
        }
    }
}
Example #2
0
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 (&sectionName, "%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);
}
Example #4
0
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 ;

}
Example #5
0
/*--------------------------------------------------------------------------*/
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;
}