X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/cbc8fdbfe473e23e19690204418e19999a9522d1..0fd474df7001837bde53da0e42e83081827c9641:/lunaix-os/usr/ls.c?ds=sidebyside diff --git a/lunaix-os/usr/ls.c b/lunaix-os/usr/ls.c index caea32d..3fdfc6e 100644 --- a/lunaix-os/usr/ls.c +++ b/lunaix-os/usr/ls.c @@ -13,27 +13,43 @@ main(int argc, const char* argv[]) DIR* dir = opendir(path); if (!dir) { - return errno; + goto done; } struct dirent* dent; + int i = 0, sz; + char bf[100]; while ((dent = readdir(dir))) { if (dent->d_type == DT_DIR) { - printf(" %s/\n", dent->d_name); + sz = snprintf(bf, 100, "%s/", dent->d_name); } else if (dent->d_type == DT_SYMLINK) { - printf(" %s@\n", dent->d_name); + sz = snprintf(bf, 100, "%s@", dent->d_name); } else { - printf(" %s\n", dent->d_name); + sz = snprintf(bf, 100, "%s", dent->d_name); } + + bf[sz] = 0; + printf("%-15s ", bf); + + i++; + if ((i % 4) == 0) { + printf("\n"); + } + } + + if ((i % 4) != 0) { + printf("\n"); } +done: int err = errno; if (err) { printf("failed: %d\n",err); } - closedir(dir); + if (dir) + closedir(dir); return err; } \ No newline at end of file