// 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;
}
}
// Traverse Directory
- while( (tmp = readdir(fd, buf)) )
+ while( (tmp = readdir(fd, buf)) > 0 )
{
// Error check
if(tmp < 0) {
// Human readable sizes
case 'h': gbViewHumanReadable = 1; continue;
default:
- fprintf(stderr, "%s: Unknown option '%c'\n", *str);
+ fprintf(stderr, "%s: Unknown option '%c'\n", argv[0], *str);
ShowUsage(argv[0]);
exit(EXIT_FAILURE);
}
// Apply Defaults
if(!gsDirectory) gsDirectory = ".";
-
- printf("gsDirectory = '%s'\n", gsDirectory);
}
/**
// Get Permissions
// - Owner
- acl.group = 0; acl.id = info.uid;
+ acl.object = info.uid;
_SysGetACL(fd, &acl);
if(acl.perms & 1) perms |= 0400; // R
if(acl.perms & 2) perms |= 0200; // W
if(acl.perms & 8) perms |= 0100; // X
// - Group
- acl.group = 1; acl.id = info.gid;
+ acl.object = info.gid | 0x80000000;
_SysGetACL(fd, &acl);
if(acl.perms & 1) perms |= 0040; // R
if(acl.perms & 2) perms |= 0020; // W
if(acl.perms & 8) perms |= 0010; // X
// - World
- acl.group = 1; acl.id = -1;
+ acl.object = 0xFFFFFFFF;
_SysGetACL(fd, &acl);
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
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("%4lli B ", size);
}
else if(size < 2048*1024) { // < 2 MiB
- printf("%8lli KiB ", size>>10);
+ printf("%4lli KiB ", size>>10);
}
else if(size < (uint64_t)2048*1024*1024) { // < 2 GiB
- printf("%8lli MiB ", size>>20);
+ printf("%4lli MiB ", size>>20);
}
else if(size < (uint64_t)2048*1024*1024*1024) { // < 2 TiB
- printf("%8lli GiB ", size>>30);
+ printf("%4lli GiB ", size>>30);
}
- else { // Greater than 2 TiB
- printf("%8i TiB ", size>>40);
+ else { // Greater than 2 TiB (if your files are larger than this, you are Doing It Wrong [TM])
+ printf("%4lli TiB ", size>>40);
}
} else {
- printf("%8i ", size);
+ printf("%8lli ", 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
}