diff options
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/yaml/node.c | 61 | 
1 files changed, 32 insertions, 29 deletions
| diff --git a/plugins/yaml/node.c b/plugins/yaml/node.c index 57eb3d2..3dc6ec0 100644 --- a/plugins/yaml/node.c +++ b/plugins/yaml/node.c @@ -284,65 +284,64 @@ void _g_yaml_node_find_by_path(GYamlNode *node, const char *path, GYamlNode ***n  {      GYamlLine *line;                        /* Ligne Yaml liée au noeud    */      const char *key;                        /* Clef associée au noeud      */ -    bool matched;                           /* Correspondance établie ?    */      char *next;                             /* Prochaine partie du chemin  */      size_t cmplen;                          /* Etendue de la comparaison   */      int ret;                                /* Bilan d'une comparaison     */      GYamlCollection *collec;                /* Collection de noeuds        */ +    if (path[0] == '\0') +        goto exit; + +    line = g_yaml_node_get_yaml_line(node); +      if (path[0] == '/') +    {          path++; -    /* Correspondance au niveau du noeud ? */ +        if (path[0] == '\0') +            goto matched; -    line = g_yaml_node_get_yaml_line(node); +    } + +    /* Correspondance au niveau du noeud ? */      if (line != NULL)      {          key = g_yaml_line_get_key(line); -        if (path[0] == '\0') -            matched = true; +        next = strchr(path, '/'); + +        if (next == NULL) +            ret = strcmp(path, key);          else          { -            next = strchr(path, '/'); - -            cmplen = (next == NULL ? strlen(path) : next - path); +            cmplen = next - path;              if (cmplen == 0)                  goto cont;              ret = strncmp(path, key, cmplen); -            if (ret != 0) -                goto done; - -            else -            { -                if (next == NULL) -                    matched = true; - -                else -                { -                    path += cmplen; -                    goto cont; -                } +        } -            } +        if (ret != 0) +            goto done; +        else if (next != NULL) +        { +            path += cmplen; +            goto cont;          } -        if (matched) -        { -            *nodes = realloc(*nodes, ++(*count) * sizeof(GYamlNode **)); + matched: -            g_object_ref(G_OBJECT(node)); -            (*nodes)[*count - 1] = node; +        *nodes = realloc(*nodes, ++(*count) * sizeof(GYamlNode **)); -            goto done; +        g_object_ref(G_OBJECT(node)); +        (*nodes)[*count - 1] = node; -        } +        goto done;      } @@ -363,6 +362,10 @@ void _g_yaml_node_find_by_path(GYamlNode *node, const char *path, GYamlNode ***n      if (line != NULL)          g_object_unref(G_OBJECT(line)); + exit: + +    ; +  } | 
