vendor: cilium/ebbf 4032b1d8aae306b7bb94a2a11002932caf88c644
full diff: 60c3aa43f4...4032b1d8aa
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
			
			
This commit is contained in:
		
							
								
								
									
										63
									
								
								vendor/github.com/cilium/ebpf/internal/fd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								vendor/github.com/cilium/ebpf/internal/fd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | ||||
| package internal | ||||
|  | ||||
| import ( | ||||
| 	"runtime" | ||||
| 	"strconv" | ||||
|  | ||||
| 	"github.com/cilium/ebpf/internal/unix" | ||||
|  | ||||
| 	"github.com/pkg/errors" | ||||
| ) | ||||
|  | ||||
| var ErrClosedFd = errors.New("use of closed file descriptor") | ||||
|  | ||||
| type FD struct { | ||||
| 	raw int64 | ||||
| } | ||||
|  | ||||
| func NewFD(value uint32) *FD { | ||||
| 	fd := &FD{int64(value)} | ||||
| 	runtime.SetFinalizer(fd, (*FD).Close) | ||||
| 	return fd | ||||
| } | ||||
|  | ||||
| func (fd *FD) String() string { | ||||
| 	return strconv.FormatInt(fd.raw, 10) | ||||
| } | ||||
|  | ||||
| func (fd *FD) Value() (uint32, error) { | ||||
| 	if fd.raw < 0 { | ||||
| 		return 0, ErrClosedFd | ||||
| 	} | ||||
|  | ||||
| 	return uint32(fd.raw), nil | ||||
| } | ||||
|  | ||||
| func (fd *FD) Close() error { | ||||
| 	if fd.raw < 0 { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	value := int(fd.raw) | ||||
| 	fd.raw = -1 | ||||
|  | ||||
| 	fd.Forget() | ||||
| 	return unix.Close(value) | ||||
| } | ||||
|  | ||||
| func (fd *FD) Forget() { | ||||
| 	runtime.SetFinalizer(fd, nil) | ||||
| } | ||||
|  | ||||
| func (fd *FD) Dup() (*FD, error) { | ||||
| 	if fd.raw < 0 { | ||||
| 		return nil, ErrClosedFd | ||||
| 	} | ||||
|  | ||||
| 	dup, err := unix.FcntlInt(uintptr(fd.raw), unix.F_DUPFD_CLOEXEC, 0) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrap(err, "can't dup fd") | ||||
| 	} | ||||
|  | ||||
| 	return NewFD(uint32(dup)), nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Sebastiaan van Stijn
					Sebastiaan van Stijn