github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/io/f_unix.go (about)

     1  //go:build !windows && !plan9
     2  // +build !windows,!plan9
     3  
     4  package io
     5  
     6  import (
     7  	"os"
     8  
     9  	"github.com/phayes/permbits"
    10  )
    11  
    12  func matchFlags(add, remove fFlagsT, info os.FileInfo) bool {
    13  	mode := info.Mode()
    14  	perm := permbits.FileMode(mode)
    15  
    16  	return ((add.File() && mode.IsRegular()) ||
    17  		(add.Dir() && mode.IsDir()) ||
    18  		(add.Symlink() && mode&os.ModeSymlink != 0) ||
    19  		(add.DevBlock() && mode&os.ModeDevice != 0) ||
    20  		(add.DevChar() && mode&os.ModeCharDevice != 0) ||
    21  		(add.Socket() && mode&os.ModeSocket != 0) ||
    22  		(add.NamedPipe() && mode&os.ModeNamedPipe != 0) ||
    23  
    24  		(add.UserRead() && perm.UserRead()) ||
    25  		(add.GroupRead() && perm.GroupRead()) ||
    26  		(add.OtherRead() && perm.OtherRead()) ||
    27  
    28  		(add.UserWrite() && perm.UserWrite()) ||
    29  		(add.GroupWrite() && perm.GroupWrite()) ||
    30  		(add.OtherWrite() && perm.OtherWrite()) ||
    31  
    32  		(add.UserExecute() && perm.UserExecute()) ||
    33  		(add.GroupExecute() && perm.GroupExecute()) ||
    34  		(add.OtherExecute() && perm.OtherExecute()) ||
    35  
    36  		(add.SetUid() && mode&os.ModeSetuid != 0) ||
    37  		(add.SetGid() && mode&os.ModeSetgid != 0) ||
    38  		(add.Sticky() && mode&os.ModeSticky != 0) ||
    39  
    40  		(add.Irregular() && mode&os.ModeIrregular != 0)) &&
    41  
    42  		!((remove.File() && mode.IsRegular()) ||
    43  			(remove.Dir() && mode.IsDir()) ||
    44  			(remove.Symlink() && mode&os.ModeSymlink != 0) ||
    45  			(remove.DevBlock() && mode&os.ModeDevice != 0) ||
    46  			(remove.DevChar() && mode&os.ModeCharDevice != 0) ||
    47  			(remove.Socket() && mode&os.ModeSocket != 0) ||
    48  			(remove.NamedPipe() && mode&os.ModeNamedPipe != 0) ||
    49  
    50  			(remove.UserRead() && perm.UserRead()) ||
    51  			(remove.GroupRead() && perm.GroupRead()) ||
    52  			(remove.OtherRead() && perm.OtherRead()) ||
    53  
    54  			(remove.UserWrite() && perm.UserWrite()) ||
    55  			(remove.GroupWrite() && perm.GroupWrite()) ||
    56  			(remove.OtherWrite() && perm.OtherWrite()) ||
    57  
    58  			(remove.UserExecute() && perm.UserExecute()) ||
    59  			(remove.GroupExecute() && perm.GroupExecute()) ||
    60  			(remove.OtherExecute() && perm.OtherExecute()) ||
    61  
    62  			(remove.SetUid() && mode&os.ModeSetuid != 0) ||
    63  			(remove.SetGid() && mode&os.ModeSetgid != 0) ||
    64  			(remove.Sticky() && mode&os.ModeSticky != 0) ||
    65  
    66  			(remove.Irregular() && mode&os.ModeIrregular != 0))
    67  }