#include #include "tool.h" /* Compte le nombre de caractŠre carac dans un chaine. */ static int near wild_count (const char *str, char carac) { int nb = 0; while (*str != '\0'){ if (*str == carac) nb++; str++; } return nb; } /* Compare deux wildcards et d‚termine celui qui est le plus sp‚cifique Retourne 0 si wild1 est plus prŠs de fname, 1 si wild2 est plus prŠs. Retourne -1 si non d‚cidable. La technique de comparaison est bas‚ sur le compte de caractŠre qui match en comparant la longueur de fname et de wild1 et wild2. */ export int wild_closer ( const char *wild1, const char *wild2, const char *fname) { int ret = -1; int len = strlen(fname); int len1 = len - strlen(wild1); int len2 = len - strlen(wild2); if (len1 > len2){ ret = 1; }else if (len1 < len2){ ret = 0; }else{ int nb1 = wild_count (wild1,'*'); int nb2 = wild_count (wild2,'*'); if (nb1 > nb2){ ret = 1; }else if (nb1 < nb2){ ret = 0; }else{ nb1 = wild_count (wild1,'?'); nb2 = wild_count (wild2,'?'); if (nb1 > nb2){ ret = 1; }else if (nb1 < nb2){ ret = 0; } } } return ret; }