Various Changes
[tpg/acess2.git] / Usermode / Applications / ls_src / main.c
index fc99a40..297f5f9 100644 (file)
@@ -60,7 +60,7 @@ int main(int argc, char *argv[])
        // Check that it is a directory
        finfo(fd, &info, 0);
        if( !(info.flags & FILEFLAG_DIRECTORY) ) {
-               fprintf(stderr, "'%s' is a directory\n", gsDirectory);
+               fprintf(stderr, "'%s' is not a directory\n", gsDirectory);
                close(fd);
                return EXIT_FAILURE;
        }
@@ -75,7 +75,7 @@ int main(int argc, char *argv[])
        }
 
        // Traverse Directory
-       while( (tmp = readdir(fd, buf)) )
+       while( (tmp = readdir(fd, buf)) > 0 )
        {
                // Error check
                if(tmp < 0) {
@@ -167,8 +167,6 @@ void ParseArguments(int argc, char *argv[])
        
        // Apply Defaults
        if(!gsDirectory)        gsDirectory = ".";
-       
-       printf("gsDirectory = '%s'\n", gsDirectory);
 }
 
 /**
@@ -262,6 +260,9 @@ void DisplayFile(char *Filename)
                if(acl.perms & 1)       perms |= 0004;  // R
                if(acl.perms & 2)       perms |= 0002;  // W
                if(acl.perms & 8)       perms |= 0001;  // X
+               
+               // Close file
+               close(fd);
        }
        free(path);     // We're finished with it
        
@@ -280,26 +281,33 @@ void DisplayFile(char *Filename)
                if(perms & 0002)        permStr[8] = 'w';
                if(perms & 0001)        permStr[9] = 'x';
                printf("%s %4i %4i ", permStr, owner, group);
-               if(gbViewHumanReadable) {
+               if(gbViewHumanReadable && type != FTYPE_DIR) {
                        if(size < 2048) {       // < 2 KiB
-                               printf("%8lli B   ", size);
+                               printf("%4i B   ", size);
                        }
                        else if(size < 2048*1024) {     // < 2 MiB
-                               printf("%8lli KiB ", size>>10);
+                               printf("%4i KiB ", size>>10);
                        }
                        else if(size < (uint64_t)2048*1024*1024) {      // < 2 GiB
-                               printf("%8lli MiB ", size>>20);
+                               printf("%4i MiB ", size>>20);
                        }
                        else if(size < (uint64_t)2048*1024*1024*1024) { // < 2 TiB
-                               printf("%8lli GiB ", size>>30);
+                               printf("%4i GiB ", size>>30);
                        }
                        else {  // Greater than 2 TiB
-                               printf("%8i TiB ", size>>40);
+                               printf("%4i TiB ", size>>40);
                        }
                } else {
                        printf("%8i ", size);
                }
        }
        
-       printf("%s\n", Filename);
+       switch(type)
+       {
+       case FTYPE_DIR:         printf("\x1B[32m");     break;  // Green
+       case FTYPE_SYMLINK:     printf("\x1B[34m");     break;  // Blue
+       case FTYPE_NORMAL:      break;
+       }
+       printf("%s%s\n", Filename, (type==FTYPE_DIR?"/":""));
+       printf("\x1B[00m");     // Reset
 }

UCC git Repository :: git.ucc.asn.au