mirror of
https://github.com/bluszcz/cutego.git
synced 2024-09-28 13:15:17 +03:00
fix for go module support + fix readData memory leak + fix docker wine support
This commit is contained in:
parent
33cc660323
commit
5251d3454c
32 changed files with 252 additions and 25 deletions
|
@ -11,6 +11,7 @@ import (
|
|||
"github.com/therecipe/qt"
|
||||
"github.com/therecipe/qt/core"
|
||||
"github.com/therecipe/qt/network"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"strings"
|
||||
"unsafe"
|
||||
|
@ -4460,14 +4461,14 @@ func callbackQBluetoothSocket_ReadData(ptr unsafe.Pointer, data C.struct_QtBluet
|
|||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(signal.(func(*string, int64) int64)(&retS, int64(maxSize)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(NewQBluetoothSocketFromPointer(ptr).ReadDataDefault(&retS, int64(maxSize)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
|
13
cmd/cmd.go
Normal file
13
cmd/cmd.go
Normal file
|
@ -0,0 +1,13 @@
|
|||
// +build cmd
|
||||
|
||||
package cmd
|
||||
|
||||
import (
|
||||
_ "github.com/therecipe/qt/cmd/qtdeploy"
|
||||
_ "github.com/therecipe/qt/cmd/qtminimal"
|
||||
_ "github.com/therecipe/qt/cmd/qtmoc"
|
||||
_ "github.com/therecipe/qt/cmd/qtrcc"
|
||||
_ "github.com/therecipe/qt/cmd/qtsetup"
|
||||
|
||||
_ "github.com/gopherjs/gopherjs"
|
||||
)
|
1
cmd/go.mod
Normal file
1
cmd/go.mod
Normal file
|
@ -0,0 +1 @@
|
|||
module github.com/therecipe/qt/cmd
|
11
core/core.go
11
core/core.go
|
@ -9,6 +9,7 @@ package core
|
|||
import "C"
|
||||
import (
|
||||
"github.com/therecipe/qt"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"strings"
|
||||
"unsafe"
|
||||
|
@ -7270,14 +7271,14 @@ func callbackQBuffer_ReadData(ptr unsafe.Pointer, data C.struct_QtCore_PackedStr
|
|||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(signal.(func(*string, int64) int64)(&retS, int64(l)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(NewQBufferFromPointer(ptr).ReadDataDefault(&retS, int64(l)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
@ -16373,14 +16374,14 @@ func callbackQFileDevice_ReadData(ptr unsafe.Pointer, data C.struct_QtCore_Packe
|
|||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(signal.(func(*string, int64) int64)(&retS, int64(l)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(NewQFileDeviceFromPointer(ptr).ReadDataDefault(&retS, int64(l)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
@ -19029,7 +19030,7 @@ func callbackQIODevice_ReadData(ptr unsafe.Pointer, data C.struct_QtCore_PackedS
|
|||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(signal.(func(*string, int64) int64)(&retS, int64(maxSize)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
|
1
internal/binding/files/docs/5.10.0/go.mod
Normal file
1
internal/binding/files/docs/5.10.0/go.mod
Normal file
|
@ -0,0 +1 @@
|
|||
module github.com/therecipe/qt/internal/binding/files/docs/5.10.0
|
1
internal/binding/files/docs/5.10.0/mod.go
Normal file
1
internal/binding/files/docs/5.10.0/mod.go
Normal file
|
@ -0,0 +1 @@
|
|||
package mod
|
1
internal/binding/files/docs/5.11.1/go.mod
Normal file
1
internal/binding/files/docs/5.11.1/go.mod
Normal file
|
@ -0,0 +1 @@
|
|||
module github.com/therecipe/qt/internal/binding/files/docs/5.11.1
|
1
internal/binding/files/docs/5.11.1/mod.go
Normal file
1
internal/binding/files/docs/5.11.1/mod.go
Normal file
|
@ -0,0 +1 @@
|
|||
package mod
|
1
internal/binding/files/docs/5.12.0/go.mod
Normal file
1
internal/binding/files/docs/5.12.0/go.mod
Normal file
|
@ -0,0 +1 @@
|
|||
module github.com/therecipe/qt/internal/binding/files/docs/5.12.0
|
1
internal/binding/files/docs/5.12.0/mod.go
Normal file
1
internal/binding/files/docs/5.12.0/mod.go
Normal file
|
@ -0,0 +1 @@
|
|||
package mod
|
1
internal/binding/files/docs/5.6.3/go.mod
Normal file
1
internal/binding/files/docs/5.6.3/go.mod
Normal file
|
@ -0,0 +1 @@
|
|||
module github.com/therecipe/qt/internal/binding/files/docs/5.6.3
|
1
internal/binding/files/docs/5.6.3/mod.go
Normal file
1
internal/binding/files/docs/5.6.3/mod.go
Normal file
|
@ -0,0 +1 @@
|
|||
package mod
|
1
internal/binding/files/docs/5.7.0/go.mod
Normal file
1
internal/binding/files/docs/5.7.0/go.mod
Normal file
|
@ -0,0 +1 @@
|
|||
module github.com/therecipe/qt/internal/binding/files/docs/5.7.0
|
1
internal/binding/files/docs/5.7.0/mod.go
Normal file
1
internal/binding/files/docs/5.7.0/mod.go
Normal file
|
@ -0,0 +1 @@
|
|||
package mod
|
1
internal/binding/files/docs/5.7.1/go.mod
Normal file
1
internal/binding/files/docs/5.7.1/go.mod
Normal file
|
@ -0,0 +1 @@
|
|||
module github.com/therecipe/qt/internal/binding/files/docs/5.7.1
|
1
internal/binding/files/docs/5.7.1/mod.go
Normal file
1
internal/binding/files/docs/5.7.1/mod.go
Normal file
|
@ -0,0 +1 @@
|
|||
package mod
|
1
internal/binding/files/docs/5.8.0/go.mod
Normal file
1
internal/binding/files/docs/5.8.0/go.mod
Normal file
|
@ -0,0 +1 @@
|
|||
module github.com/therecipe/qt/internal/binding/files/docs/5.8.0
|
1
internal/binding/files/docs/5.8.0/mod.go
Normal file
1
internal/binding/files/docs/5.8.0/mod.go
Normal file
|
@ -0,0 +1 @@
|
|||
package mod
|
1
internal/binding/files/docs/5.9.0/go.mod
Normal file
1
internal/binding/files/docs/5.9.0/go.mod
Normal file
|
@ -0,0 +1 @@
|
|||
module github.com/therecipe/qt/internal/binding/files/docs/5.9.0
|
1
internal/binding/files/docs/5.9.0/mod.go
Normal file
1
internal/binding/files/docs/5.9.0/mod.go
Normal file
|
@ -0,0 +1 @@
|
|||
package mod
|
1
internal/binding/files/docs/go.mod
Normal file
1
internal/binding/files/docs/go.mod
Normal file
|
@ -0,0 +1 @@
|
|||
module github.com/therecipe/qt/internal/binding/files/docs
|
12
internal/binding/files/docs/mod.go
Normal file
12
internal/binding/files/docs/mod.go
Normal file
|
@ -0,0 +1,12 @@
|
|||
package docs
|
||||
|
||||
import (
|
||||
_ "github.com/therecipe/qt/internal/binding/files/docs/5.10.0"
|
||||
_ "github.com/therecipe/qt/internal/binding/files/docs/5.11.1"
|
||||
_ "github.com/therecipe/qt/internal/binding/files/docs/5.12.0"
|
||||
_ "github.com/therecipe/qt/internal/binding/files/docs/5.6.3"
|
||||
_ "github.com/therecipe/qt/internal/binding/files/docs/5.7.0"
|
||||
_ "github.com/therecipe/qt/internal/binding/files/docs/5.7.1"
|
||||
_ "github.com/therecipe/qt/internal/binding/files/docs/5.8.0"
|
||||
_ "github.com/therecipe/qt/internal/binding/files/docs/5.9.0"
|
||||
)
|
|
@ -353,7 +353,7 @@ func goFunctionBody(function *parser.Function) string {
|
|||
if !UseJs() {
|
||||
fmt.Fprint(bb, "retS := cGoUnpackString(data)\n")
|
||||
fmt.Fprintf(bb, "ret := %v\n", converter.GoInput(fmt.Sprintf("signal.(%v)(%v)", converter.GoHeaderInputSignalFunction(function), converter.GoInputParametersForCallback(function)), function.Output, function, function.PureGoOutput))
|
||||
fmt.Fprint(bb, "if ret > 0 {\nC.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))\n}\n")
|
||||
fmt.Fprint(bb, "if ret > 0 {\nC.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))\n}\n")
|
||||
fmt.Fprint(bb, "return ret")
|
||||
} else {
|
||||
fmt.Fprint(bb, "return 0")
|
||||
|
@ -423,7 +423,7 @@ func goFunctionBody(function *parser.Function) string {
|
|||
if !UseJs() {
|
||||
fmt.Fprint(bb, "retS := cGoUnpackString(data)\n")
|
||||
fmt.Fprintf(bb, "ret := %v\n", converter.GoInput(fmt.Sprintf("New%vFromPointer(ptr).%v%vDefault(%v)", strings.Title(class.Name), strings.Replace(strings.Title(function.Name), parser.TILDE, "Destroy", -1), function.OverloadNumber, converter.GoInputParametersForCallback(function)), function.Output, function, function.PureGoOutput))
|
||||
fmt.Fprint(bb, "if ret > 0 {\nC.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))\n}\n")
|
||||
fmt.Fprint(bb, "if ret > 0 {\nC.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))\n}\n")
|
||||
fmt.Fprint(bb, "return ret")
|
||||
} else {
|
||||
fmt.Fprint(bb, "return 0")
|
||||
|
|
|
@ -633,7 +633,7 @@ import "C"
|
|||
}
|
||||
|
||||
fmt.Fprint(bb, "import (\n")
|
||||
for _, m := range append(parser.GetLibs(), "qt", "strings", "unsafe", "log", "runtime", "fmt", "errors", "js", "time", "hex") {
|
||||
for _, m := range append(parser.GetLibs(), "qt", "strings", "unsafe", "log", "runtime", "fmt", "errors", "js", "time", "hex", "reflect") {
|
||||
mlow := strings.ToLower(m)
|
||||
if strings.Contains(inputString, fmt.Sprintf(" %v.", mlow)) ||
|
||||
strings.Contains(inputString, fmt.Sprintf("\t%v.", mlow)) ||
|
||||
|
@ -645,7 +645,7 @@ import "C"
|
|||
strings.Contains(inputString, fmt.Sprintf(")%v.", mlow)) ||
|
||||
strings.Contains(inputString, fmt.Sprintf("std_%v.", mlow)) {
|
||||
switch mlow {
|
||||
case "strings", "unsafe", "log", "runtime", "fmt", "errors", "time":
|
||||
case "strings", "unsafe", "log", "runtime", "fmt", "errors", "time", "reflect":
|
||||
fmt.Fprintf(bb, "\"%v\"\n", mlow)
|
||||
|
||||
case "hex":
|
||||
|
|
|
@ -13,6 +13,8 @@ import (
|
|||
"github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/therecipe/qt/internal/utils"
|
||||
|
||||
_ "github.com/therecipe/qt/internal/binding/files/docs"
|
||||
)
|
||||
|
||||
var buildVersion = "no build version"
|
||||
|
|
48
internal/examples/qml/custom_scheme/main.go
Normal file
48
internal/examples/qml/custom_scheme/main.go
Normal file
|
@ -0,0 +1,48 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/therecipe/qt/core"
|
||||
"github.com/therecipe/qt/network"
|
||||
"github.com/therecipe/qt/qml"
|
||||
"github.com/therecipe/qt/quick"
|
||||
"github.com/therecipe/qt/widgets"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
widgets.NewQApplication(len(os.Args), os.Args)
|
||||
|
||||
var view = quick.NewQQuickView(nil)
|
||||
|
||||
var (
|
||||
factory = qml.NewQQmlNetworkAccessManagerFactory()
|
||||
manager *network.QNetworkAccessManager
|
||||
)
|
||||
|
||||
factory.ConnectCreate(func(parent *core.QObject) *network.QNetworkAccessManager {
|
||||
if manager != nil {
|
||||
return manager
|
||||
}
|
||||
|
||||
manager = network.NewQNetworkAccessManager(parent)
|
||||
|
||||
manager.ConnectCreateRequest(func(op network.QNetworkAccessManager__Operation, req *network.QNetworkRequest, outgoingData *core.QIODevice) *network.QNetworkReply {
|
||||
if req.Url().Scheme() != "custom" {
|
||||
return manager.CreateRequestDefault(op, req, outgoingData)
|
||||
}
|
||||
|
||||
return NewCustomReply(op, req)
|
||||
})
|
||||
|
||||
return manager
|
||||
})
|
||||
|
||||
view.Engine().SetNetworkAccessManagerFactory(factory)
|
||||
view.SetSource(core.NewQUrl3("qrc:///qml/myfile.qml", 0)) //can be custom:/// as well
|
||||
view.SetResizeMode(quick.QQuickView__SizeRootObjectToView)
|
||||
view.Show()
|
||||
|
||||
widgets.QApplication_Exec()
|
||||
}
|
26
internal/examples/qml/custom_scheme/qml/myfile.qml
Executable file
26
internal/examples/qml/custom_scheme/qml/myfile.qml
Executable file
|
@ -0,0 +1,26 @@
|
|||
import QtQuick 2.0
|
||||
import "custom:///qml/"
|
||||
|
||||
Rectangle {
|
||||
id: page
|
||||
width: 320; height: 480
|
||||
color: "lightblue"
|
||||
|
||||
Text {
|
||||
id: helloText
|
||||
text: "hello from qrc:///"
|
||||
y: 30
|
||||
anchors.horizontalCenter: page.horizontalCenter
|
||||
font.pointSize: 24; font.bold: true
|
||||
}
|
||||
|
||||
SomeClass {
|
||||
height: parent.height/2
|
||||
|
||||
anchors {
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
bottom: parent.bottom
|
||||
}
|
||||
}
|
||||
}
|
89
internal/examples/qml/custom_scheme/reply.go
Normal file
89
internal/examples/qml/custom_scheme/reply.go
Normal file
|
@ -0,0 +1,89 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/therecipe/qt/core"
|
||||
"github.com/therecipe/qt/network"
|
||||
)
|
||||
|
||||
//the custom QNetworkReply is partially modeled after
|
||||
//https://code.qt.io/cgit/qt/qtbase.git/tree/src/network/access/qnetworkreplyfileimpl.cpp?h=5.7
|
||||
//and
|
||||
//https://blogs.kde.org/2010/08/28/implementing-reusable-custom-qnetworkreply
|
||||
|
||||
func NewCustomReply(op network.QNetworkAccessManager__Operation, req *network.QNetworkRequest) *network.QNetworkReply {
|
||||
|
||||
var customReply = network.NewQNetworkReply(nil)
|
||||
customReply.SetRequest(req)
|
||||
customReply.SetUrl(req.Url())
|
||||
customReply.SetOperation(op)
|
||||
customReply.SetFinished(true)
|
||||
|
||||
//there will be at least 2 requests
|
||||
//one for the qmldir file: https://doc.qt.io/qt-5/qtqml-syntax-directoryimports.html#directory-listing-qmldir-files
|
||||
//and another request for each *.qml file that is exported through the qmldir file
|
||||
|
||||
println("requested:", req.Url().ToString(0))
|
||||
|
||||
var content string
|
||||
if req.Url().FileName(0) == "qmldir" {
|
||||
content = "SomeClass myfile.qml"
|
||||
} else {
|
||||
content = `import QtQuick 2.0
|
||||
|
||||
Rectangle {
|
||||
id: page
|
||||
width: 320; height: 480
|
||||
color: "lightgreen"
|
||||
|
||||
Text {
|
||||
id: helloText
|
||||
text: "hello from custom:///"
|
||||
y: 30
|
||||
anchors.horizontalCenter: page.horizontalCenter
|
||||
font.pointSize: 24; font.bold: true
|
||||
}
|
||||
}`
|
||||
}
|
||||
|
||||
//in case of multiple customReply::ReadData calls for a single reply, an offset is used
|
||||
var offset int64
|
||||
customReply.ConnectReadData(func(data *string, maxSize int64) int64 {
|
||||
|
||||
if offset >= int64(len(content)) {
|
||||
return -1
|
||||
}
|
||||
|
||||
var number = func(a, b int64) int64 {
|
||||
if a <= b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}(maxSize, int64(len(content))-offset)
|
||||
|
||||
*data = string([]byte(content)[offset : offset+number])
|
||||
offset += number
|
||||
|
||||
customReply.SetAttribute(network.QNetworkRequest__HttpStatusCodeAttribute, core.NewQVariant7(200))
|
||||
customReply.SetAttribute(network.QNetworkRequest__HttpReasonPhraseAttribute, core.NewQVariant14("OK"))
|
||||
|
||||
return number
|
||||
})
|
||||
|
||||
customReply.ConnectIsSequential(func() bool {
|
||||
return true
|
||||
})
|
||||
|
||||
customReply.ConnectBytesAvailable(func() int64 {
|
||||
return int64(len(content)) - offset
|
||||
})
|
||||
|
||||
customReply.Open(core.QIODevice__ReadOnly | core.QIODevice__Unbuffered)
|
||||
customReply.SetHeader(network.QNetworkRequest__ContentLengthHeader, core.NewQVariant9(int64(len(content))))
|
||||
|
||||
customReply.MetaDataChanged()
|
||||
customReply.DownloadProgress(int64(len(content)), int64(len(content)))
|
||||
customReply.ReadyRead()
|
||||
customReply.Finished()
|
||||
|
||||
return customReply
|
||||
}
|
|
@ -17,9 +17,10 @@ func main() {
|
|||
object = component.Create(nil)
|
||||
)
|
||||
|
||||
fmt.Println("Property value:", object.Property("someNumber").ToInt(false))
|
||||
var someBool bool
|
||||
fmt.Println("Property value:", object.Property("someNumber").ToInt(&someBool), someBool)
|
||||
object.SetProperty("someNumber", core.NewQVariant7(5000))
|
||||
fmt.Println("Property value:", object.Property("someNumber").ToInt(false))
|
||||
fmt.Println("Property value:", object.Property("someNumber").ToInt(&someBool), someBool)
|
||||
object.SetProperty("someNumber", core.NewQVariant7(200))
|
||||
fmt.Println("Property value:", object.Property("someNumber").ToInt(false))
|
||||
fmt.Println("Property value:", object.Property("someNumber").ToInt(&someBool), someBool)
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
@ -90,7 +91,7 @@ func GoQtPkgPath(s ...string) string {
|
|||
func RunCmd(cmd *exec.Cmd, name string) string {
|
||||
fields := logrus.Fields{"_func": "RunCmd", "name": name, "cmd": strings.Join(cmd.Args, " "), "env": strings.Join(cmd.Env, " "), "dir": cmd.Dir}
|
||||
Log.WithFields(fields).Debug("Execute")
|
||||
out, err := cmd.CombinedOutput()
|
||||
out, err := runCmdHelper(cmd)
|
||||
if err != nil {
|
||||
Log.WithError(err).WithFields(fields).Error("failed to run command")
|
||||
println(string(out))
|
||||
|
@ -103,7 +104,7 @@ func RunCmd(cmd *exec.Cmd, name string) string {
|
|||
func RunCmdOptional(cmd *exec.Cmd, name string) string {
|
||||
fields := logrus.Fields{"_func": "RunCmdOptional", "name": name, "cmd": strings.Join(cmd.Args, " "), "env": strings.Join(cmd.Env, " "), "dir": cmd.Dir}
|
||||
Log.WithFields(fields).Debug("Execute")
|
||||
out, err := cmd.CombinedOutput()
|
||||
out, err := runCmdHelper(cmd)
|
||||
if err != nil && !strings.Contains(string(out), "No template (-t) specified") {
|
||||
Log.WithError(err).WithFields(fields).Error("failed to run command")
|
||||
println(string(out))
|
||||
|
@ -114,10 +115,23 @@ func RunCmdOptional(cmd *exec.Cmd, name string) string {
|
|||
func RunCmdOptionalError(cmd *exec.Cmd, name string) (string, error) {
|
||||
fields := logrus.Fields{"_func": "RunCmdOptionalError", "name": name, "cmd": strings.Join(cmd.Args, " "), "env": strings.Join(cmd.Env, " "), "dir": cmd.Dir}
|
||||
Log.WithFields(fields).Debug("Execute")
|
||||
out, err := cmd.CombinedOutput()
|
||||
out, err := runCmdHelper(cmd)
|
||||
if err != nil {
|
||||
Log.WithError(err).WithFields(fields).Error("failed to run command")
|
||||
println(string(out))
|
||||
}
|
||||
return string(out), err
|
||||
}
|
||||
|
||||
func runCmdHelper(cmd *exec.Cmd) (out []byte, err error) {
|
||||
if _, ok := os.LookupEnv("WINEDEBUG"); ok {
|
||||
go func() { out, err = cmd.CombinedOutput() }()
|
||||
for range time.NewTicker(250 * time.Millisecond).C {
|
||||
if cmd.ProcessState != nil && cmd.ProcessState.Exited() {
|
||||
break
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
return cmd.CombinedOutput()
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import "C"
|
|||
import (
|
||||
"github.com/therecipe/qt"
|
||||
"github.com/therecipe/qt/core"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"strings"
|
||||
"unsafe"
|
||||
|
@ -1175,14 +1176,14 @@ func callbackQAbstractSocket_ReadData(ptr unsafe.Pointer, data C.struct_QtNetwor
|
|||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(signal.(func(*string, int64) int64)(&retS, int64(maxSize)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(NewQAbstractSocketFromPointer(ptr).ReadDataDefault(&retS, int64(maxSize)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
@ -6350,14 +6351,14 @@ func callbackQLocalSocket_ReadData(ptr unsafe.Pointer, data C.struct_QtNetwork_P
|
|||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(signal.(func(*string, int64) int64)(&retS, int64(c)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(NewQLocalSocketFromPointer(ptr).ReadDataDefault(&retS, int64(c)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
@ -14003,14 +14004,14 @@ func callbackQNetworkReply_ReadData(ptr unsafe.Pointer, data C.struct_QtNetwork_
|
|||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(signal.(func(*string, int64) int64)(&retS, int64(maxSize)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(NewQNetworkReplyFromPointer(ptr).ReadDataDefault(&retS, int64(maxSize)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import "C"
|
|||
import (
|
||||
"github.com/therecipe/qt"
|
||||
"github.com/therecipe/qt/core"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"strings"
|
||||
"unsafe"
|
||||
|
@ -410,14 +411,14 @@ func callbackQSerialPort_ReadData(ptr unsafe.Pointer, data C.struct_QtSerialPort
|
|||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(signal.(func(*string, int64) int64)(&retS, int64(maxSize)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
retS := cGoUnpackString(data)
|
||||
ret := C.longlong(NewQSerialPortFromPointer(ptr).ReadDataDefault(&retS, int64(maxSize)))
|
||||
if ret > 0 {
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer(C.CString(retS)), C.size_t(ret))
|
||||
C.memcpy(unsafe.Pointer(data.data), unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&retS)).Data), C.size_t(ret))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue