Added support for remote0
This commit is contained in:
61
internal/hwinfo/util/util.go
Normal file
61
internal/hwinfo/util/util.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package util
|
||||
|
||||
import "C"
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
"unsafe"
|
||||
|
||||
"golang.org/x/text/encoding/charmap"
|
||||
)
|
||||
|
||||
// ErrFileNotFound Windows error
|
||||
var ErrFileNotFound = errors.New("file not found")
|
||||
|
||||
// ErrInvalidHandle Windows error
|
||||
var ErrInvalidHandle = errors.New("invalid handle")
|
||||
|
||||
// UnknownError unhandled Windows error
|
||||
type UnknownError struct {
|
||||
Code uint64
|
||||
}
|
||||
|
||||
func (e UnknownError) Error() string {
|
||||
return fmt.Sprintf("unknown error code: %d", e.Code)
|
||||
}
|
||||
|
||||
// HandleLastError converts C.GetLastError() to golang error
|
||||
func HandleLastError(code uint64) error {
|
||||
switch code {
|
||||
case 2: // ERROR_FILE_NOT_FOUND
|
||||
return ErrFileNotFound
|
||||
case 6: // ERROR_INVALID_HANDLE
|
||||
return ErrInvalidHandle
|
||||
default:
|
||||
return UnknownError{Code: code}
|
||||
}
|
||||
}
|
||||
|
||||
func goStringFromPtr(ptr unsafe.Pointer, len int) string {
|
||||
s := C.GoStringN((*C.char)(ptr), C.int(len))
|
||||
return s[:strings.IndexByte(s, 0)]
|
||||
}
|
||||
|
||||
// DecodeCharPtr decodes ISO8859_1 string to UTF-8
|
||||
func DecodeCharPtr(ptr unsafe.Pointer, len int) string {
|
||||
s := goStringFromPtr(ptr, len)
|
||||
ds, err := decodeISO8859_1(s)
|
||||
if err != nil {
|
||||
log.Fatalf("TODO: failed to decode: %v", err)
|
||||
}
|
||||
return ds
|
||||
}
|
||||
|
||||
var isodecoder = charmap.ISO8859_1.NewDecoder()
|
||||
|
||||
func decodeISO8859_1(in string) (string, error) {
|
||||
return isodecoder.String(in)
|
||||
}
|
||||
Reference in New Issue
Block a user