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)
							 | 
						|
								}
							 |