View difference between Paste ID: BEDXsqFj and 2VayrKyW
SHOW: | | - or go back to the newest paste.
1
void ls_directory(char *dir_name, int level)
2
{
3
    DIR *p_dir = NULL; // pointer to a directory
4
    struct dirent *p_entry; // pointer to a directory entry
5
    if(!(p_dir = opendir(dir_name)))
6
    {
7
        fprintf(stderr, "Error while opening directory %s: %s\n", dir_name, strerror(errno));
8
        return;
9
    }
10
    
11
    size_t dir_name_len = strlen(dir_name);
12
    printf("%s\n", dir_name);
13
    while((p_entry = readdir(p_dir)))
14
    {
15
        if(is_dir(p_entry->d_name))
16
        {
17
            // do not list the parent directories
18
            if(strcmp(p_entry->d_name, ".") != 0 && strcmp(p_entry->d_name, "..") != 0)
19
            {
20
                size_t name_len = strlen(p_entry->d_name);
21-
                
21+
22
                memcpy(subname, dir_name, dir_name_len);
23
                subname[dir_name_len] = '/';
24
                memcpy(subname + dir_name_len + 1, p_entry->d_name, name_len+1);
25
                ls_directory(subname, level + 1);
26
                free(subname);
27
            }
28
        }
29
        else
30
        {
31
            printf("%s\n", p_entry->d_name);
32
        }
33
    }
34
    closedir(p_dir);
35
}