mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 12:32:26 -05:00 
			
		
		
		
	
		
			
	
	
		
			76 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | // Copyright 2018 The Go Authors. All rights reserved. | ||
|  | // Use of this source code is governed by a BSD-style | ||
|  | // license that can be found in the LICENSE file. | ||
|  | 
 | ||
|  | //go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris | ||
|  | // +build aix darwin dragonfly freebsd linux netbsd openbsd solaris | ||
|  | 
 | ||
|  | package unix | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"runtime" | ||
|  | 	"unsafe" | ||
|  | ) | ||
|  | 
 | ||
|  | // ioctl itself should not be exposed directly, but additional get/set | ||
|  | // functions for specific types are permissible. | ||
|  | 
 | ||
|  | // IoctlSetInt performs an ioctl operation which sets an integer value | ||
|  | // on fd, using the specified request number. | ||
|  | func IoctlSetInt(fd int, req uint, value int) error { | ||
|  | 	return ioctl(fd, req, uintptr(value)) | ||
|  | } | ||
|  | 
 | ||
|  | // IoctlSetPointerInt performs an ioctl operation which sets an | ||
|  | // integer value on fd, using the specified request number. The ioctl | ||
|  | // argument is called with a pointer to the integer value, rather than | ||
|  | // passing the integer value directly. | ||
|  | func IoctlSetPointerInt(fd int, req uint, value int) error { | ||
|  | 	v := int32(value) | ||
|  | 	return ioctl(fd, req, uintptr(unsafe.Pointer(&v))) | ||
|  | } | ||
|  | 
 | ||
|  | // IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. | ||
|  | // | ||
|  | // To change fd's window size, the req argument should be TIOCSWINSZ. | ||
|  | func IoctlSetWinsize(fd int, req uint, value *Winsize) error { | ||
|  | 	// TODO: if we get the chance, remove the req parameter and | ||
|  | 	// hardcode TIOCSWINSZ. | ||
|  | 	err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) | ||
|  | 	runtime.KeepAlive(value) | ||
|  | 	return err | ||
|  | } | ||
|  | 
 | ||
|  | // IoctlSetTermios performs an ioctl on fd with a *Termios. | ||
|  | // | ||
|  | // The req value will usually be TCSETA or TIOCSETA. | ||
|  | func IoctlSetTermios(fd int, req uint, value *Termios) error { | ||
|  | 	// TODO: if we get the chance, remove the req parameter. | ||
|  | 	err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) | ||
|  | 	runtime.KeepAlive(value) | ||
|  | 	return err | ||
|  | } | ||
|  | 
 | ||
|  | // IoctlGetInt performs an ioctl operation which gets an integer value | ||
|  | // from fd, using the specified request number. | ||
|  | // | ||
|  | // A few ioctl requests use the return value as an output parameter; | ||
|  | // for those, IoctlRetInt should be used instead of this function. | ||
|  | func IoctlGetInt(fd int, req uint) (int, error) { | ||
|  | 	var value int | ||
|  | 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) | ||
|  | 	return value, err | ||
|  | } | ||
|  | 
 | ||
|  | func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { | ||
|  | 	var value Winsize | ||
|  | 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) | ||
|  | 	return &value, err | ||
|  | } | ||
|  | 
 | ||
|  | func IoctlGetTermios(fd int, req uint) (*Termios, error) { | ||
|  | 	var value Termios | ||
|  | 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) | ||
|  | 	return &value, err | ||
|  | } |