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 | } |