Framework for exporting system header to user space (#59)
[lunaix-os.git] / lunaix-os / usr / ls.c
index 698d0256fd17f25a7f9d9034154982b79d14525f..3fdfc6eb772475633321d1543e2476cefe98a0d7 100644 (file)
@@ -13,22 +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 0;
+    return err;
 }
\ No newline at end of file