diff --git a/iniparser.pc b/iniparser.pc new file mode 100644 index 0000000..1a0cd0d --- /dev/null +++ b/iniparser.pc @@ -0,0 +1,12 @@ +prefix=/usr +exec_prefix=/usr +libdir=${exec_prefix}/lib +includedir=${prefix}/include +datarootdir=${prefix}/share +datadir=${datarootdir} + +Name: libiniparser +Description: Iniparser library +Version: 4.1 +Libs: -L${libdir} -liniparser +Cflags: -I${includedir} diff --git a/src/iniparser.c b/src/iniparser.c index fffdf9f..3316a50 100644 --- a/src/iniparser.c +++ b/src/iniparser.c @@ -727,6 +727,9 @@ dictionary * iniparser_load(const char * ininame) int errs=0; int mem_err=0; + int connect_pos=0; + int detect_len; + dictionary * dict ; if ((in=fopen(ininame, "r"))==NULL) { @@ -747,6 +750,10 @@ dictionary * iniparser_load(const char * ininame) last=0 ; while (fgets(line+last, ASCIILINESZ-last, in)!=NULL) { + char equal_flag=0; + char comment_flag=0; + char connect_flag=0; + lineno++ ; len = (int)strlen(line)-1; if (len<=0) @@ -764,8 +771,26 @@ dictionary * iniparser_load(const char * ininame) /* Get rid of \n and spaces at end of line */ while ((len>=0) && ((line[len]=='\n') || (isspace(line[len])))) { - line[len]=0 ; - len-- ; + line[len]=0; + len--; + } + /* detect string include these "=", "\", ";" or "#" */ + detect_len = len; + while (line[len]!='\\' && detect_len>=0){ + if (line[detect_len]==';' || line[detect_len]=='#'){ + comment_flag=1; + + } + if (comment_flag==1 && connect_flag ==0 && line[detect_len]=='\\'){ + connect_flag=1; + connect_pos=detect_len ; + } + if (connect_flag==1 && line[detect_len]=='='){ + equal_flag=1 ; + break; + + } + detect_len--; } if (len < 0) { /* Line was entirely \n and/or spaces */ len = 0; @@ -775,9 +800,14 @@ dictionary * iniparser_load(const char * ininame) /* Multi-line value */ last=len ; continue ; - } else { + } +else if (equal_flag & connect_flag & comment_flag){ + last = connect_pos ; + continue ; + }else { last=0 ; } + switch (iniparser_line(line, section, key, val)) { case LINE_EMPTY: case LINE_COMMENT: