Match only the section name that have the same lenght.
authorasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 5 May 2010 15:33:22 +0000 (15:33 +0000)
committerasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 5 May 2010 15:33:22 +0000 (15:33 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3616 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/mware/ini_reader.c

index 5e7c28733722cdf7dba7903797ed416209bd75a1..d48f9ead9e10004e5198e1b21ffec2d131c0b279 100644 (file)
@@ -47,7 +47,7 @@
  * The file pointer is positioned at the start of the next line.
  * Returns EOF if no section was found, 0 otherwise.
  */
-static int findSection(KFile *fd, const char *section, char *line, size_t size)
+static int findSection(KFile *fd, const char *section, size_t section_len, char *line, size_t size)
 {
        while (kfile_gets(fd, line, size) != EOF)
        {
@@ -56,11 +56,17 @@ static int findSection(KFile *fd, const char *section, char *line, size_t size)
                /* accept only sections that begin at first char */
                if (*ptr++ != '[')
                        continue;
+
                /* find the end-of-section character */
                for (i = 0; i < size && *ptr != ']'; ++i, ++ptr)
                        ;
+
+               /* The found section could be long that our section key */
+               if (section_len != i)
+                       continue;
+
                /* did we find the correct section? */
-               if(strncmp(&line[1], section, i))
+               if(strncmp(&line[1], section, section_len))
                        continue;
                else
                        return 0;
@@ -135,10 +141,11 @@ static int findKey(KFile *fd, const char *key, char *line, size_t size)
 int ini_getString(KFile *fd, const char *section, const char *key, const char *default_value, char *buf, size_t size)
 {
        char line[CONFIG_INI_MAX_LINE_LEN];
+
        if (kfile_seek(fd, 0, KSM_SEEK_SET) == EOF)
            goto error;
 
-       if (findSection(fd, section, line, CONFIG_INI_MAX_LINE_LEN) == EOF)
+       if (findSection(fd, section, strlen(section), line, CONFIG_INI_MAX_LINE_LEN) == EOF)
                goto error;
 
        if (findKey(fd, key, line, CONFIG_INI_MAX_LINE_LEN) == EOF)