You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.7 KiB
85 lines
1.7 KiB
package dash
|
|
|
|
// FormatFileMode converts file mode to Unix-style string representation (e.g., "drwxr-xr-x")
|
|
// Handles both Go's os.ModeDir format and standard Unix file type bits
|
|
func FormatFileMode(mode uint32) string {
|
|
var result []byte = make([]byte, 10)
|
|
|
|
// File type - handle Go's os.ModeDir first, then standard Unix file type bits
|
|
if mode&0x80000000 != 0 { // Go's os.ModeDir (0x80000000 = 2147483648)
|
|
result[0] = 'd'
|
|
} else {
|
|
switch mode & 0170000 { // S_IFMT mask
|
|
case 0040000: // S_IFDIR
|
|
result[0] = 'd'
|
|
case 0100000: // S_IFREG
|
|
result[0] = '-'
|
|
case 0120000: // S_IFLNK
|
|
result[0] = 'l'
|
|
case 0020000: // S_IFCHR
|
|
result[0] = 'c'
|
|
case 0060000: // S_IFBLK
|
|
result[0] = 'b'
|
|
case 0010000: // S_IFIFO
|
|
result[0] = 'p'
|
|
case 0140000: // S_IFSOCK
|
|
result[0] = 's'
|
|
default:
|
|
result[0] = '-' // S_IFREG is default
|
|
}
|
|
}
|
|
|
|
// Permission bits (always use the lower 12 bits regardless of file type format)
|
|
// Owner permissions
|
|
if mode&0400 != 0 { // S_IRUSR
|
|
result[1] = 'r'
|
|
} else {
|
|
result[1] = '-'
|
|
}
|
|
if mode&0200 != 0 { // S_IWUSR
|
|
result[2] = 'w'
|
|
} else {
|
|
result[2] = '-'
|
|
}
|
|
if mode&0100 != 0 { // S_IXUSR
|
|
result[3] = 'x'
|
|
} else {
|
|
result[3] = '-'
|
|
}
|
|
|
|
// Group permissions
|
|
if mode&0040 != 0 { // S_IRGRP
|
|
result[4] = 'r'
|
|
} else {
|
|
result[4] = '-'
|
|
}
|
|
if mode&0020 != 0 { // S_IWGRP
|
|
result[5] = 'w'
|
|
} else {
|
|
result[5] = '-'
|
|
}
|
|
if mode&0010 != 0 { // S_IXGRP
|
|
result[6] = 'x'
|
|
} else {
|
|
result[6] = '-'
|
|
}
|
|
|
|
// Other permissions
|
|
if mode&0004 != 0 { // S_IROTH
|
|
result[7] = 'r'
|
|
} else {
|
|
result[7] = '-'
|
|
}
|
|
if mode&0002 != 0 { // S_IWOTH
|
|
result[8] = 'w'
|
|
} else {
|
|
result[8] = '-'
|
|
}
|
|
if mode&0001 != 0 { // S_IXOTH
|
|
result[9] = 'x'
|
|
} else {
|
|
result[9] = '-'
|
|
}
|
|
|
|
return string(result)
|
|
}
|