mirror of https://github.com/jetkvm/kvm.git
81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
package usbgadget
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"path/filepath"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func joinPath(basePath string, paths []string) string {
|
|
pathArr := append([]string{basePath}, paths...)
|
|
return filepath.Join(pathArr...)
|
|
}
|
|
|
|
func hexToDecimal(hex string) (int64, error) {
|
|
decimal, err := strconv.ParseInt(hex, 16, 64)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return decimal, nil
|
|
}
|
|
|
|
func decimalToOctal(decimal int64) string {
|
|
return fmt.Sprintf("%04o", decimal)
|
|
}
|
|
|
|
func hexToOctal(hex string) (string, error) {
|
|
hex = strings.ToLower(hex)
|
|
hex = strings.Replace(hex, "0x", "", 1) //remove 0x or 0X
|
|
|
|
decimal, err := hexToDecimal(hex)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
// Convert the decimal integer to an octal string.
|
|
octal := decimalToOctal(decimal)
|
|
return octal, nil
|
|
}
|
|
|
|
func compareFileContent(oldContent []byte, newContent []byte, looserMatch bool) bool {
|
|
if bytes.Equal(oldContent, newContent) {
|
|
return true
|
|
}
|
|
|
|
if len(oldContent) == len(newContent)+1 &&
|
|
bytes.Equal(oldContent[:len(newContent)], newContent) &&
|
|
oldContent[len(newContent)] == 10 {
|
|
return true
|
|
}
|
|
|
|
if len(newContent) == 4 {
|
|
if len(oldContent) < 6 || len(oldContent) > 7 {
|
|
return false
|
|
}
|
|
|
|
if len(oldContent) == 7 && oldContent[6] == 0x0a {
|
|
oldContent = oldContent[:6]
|
|
}
|
|
|
|
oldOctalValue, err := hexToOctal(string(oldContent))
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
if oldOctalValue == string(newContent) {
|
|
return true
|
|
}
|
|
}
|
|
|
|
if looserMatch {
|
|
oldContentStr := strings.TrimSpace(string(oldContent))
|
|
newContentStr := strings.TrimSpace(string(newContent))
|
|
|
|
return oldContentStr == newContentStr
|
|
}
|
|
|
|
return false
|
|
}
|