diff --git a/src/nm32.c b/src/nm32.c index 83fb8f2..a5a9f9d 100644 --- a/src/nm32.c +++ b/src/nm32.c @@ -134,6 +134,7 @@ char *get_sym_char32(Elf32_Sym sym, Elf32_Shdr sec, int *tool) { } return ("n"); } + int nm32(t_mapped_file mapped_file, char *path, t_verbosity verbosity, t_ordering ordering) { t_root *tree = NULL; t_entry *entry = (t_entry *)malloc(sizeof(t_entry)); @@ -182,6 +183,8 @@ int nm32(t_mapped_file mapped_file, char *path, t_verbosity verbosity, t_orderin else { str = sec_str; } + if (str != sec_str) + free(sec_str); // ici la str (le symbole) est bon, on la charge dans le truc, ensuite on genere la vrai string a afficher, avant de sort entry->symbol = ft_strdup(str); free(str); @@ -194,7 +197,7 @@ int nm32(t_mapped_file mapped_file, char *path, t_verbosity verbosity, t_orderin // ici le sym char a ete calculer, a partir de la on determine la verbosity // ici on fait if entry->verbosity >= verbosity, si c'est pas bon on skip toute la suite entry->verbosity = DEFAULT_VERBOSITY; - if ((sym_char[0] == 'a' && sym.st_info == 4) || sym_char[0] == 'N' || tool == 1)// || entry->symbol[0] == '.') + if ((sym_char[0] == 'a' && sym.st_info == 4) || sym_char[0] == 'N' || tool == 1) entry->verbosity = ALL; if (sym_char[0] == 'u' || sym_char[0] == 'v' || sym_char[0] == 'w' || (sym_char[0] >= 'A' && sym_char[0] <= 'Z' && sym_char[0] != 'N')) entry->verbosity = GLOBAL; @@ -242,12 +245,18 @@ int nm32(t_mapped_file mapped_file, char *path, t_verbosity verbosity, t_orderin break; } fflush(stdout); + } else { + free(entry->symbol); + free(sym_char); } } } } + free(entry); + // ici on affiche tout ou no symbols en cas de list vide if (tree) { ft_putrbt(tree, &put_entry); + ft_delrbt(tree, &free_entry); } else { ft_printf("sss", "nm: ", path, ": no symbols\n"); }