gemini-browser

A text-based gemini browser
git clone git://git.laack.co/gemini-browser.git
Log | Files | Refs | README

nonblock_bsd.go (1346B)


      1 // Copyright 2021 The TCell Authors
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use file except in compliance with the License.
      5 // You may obtain a copy of the license at
      6 //
      7 //    http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 //go:build darwin || dragonfly || freebsd || netbsd || openbsd
     16 // +build darwin dragonfly freebsd netbsd openbsd
     17 
     18 package tcell
     19 
     20 import (
     21 	"syscall"
     22 
     23 	"golang.org/x/sys/unix"
     24 )
     25 
     26 // BSD systems use TIOC style ioctls.
     27 
     28 // tcSetBufParams is used by the tty driver on UNIX systems to configure the
     29 // buffering parameters (minimum character count and minimum wait time in msec.)
     30 // This also waits for output to drain first.
     31 func tcSetBufParams(fd int, vMin uint8, vTime uint8) error {
     32 	_ = syscall.SetNonblock(fd, true)
     33 	tio, err := unix.IoctlGetTermios(fd, unix.TIOCGETA)
     34 	if err != nil {
     35 		return err
     36 	}
     37 	tio.Cc[unix.VMIN] = vMin
     38 	tio.Cc[unix.VTIME] = vTime
     39 	if err = unix.IoctlSetTermios(fd, unix.TIOCSETAW, tio); err != nil {
     40 		return err
     41 	}
     42 	return nil
     43 }