#define _DEFAULT_SOURCE
#define _BSD_SOURCE
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>
void
dir_recurse (DIR *parent, int level)
{
struct dirent *ent;
DIR *child;
int fd;
while ((ent = readdir(parent)) != NULL) {
if ((strcmp(ent
->d_name
, ".") == 0) || (strcmp(ent
->d_name
, "..") == 0)) { continue;
}
if (ent->d_type == DT_DIR) {
printf("%*s%s/\n", level
, "", ent
->d_name
); fd = openat(dirfd(parent), ent->d_name, O_RDONLY | O_DIRECTORY);
if (fd != -1) {
child = fdopendir(fd);
dir_recurse(child, level + 1);
closedir(child);
} else {
}
} else {
printf("%*s%s\n", level
, "", ent
->d_name
); }
}
}
int
main (int argc, char *argv)
{
DIR *root;
root = opendir("..");
dir_recurse(root, 0);
closedir(root);
return 0;
}
I2RlZmluZSBfREVGQVVMVF9TT1VSQ0UKI2RlZmluZSBfQlNEX1NPVVJDRQojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxzeXMvc3RhdC5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8ZGlyZW50Lmg+Cgp2b2lkCmRpcl9yZWN1cnNlIChESVIgKnBhcmVudCwgaW50IGxldmVsKQp7CiAgICBzdHJ1Y3QgZGlyZW50ICplbnQ7CiAgICBESVIgKmNoaWxkOwogICAgaW50IGZkOwoKICAgIHdoaWxlICgoZW50ID0gcmVhZGRpcihwYXJlbnQpKSAhPSBOVUxMKSB7CiAgICAgICAgaWYgKChzdHJjbXAoZW50LT5kX25hbWUsICIuIikgPT0gMCkgfHwKICAgICAgICAgICAgKHN0cmNtcChlbnQtPmRfbmFtZSwgIi4uIikgPT0gMCkpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChlbnQtPmRfdHlwZSA9PSBEVF9ESVIpIHsKICAgICAgICAgICAgcHJpbnRmKCIlKnMlcy9cbiIsIGxldmVsLCAiIiwgZW50LT5kX25hbWUpOwogICAgICAgICAgICBmZCA9IG9wZW5hdChkaXJmZChwYXJlbnQpLCBlbnQtPmRfbmFtZSwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7CiAgICAgICAgICAgIGlmIChmZCAhPSAtMSkgewogICAgICAgICAgICAgICAgY2hpbGQgPSBmZG9wZW5kaXIoZmQpOwogICAgICAgICAgICAgICAgZGlyX3JlY3Vyc2UoY2hpbGQsIGxldmVsICsgMSk7CiAgICAgICAgICAgICAgICBjbG9zZWRpcihjaGlsZCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwZXJyb3IoIm9wZW4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHByaW50ZigiJSpzJXNcbiIsIGxldmVsLCAiIiwgZW50LT5kX25hbWUpOwogICAgICAgIH0KICAgIH0KfQoKaW50Cm1haW4gKGludCBhcmdjLCBjaGFyICphcmd2KQp7CiAgICBESVIgKnJvb3Q7CgogICAgcm9vdCA9IG9wZW5kaXIoIi4uIik7CiAgICBkaXJfcmVjdXJzZShyb290LCAwKTsKICAgIGNsb3NlZGlyKHJvb3QpOwoKICAgIHJldHVybiAwOwp9