Salut tout le monde,
J'ai deja exploser mon problème il y a moins de 24h sur un autre forum mais personne n'a pu me venir en aide, j'espère que quelqu'un ici sera en mesure de m'aider :/

J'ai comme projet de refaire la fonction ls, je suis donc passer par un arbre binaire avec pointeur sur right si c'est un fichier et pointeur sur bottom si c'est un dossier (avec le premier element du dossier).
J'ai un peut améliorer mon arbre qui a maintenant un pointeur sur previous et sur racine. J'ai également une fonction de recherche très basic qui parcourt mon arbre.

Le problème c'est que les infos rentrer dans chaque maillon sont toute ok sauf une (qui est celle du nom) mais que sur certain maillon.

Ca fait maintenant un moment que je cherche pourquoi mais je commence a sécher, si quelqu'un veux bien jeter un coup d'oeil ca pourrais m'aider
Je suppose que vous n'avez pas tout compris alors je vous met quelque image et mon code


Sur cette image on voit que link et deep sont bien rentrer correctement dans l'arbre mais que le name ne correspond pas a chaque fois.
Exemple : Manger, Montre, Poulet sont ok mais curry poivre et sel ne corresponde pas.
Nom : 14990132547449_Screen Shot 2017-07-02 at 18.33.40.png
Affichages : 193
Taille : 259,0 Ko

Mon .h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#ifndef FT_LS_H
# define FT_LS_H
 
# include "../libft/include/libft.h"
# include "../libft/include/ft_printf.h"
# include <dirent.h>
# include <sys/stat.h>
 
typedef struct          s_ls
{
    char                *link;
    char                *name;
    int                 dir;
    int                 deep;
    struct s_ls         *racine;
    struct s_ls         *right;
    struct s_ls         *bottom;
    struct s_ls         *previous;
}                       t_ls;
 
typedef struct          s_browdir
{
    t_ls                *address;
    struct s_browdir    *next;
}                       t_browdir;
 
typedef struct          s_ls_setting
{
    char                *link;
    int                 dir;
    t_ls                *racine;
}                       t_ls_setting;
 
int                     is_dir(char *link);
 
//binary_tree
t_ls                    *beginlist(t_ls *list, t_ls_setting *sett);
void                    fillist(char *link, t_ls *list, t_ls_setting *sett);
 
//sort_tree.c
t_ls                    *sort_alpha(t_ls *list);
 
//browse_list.c
int                     foldirect(t_ls *list, t_browdir *browser);
int                     playtree(t_browdir *browser);
 
//tmp
int                     playlist_r(t_ls *list);
 
#endif
Ma fonction qui s'occupe de rentrer les donner dans l'arbre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include "../include/ft_ls.h"
 
static t_ls         *new_elem(t_ls_setting *sett)
{
    t_ls            *elem;
 
    if ((elem = malloc(sizeof(t_ls))) == NULL)
        exit(ft_printf("~31Error : Malloc Allocation\n"));
    elem->link = sett->link;
    elem->name = NULL;
    elem->dir = sett->dir;
    elem->deep = 0;
    elem->racine = NULL;
    elem->right = NULL;
    elem->bottom = NULL;
    elem->previous = NULL;
    return (elem);
}
 
t_ls                *beginlist(t_ls *list, t_ls_setting *sett)
{
    t_ls            *elem;
 
    elem = new_elem(sett);
    elem->dir = 1;
    list = elem;
    return (list);
}
 
void                fillist(char *link, t_ls *list, t_ls_setting *sett)
{
    DIR             *directory;
    struct dirent   *read;
    int             i;
    t_ls            *tmp;
    static int      deep = 0;
 
    deep++;
    i = 0;
    read = NULL;
    directory = opendir(sett->link);
    if (directory == NULL)
        ft_printf("~31Error : Open Directory\n");
    while ((read = readdir(directory)) != NULL)
    {
        while (i < 2)
        {
            read = readdir(directory);
            i++;
        }
        if (read == NULL)
            break;
        sett->link = ft_strjoin(ft_strjoin(link, "/"), read->d_name);
        if (!is_dir(sett->link))
            sett->dir = 0;
        else
            sett->dir = 1;
        tmp = new_elem(sett);
        tmp->name = read->d_name;
        tmp->deep = deep;
        if (deep > list->deep)
            tmp->racine = list;
        else
            tmp->racine = list->racine;
        if (list->racine != tmp->racine)
            list->bottom = tmp;
        else
            list->right = tmp;
        tmp->previous = list;
        list = tmp;
        if (sett->dir)
            fillist(sett->link, list, sett);
    }
    sett->link = ft_strjoin(ft_strjoin(link, "/"), "NULL");
    tmp = new_elem(sett);
    tmp->name = "NULL";
    tmp->deep = deep;
    tmp->dir = 0;
    tmp->previous = list;
    if (deep > list->deep)
        tmp->racine = list;
    else
        tmp->racine = list->racine;
    if (list->racine != tmp->racine)
        list->bottom = tmp;
    else
        list->right = tmp;
    list = tmp;
    deep--;
    closedir(directory);
}
Ma fonction de parcours :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int             playlist_r(t_ls *list)
{
    while (!ft_strcmp(list->name, "NULL") && list->deep != 1)
    {
        list = list->racine;
        list = list->right;
    }
    if (!ft_strcmp(list->name, "NULL") && list->deep == 1)
        return(0);
    if (list->dir)
    {
        ft_printf("~33%s : %i : ~31%s\n", list->link, list->deep, list->name);
        list = list->bottom;
    }
    else
    {
        ft_printf("%s : %i : ~31%s\n", list->link, list->deep, list->name);
        list = list->right;
    }
    playlist_r(list);
    return (0);
}
PS : Ne me juger pas sur la propreté de mon code, il faut que je le remette un peut en place :p
Et désolé pour les fautes d'orthographe :/