⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iniparser.c

📁 一个使用anci c实现的ini处理程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*-------------------------------------------------------------------------*//**   @file    iniparser.c   @author  N. Devillard   @date    Mar 2000   @version $Revision: 2.14 $   @brief   Parser for ini files.*//*--------------------------------------------------------------------------*//*    $Id: iniparser.c,v 2.14 2002/12/12 10:49:01 ndevilla Exp $    $Author: ndevilla $    $Date: 2002/12/12 10:49:01 $    $Revision: 2.14 $*//*---------------------------------------------------------------------------                                Includes ---------------------------------------------------------------------------*/#include "iniparser.h"#include "strlib.h"#define ASCIILINESZ         1024#define INI_INVALID_KEY     ((char*)-1)/*---------------------------------------------------------------------------                        Private to this module ---------------------------------------------------------------------------*//* Private: add an entry to the dictionary */static void iniparser_add_entry(    dictionary * d,    char * sec,    char * key,    char * val){    char longkey[2*ASCIILINESZ+1];    /* Make a key as section:keyword */    if (key!=NULL) {        sprintf(longkey, "%s:%s", sec, key);    } else {        strcpy(longkey, sec);    }    /* Add (key,val) to dictionary */    dictionary_set(d, longkey, val);    return ;}/*-------------------------------------------------------------------------*//**  @brief    Get number of sections in a dictionary  @param    d   Dictionary to examine  @return   int Number of sections found in dictionary  This function returns the number of sections found in a dictionary.  The test to recognize sections is done on the string stored in the  dictionary: a section name is given as "section" whereas a key is  stored as "section:key", thus the test looks for entries that do not  contain a colon.  This clearly fails in the case a section name contains a colon, but  this should simply be avoided.  This function returns -1 in case of error. *//*--------------------------------------------------------------------------*/int iniparser_getnsec(dictionary * d){    int i ;    int nsec ;    if (d==NULL) return -1 ;    nsec=0 ;    for (i=0 ; i<d->size ; i++) {        if (d->key[i]==NULL)            continue ;        if (strchr(d->key[i], ':')==NULL) {            nsec ++ ;        }    }    return nsec ;}/*-------------------------------------------------------------------------*//**  @brief    Get name for section n in a dictionary.  @param    d   Dictionary to examine  @param    n   Section number (from 0 to nsec-1).  @return   Pointer to char string  This function locates the n-th section in a dictionary and returns  its name as a pointer to a string statically allocated inside the  dictionary. Do not free or modify the returned string!  This function returns NULL in case of error. *//*--------------------------------------------------------------------------*/char * iniparser_getsecname(dictionary * d, int n){    int i ;    int foundsec ;    if (d==NULL || n<0) return NULL ;    foundsec=0 ;    for (i=0 ; i<d->size ; i++) {        if (d->key[i]==NULL)            continue ;        if (strchr(d->key[i], ':')==NULL) {            foundsec++ ;            if (foundsec>n)                break ;        }    }    if (foundsec<=n) {        return NULL ;    }    return d->key[i] ;}/*-------------------------------------------------------------------------*//**  @brief    Dump a dictionary to an opened file pointer.  @param    d   Dictionary to dump.  @param    f   Opened file pointer to dump to.  @return   void  This function prints out the contents of a dictionary, one element by  line, onto the provided file pointer. It is OK to specify @c stderr  or @c stdout as output files. This function is meant for debugging  purposes mostly. *//*--------------------------------------------------------------------------*/void iniparser_dump(dictionary * d, FILE * f){    int     i ;    if (d==NULL || f==NULL) return ;    for (i=0 ; i<d->size ; i++) {        if (d->key[i]==NULL)            continue ;        if (d->val[i]!=NULL) {            fprintf(f, "[%s]=[%s]\n", d->key[i], d->val[i]);        } else {            fprintf(f, "[%s]=UNDEF\n", d->key[i]);        }    }    return ;}/*-------------------------------------------------------------------------*//**  @brief    Save a dictionary to a loadable ini file  @param    d   Dictionary to dump  @param    f   Opened file pointer to dump to  @return   void  This function dumps a given dictionary into a loadable ini file.  It is Ok to specify @c stderr or @c stdout as output files. *//*--------------------------------------------------------------------------*/void iniparser_dump_ini(dictionary * d, FILE * f){    int     i, j ;    char    keym[ASCIILINESZ+1];    int     nsec ;    char *  secname ;    int     seclen ;    if (d==NULL || f==NULL) return ;    nsec = iniparser_getnsec(d);    if (nsec<1) {        /* No section in file: dump all keys as they are */        for (i=0 ; i<d->size ; i++) {            if (d->key[i]==NULL)                continue ;            fprintf(f, "%s = %s\n", d->key[i], d->val[i]);        }        return ;    }    for (i=0 ; i<nsec ; i++) {        secname = iniparser_getsecname(d, i) ;        seclen  = (int)strlen(secname);        fprintf(f, "\n[%s]\n", secname);        sprintf(keym, "%s:", secname);        for (j=0 ; j<d->size ; j++) {            if (d->key[j]==NULL)                continue ;            if (!strncmp(d->key[j], keym, seclen+1)) {                fprintf(f,                        "%-30s = %s\n",                        d->key[j]+seclen+1,                        d->val[j] ? d->val[j] : "");            }        }    }    fprintf(f, "\n");    return ;}/*-------------------------------------------------------------------------*//**  @brief	Get the string associated to a key, return NULL if not found  @param    d   Dictionary to search  @param    key Key string to look for  @return   pointer to statically allocated character string, or NULL.  This function queries a dictionary for a key. A key as read from an  ini file is given as "section:key". If the key cannot be found,  NULL is returned.  The returned char pointer is pointing to a string allocated in  the dictionary, do not free or modify it.  This function is only provided for backwards compatibility with   previous versions of iniparser. It is recommended to use  iniparser_getstring() instead. *//*--------------------------------------------------------------------------*/char * iniparser_getstr(dictionary * d, char * key){    return iniparser_getstring(d, key, NULL);}/*-------------------------------------------------------------------------*//**  @brief    Get the string associated to a key  @param    d       Dictionary to search  @param    key     Key string to look for  @param    def     Default value to return if key not found.  @return   pointer to statically allocated character string  This function queries a dictionary for a key. A key as read from an  ini file is given as "section:key". If the key cannot be found,  the pointer passed as 'def' is returned.  The returned char pointer is pointing to a string allocated in  the dictionary, do not free or modify it. *//*--------------------------------------------------------------------------*/char * iniparser_getstring(dictionary * d, char * key, char * def){    char * lc_key ;    char * sval ;    if (d==NULL || key==NULL)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -