suppression d'un malheureux leaks + opti recursivite
This commit is contained in:
parent
43f1295324
commit
9641ed9dbb
5 changed files with 38 additions and 53 deletions
|
|
@ -6,7 +6,7 @@
|
|||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/04 16:31:18 by wescande #+# #+# */
|
||||
/* Updated: 2017/01/31 23:20:22 by wescande ### ########.fr */
|
||||
/* Updated: 2017/02/01 19:50:07 by wescande ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -69,8 +69,7 @@ void modify_esc_split(unsigned char *esc_dest,
|
|||
unsigned char *esc_src, int start, int len);
|
||||
void expand_brace(t_glob *tglob);
|
||||
int match_pattern(t_glob *tglob, char *str, char *full_word);
|
||||
int dir_research(t_glob *tglob, char *p, const char *pat);
|
||||
int dir_research_recursive(t_glob *tglob, char *p, const char *pat);
|
||||
int dir_research(t_glob *tglob, char *p, const char *pat, int rec);
|
||||
char **ft_strsplit_spe(const char *str,
|
||||
const unsigned char *esc, char c);
|
||||
unsigned char **ft_strsplit_esc(const char *str,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/11/14 17:28:14 by jhalford #+# #+# */
|
||||
/* Updated: 2017/01/31 20:19:48 by wescande ### ########.fr */
|
||||
/* Updated: 2017/02/01 19:29:27 by wescande ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/30 12:07:16 by wescande #+# #+# */
|
||||
/* Updated: 2017/01/31 18:00:16 by wescande ### ########.fr */
|
||||
/* Updated: 2017/02/01 19:49:44 by wescande ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -14,65 +14,51 @@
|
|||
|
||||
int is_directory(const char *path)
|
||||
{
|
||||
struct stat path_stat;
|
||||
struct stat path_stat;
|
||||
|
||||
stat(path, &path_stat);
|
||||
return (S_ISDIR(path_stat.st_mode));
|
||||
}
|
||||
|
||||
int dir_research(t_glob *gl, char *p, const char *pat)
|
||||
static int dir_list_content(t_glob *gl, char **str, const char *pat,
|
||||
int recursive)
|
||||
{
|
||||
DIR *dir;
|
||||
struct dirent *in;
|
||||
char *path_tmp;
|
||||
int ret;
|
||||
int ret;
|
||||
char *path_tmp;
|
||||
|
||||
ret = 0;
|
||||
if ((ft_strlen(p) <= 1 || p[ft_strlen(p) - 1] != '.')
|
||||
&& is_directory(p) && (dir = opendir(p)))
|
||||
while ((in = readdir(dir)))
|
||||
{
|
||||
if (ft_strcmp(in->d_name, ".") && ft_strcmp(in->d_name, ".."))
|
||||
{
|
||||
if (*p == '/' && !*(p + 1))
|
||||
path_tmp = ft_strjoin(p, in->d_name);
|
||||
else
|
||||
path_tmp = ft_strjoinf(ft_strjoin(p, "/"), in->d_name, 1);
|
||||
gl->pat = pat;
|
||||
if (match_pattern(gl, in->d_name, path_tmp) && ++ret)
|
||||
ft_ld_pushfront(&gl->match, ft_strdup(path_tmp + 2 *
|
||||
(path_tmp[0] == '.' && path_tmp[1] == '/')));
|
||||
ft_strdel(&path_tmp);
|
||||
}
|
||||
}
|
||||
if (ft_strcmp(str[1], ".") && ft_strcmp(str[1], ".."))
|
||||
{
|
||||
if (*str[0] == '/' && !*(str[0] + 1))
|
||||
path_tmp = ft_strjoin(str[0], str[1]);
|
||||
else
|
||||
path_tmp = ft_strjoinf(ft_strjoin(str[0], "/"), str[1], 1);
|
||||
if (recursive)
|
||||
dir_research(gl, path_tmp, pat, recursive);
|
||||
gl->pat = pat;
|
||||
if (match_pattern(gl, str[1], path_tmp) && ++ret)
|
||||
ft_ld_pushfront(&gl->match, ft_strdup(path_tmp + 2 *
|
||||
(path_tmp[0] == '.' && path_tmp[1] == '/')));
|
||||
ft_strdel(&path_tmp);
|
||||
}
|
||||
return (ret);
|
||||
}
|
||||
|
||||
int dir_research_recursive(t_glob *gl, char *p, const char *pat)
|
||||
int dir_research(t_glob *gl, char *p,
|
||||
const char *pat, int recursive)
|
||||
{
|
||||
DIR *dir;
|
||||
struct dirent *in;
|
||||
char *path_tmp;
|
||||
int ret;
|
||||
|
||||
ret = 0;
|
||||
if ((ft_strlen(p) <= 1 || p[ft_strlen(p) - 1] != '.')
|
||||
&& is_directory(p) && (dir = opendir(p)))
|
||||
if ((ft_strlen(p) <= 1 || p[ft_strlen(p) - 1] != '.') && is_directory(p))
|
||||
{
|
||||
dir = opendir(p);
|
||||
while ((in = readdir(dir)))
|
||||
{
|
||||
if (ft_strcmp(in->d_name, ".") && ft_strcmp(in->d_name, ".."))
|
||||
{
|
||||
if (*p == '/' && !*(p + 1))
|
||||
path_tmp = ft_strjoin(p, in->d_name);
|
||||
else
|
||||
path_tmp = ft_strjoinf(ft_strjoin(p, "/"), in->d_name, 1);
|
||||
dir_research_recursive(gl, path_tmp, pat);
|
||||
gl->pat = pat;
|
||||
if (match_pattern(gl, in->d_name, path_tmp) && ++ret)
|
||||
ft_ld_pushfront(&gl->match, ft_strdup(path_tmp + 2 *
|
||||
(path_tmp[0] == '.' && path_tmp[1] == '/')));
|
||||
ft_strdel(&path_tmp);
|
||||
}
|
||||
}
|
||||
ret += dir_list_content(gl,
|
||||
(char *[2]){p, in->d_name}, pat, recursive);
|
||||
closedir(dir);
|
||||
}
|
||||
return (ret);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/04 16:29:54 by wescande #+# #+# */
|
||||
/* Updated: 2017/01/31 23:15:27 by wescande ### ########.fr */
|
||||
/* Updated: 2017/02/01 19:46:22 by wescande ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -45,9 +45,9 @@ char **glob(const char *pat, const unsigned char *esc)
|
|||
gl.pat = ((char **)gl.m_pat->content)[0];
|
||||
gl.esc = ((unsigned char **)gl.m_pat->content)[1];
|
||||
if (gl.pat[0] != '/')
|
||||
ret = dir_research(&gl, ".", gl.pat);
|
||||
ret = dir_research(&gl, ".", gl.pat, 0);
|
||||
else
|
||||
ret = dir_research(&gl, "/", gl.pat + 1);
|
||||
ret = dir_research(&gl, "/", gl.pat + 1, 0);
|
||||
if (!ret)
|
||||
ft_ld_pushfront(&gl.match,
|
||||
ft_strdup(((char **)gl.m_pat->content)[0]));
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/24 17:30:23 by wescande #+# #+# */
|
||||
/* Updated: 2017/01/27 23:45:39 by wescande ### ########.fr */
|
||||
/* Updated: 2017/02/01 19:46:43 by wescande ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -72,7 +72,7 @@ static int match_star(t_glob *gl, char *str, char *full_word)
|
|||
|
||||
if (gl->pat[1] == '*' &&
|
||||
!is_char_esc(gl->esc, ((char **)gl->m_pat->content)[0], gl->pat + 1))
|
||||
dir_research_recursive(gl, full_word, gl->pat + 1);
|
||||
dir_research(gl, full_word, gl->pat + 1, 1);
|
||||
if (!*++gl->pat)
|
||||
return (1);
|
||||
fix = str + ft_strlen(str);
|
||||
|
|
@ -113,7 +113,7 @@ int match_pattern(t_glob *gl, char *str, char *full_word)
|
|||
else if (*gl->pat == '*')
|
||||
return (match_star(gl, str, full_word));
|
||||
else if (*gl->pat == '/' && !*str && is_directory(full_word))
|
||||
dir_research(gl, full_word, gl->pat + 1);
|
||||
dir_research(gl, full_word, gl->pat + 1, 0);
|
||||
else if (*gl->pat != *str)
|
||||
return (0);
|
||||
++str;
|
||||
|
|
|
|||
Loading…
Reference in a new issue