ref: 55e6ac75ac8bb1e1994073bcb3417edc34d4c940
dir: /tree.c/
#include <u.h> #include <libc.h> int level; void indent(void) { int i; for(i=0; i<level; ++i){ print(" "); } } void tree(char *path) { Dir *dir = dirstat(path); indent(); print("%s\n", dir->name); level++; free(dir); int fd = open(path, OREAD); long ndir = dirreadall(fd, &dir); int i; for(i=0; i<ndir; ++i){ if((dir+i)->qid.type){ int len = strlen(path) + strlen((dir+i)->name); char *name = malloc(sizeof(char) * len); sprint(name, "%s/%s", path, (dir+i)->name); tree(name); level--; /*free(name);*/ }else{ indent(); print("%s\n", (dir+i)->name); } } free(dir); } void main(int argc, char **argv) { if(argc == 1) argv[1] = "."; level = 0; tree(argv[1]); }