#136: Start working on database persistence
This commit is contained in:
go.modgo.summodules.txt
storage/store
vendor
github.com
kballard
go-shellquote
mattn
go-isatty
remyoudompheng
golang.org
x
mod
sys
unix
mkerrors.shsyscall_darwin.gosyscall_illumos.gosyscall_solaris.gozerrors_linux.gozsyscall_darwin_386.gozsyscall_darwin_amd64.gozsyscall_darwin_arm.gozsyscall_darwin_arm64.gozsyscall_illumos_amd64.gozsyscall_solaris_amd64.goztypes_linux.go
windows
tools
AUTHORSCONTRIBUTORSLICENSEPATENTS
go
gcexportdata
internal
gcimporter
bexport.gobimport.goexportdata.gogcimporter.goiexport.goiimport.gonewInterface10.gonewInterface11.go
packagesdriver
packages
internal
event
gocommand
packagesinternal
typesinternal
xerrors
lukechampine.com
modernc.org
cc
v3
ccgo
v3
libc
AUTHORSCONTRIBUTORSHACKINGLICENSELICENSE-GOMakefileREADME.mdcapi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gocapi_windows_386.gocapi_windows_amd64.goccgo.godmesg.gonodmesg.gonofsync.gonopthreads.go
errno
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gocapi_windows_386.gocapi_windows_amd64.goerrno_darwin_amd64.goerrno_darwin_arm64.goerrno_linux_386.goerrno_linux_amd64.goerrno_linux_arm.goerrno_linux_arm64.goerrno_linux_s390x.goerrno_windows_386.goerrno_windows_amd64.go
etc.gofcntl
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gocapi_windows_386.gocapi_windows_amd64.gofcntl_darwin_amd64.gofcntl_darwin_arm64.gofcntl_linux_386.gofcntl_linux_amd64.gofcntl_linux_arm.gofcntl_linux_arm64.gofcntl_linux_s390x.gofcntl_windows_386.gofcntl_windows_amd64.go
fsync.gofts
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gofts_darwin_amd64.gofts_darwin_arm64.gofts_linux_386.gofts_linux_amd64.gofts_linux_arm.gofts_linux_arm64.gofts_linux_s390x.go
go.modgo.sumgrp
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gogrp_darwin_amd64.gogrp_darwin_arm64.gogrp_linux_386.gogrp_linux_amd64.gogrp_linux_arm.gogrp_linux_arm64.gogrp_linux_s390x.go
honnef.co
int128.goioutil_darwin.goioutil_linux.golanginfo
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.golanginfo_darwin_amd64.golanginfo_darwin_arm64.golanginfo_linux_386.golanginfo_linux_amd64.golanginfo_linux_arm.golanginfo_linux_arm64.golanginfo_linux_s390x.go
libc.golibc32.golibc64.golibc_darwin.golibc_darwin_amd64.golibc_darwin_arm64.golibc_linux.golibc_linux_386.golibc_linux_amd64.golibc_linux_arm.golibc_linux_arm64.golibc_linux_s390x.golibc_unix.golibc_windows.golibc_windows_386.golibc_windows_amd64.golimits
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gocapi_windows_386.gocapi_windows_amd64.golimits_darwin_amd64.golimits_darwin_arm64.golimits_linux_386.golimits_linux_amd64.golimits_linux_arm.golimits_linux_arm64.golimits_linux_s390x.golimits_windows_386.golimits_windows_amd64.go
log-generatemem.gomem_brk.gomemgrind.gomusl_darwin_amd64.gomusl_darwin_arm64.gomusl_linux_386.gomusl_linux_amd64.gomusl_linux_arm.gomusl_linux_arm64.gomusl_linux_s390x.gomusl_windows_386.gomusl_windows_amd64.gonetdb
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gonetdb_darwin_amd64.gonetdb_darwin_arm64.gonetdb_linux_386.gonetdb_linux_amd64.gonetdb_linux_arm.gonetdb_linux_arm64.gonetdb_linux_s390x.go
netinet
in
poll
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gopoll_darwin_amd64.gopoll_darwin_arm64.gopoll_linux_386.gopoll_linux_amd64.gopoll_linux_arm.gopoll_linux_arm64.gopoll_linux_s390x.go
printf.gopthread
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gocapi_windows_386.gocapi_windows_amd64.gopthread_darwin_amd64.gopthread_darwin_arm64.gopthread_linux_386.gopthread_linux_amd64.gopthread_linux_arm.gopthread_linux_arm64.gopthread_linux_s390x.gopthread_windows_386.gopthread_windows_amd64.go
pthreads_linux_amd64.gopwd
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gopwd_darwin_amd64.gopwd_darwin_arm64.gopwd_linux_386.gopwd_linux_amd64.gopwd_linux_arm.gopwd_linux_arm64.gopwd_linux_s390x.go
scanf.gosignal
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gocapi_windows_386.gocapi_windows_amd64.gomore_darwin_amd64.gomore_darwin_arm64.gomore_linux_386.gomore_linux_amd64.gomore_linux_arm.gomore_linux_arm64.gomore_linux_s390x.gosignal_darwin_amd64.gosignal_darwin_arm64.gosignal_linux_386.gosignal_linux_amd64.gosignal_linux_arm.gosignal_linux_arm64.gosignal_linux_s390x.gosignal_windows_386.gosignal_windows_amd64.go
stdio
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gocapi_windows_386.gocapi_windows_amd64.gostdio_darwin_amd64.gostdio_darwin_arm64.gostdio_linux_386.gostdio_linux_amd64.gostdio_linux_arm.gostdio_linux_arm64.gostdio_linux_s390x.gostdio_windows_386.gostdio_windows_amd64.go
sync_linux_amd64.gosync_linux_amd64.ssys
socket
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gosocket_darwin_amd64.gosocket_darwin_arm64.gosocket_linux_386.gosocket_linux_amd64.gosocket_linux_arm.gosocket_linux_arm64.gosocket_linux_s390x.go
stat
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gocapi_windows_386.gocapi_windows_amd64.gostat_darwin_amd64.gostat_darwin_arm64.gostat_linux_386.gostat_linux_amd64.gostat_linux_arm.gostat_linux_arm64.gostat_linux_s390x.gostat_windows_386.gostat_windows_amd64.go
types
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gocapi_windows_386.gocapi_windows_amd64.gotypes_darwin_amd64.gotypes_darwin_arm64.gotypes_linux_386.gotypes_linux_amd64.gotypes_linux_arm.gotypes_linux_arm64.gotypes_linux_s390x.gotypes_windows_386.gotypes_windows_amd64.go
termios
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gotermios_darwin_amd64.gotermios_darwin_arm64.gotermios_linux_386.gotermios_linux_amd64.gotermios_linux_arm.gotermios_linux_arm64.gotermios_linux_s390x.go
time
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gocapi_windows_386.gocapi_windows_amd64.gotime_darwin_amd64.gotime_darwin_arm64.gotime_linux_386.gotime_linux_amd64.gotime_linux_arm.gotime_linux_arm64.gotime_linux_s390x.gotime_windows_386.gotime_windows_amd64.go
unistd
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gocapi_windows_386.gocapi_windows_amd64.gounistd_darwin_amd64.gounistd_darwin_arm64.gounistd_linux_386.gounistd_linux_amd64.gounistd_linux_arm.gounistd_linux_arm64.gounistd_linux_s390x.gounistd_windows_386.gounistd_windows_amd64.go
utime
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gocapi_windows_386.gocapi_windows_amd64.goutime_darwin_amd64.goutime_darwin_arm64.goutime_linux_386.goutime_linux_amd64.goutime_linux_arm.goutime_linux_arm64.goutime_linux_s390x.goutime_windows_386.goutime_windows_amd64.go
uuid
mathutil
AUTHORSCONTRIBUTORSLICENSEMakefileREADMEbinarylog.gobits.goenvelope.gogo.modgo.sumint.gomathutil.gonist-sts-2-1-1-reportpermute.gopoly.goprimes.gorat.gornd.gotables.gotest_deps.go
memory
AUTHORSCONTRIBUTORSLICENSELICENSE-MMAP-GOMakefileREADME.mdcounters.gogo.modgo.summemory.gomemory32.gomemory64.gommap_unix.gommap_windows.gonocounters.gotrace_disabled.gotrace_enabled.go
opt
sqlite
AUTHORSCONTRIBUTORSLICENSEMakefileREADME.mdSQLITE-LICENSEdoc.gogenerator.gogo.modgo.sum
lib
capi_darwin_amd64.gocapi_darwin_arm64.gocapi_linux_386.gocapi_linux_amd64.gocapi_linux_arm.gocapi_linux_arm64.gocapi_linux_s390x.gocapi_windows_386.gocapi_windows_amd64.gohooks.gomutex.gosqlite_darwin_amd64.gosqlite_darwin_arm64.gosqlite_linux_386.gosqlite_linux_amd64.gosqlite_linux_arm.gosqlite_linux_arm64.gosqlite_linux_s390x.gosqlite_windows_386.gosqlite_windows_amd64.go
mutex.gosqlite.gosqlite_go18.gounconvert.shstrutil
token
125
vendor/github.com/mattn/go-isatty/isatty_windows.go
generated
vendored
Normal file
125
vendor/github.com/mattn/go-isatty/isatty_windows.go
generated
vendored
Normal file
@ -0,0 +1,125 @@
|
||||
// +build windows
|
||||
// +build !appengine
|
||||
|
||||
package isatty
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
"syscall"
|
||||
"unicode/utf16"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
const (
|
||||
objectNameInfo uintptr = 1
|
||||
fileNameInfo = 2
|
||||
fileTypePipe = 3
|
||||
)
|
||||
|
||||
var (
|
||||
kernel32 = syscall.NewLazyDLL("kernel32.dll")
|
||||
ntdll = syscall.NewLazyDLL("ntdll.dll")
|
||||
procGetConsoleMode = kernel32.NewProc("GetConsoleMode")
|
||||
procGetFileInformationByHandleEx = kernel32.NewProc("GetFileInformationByHandleEx")
|
||||
procGetFileType = kernel32.NewProc("GetFileType")
|
||||
procNtQueryObject = ntdll.NewProc("NtQueryObject")
|
||||
)
|
||||
|
||||
func init() {
|
||||
// Check if GetFileInformationByHandleEx is available.
|
||||
if procGetFileInformationByHandleEx.Find() != nil {
|
||||
procGetFileInformationByHandleEx = nil
|
||||
}
|
||||
}
|
||||
|
||||
// IsTerminal return true if the file descriptor is terminal.
|
||||
func IsTerminal(fd uintptr) bool {
|
||||
var st uint32
|
||||
r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0)
|
||||
return r != 0 && e == 0
|
||||
}
|
||||
|
||||
// Check pipe name is used for cygwin/msys2 pty.
|
||||
// Cygwin/MSYS2 PTY has a name like:
|
||||
// \{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master
|
||||
func isCygwinPipeName(name string) bool {
|
||||
token := strings.Split(name, "-")
|
||||
if len(token) < 5 {
|
||||
return false
|
||||
}
|
||||
|
||||
if token[0] != `\msys` &&
|
||||
token[0] != `\cygwin` &&
|
||||
token[0] != `\Device\NamedPipe\msys` &&
|
||||
token[0] != `\Device\NamedPipe\cygwin` {
|
||||
return false
|
||||
}
|
||||
|
||||
if token[1] == "" {
|
||||
return false
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(token[2], "pty") {
|
||||
return false
|
||||
}
|
||||
|
||||
if token[3] != `from` && token[3] != `to` {
|
||||
return false
|
||||
}
|
||||
|
||||
if token[4] != "master" {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
// getFileNameByHandle use the undocomented ntdll NtQueryObject to get file full name from file handler
|
||||
// since GetFileInformationByHandleEx is not avilable under windows Vista and still some old fashion
|
||||
// guys are using Windows XP, this is a workaround for those guys, it will also work on system from
|
||||
// Windows vista to 10
|
||||
// see https://stackoverflow.com/a/18792477 for details
|
||||
func getFileNameByHandle(fd uintptr) (string, error) {
|
||||
if procNtQueryObject == nil {
|
||||
return "", errors.New("ntdll.dll: NtQueryObject not supported")
|
||||
}
|
||||
|
||||
var buf [4 + syscall.MAX_PATH]uint16
|
||||
var result int
|
||||
r, _, e := syscall.Syscall6(procNtQueryObject.Addr(), 5,
|
||||
fd, objectNameInfo, uintptr(unsafe.Pointer(&buf)), uintptr(2*len(buf)), uintptr(unsafe.Pointer(&result)), 0)
|
||||
if r != 0 {
|
||||
return "", e
|
||||
}
|
||||
return string(utf16.Decode(buf[4 : 4+buf[0]/2])), nil
|
||||
}
|
||||
|
||||
// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2
|
||||
// terminal.
|
||||
func IsCygwinTerminal(fd uintptr) bool {
|
||||
if procGetFileInformationByHandleEx == nil {
|
||||
name, err := getFileNameByHandle(fd)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return isCygwinPipeName(name)
|
||||
}
|
||||
|
||||
// Cygwin/msys's pty is a pipe.
|
||||
ft, _, e := syscall.Syscall(procGetFileType.Addr(), 1, fd, 0, 0)
|
||||
if ft != fileTypePipe || e != 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
var buf [2 + syscall.MAX_PATH]uint16
|
||||
r, _, e := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(),
|
||||
4, fd, fileNameInfo, uintptr(unsafe.Pointer(&buf)),
|
||||
uintptr(len(buf)*2), 0, 0)
|
||||
if r == 0 || e != 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
l := *(*uint32)(unsafe.Pointer(&buf))
|
||||
return isCygwinPipeName(string(utf16.Decode(buf[2 : 2+l/2])))
|
||||
}
|
Reference in New Issue
Block a user