Skip to content

Commit

Permalink
Merge pull request #86 from sharkcz/endian
Browse files Browse the repository at this point in the history
make transport endian aware
  • Loading branch information
jsouthworth committed Jun 20, 2017
2 parents 012f3c2 + b931e55 commit 3725288
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
17 changes: 16 additions & 1 deletion transport_generic.go
Expand Up @@ -4,8 +4,23 @@ import (
"encoding/binary"
"errors"
"io"
"unsafe"
)

var nativeEndian binary.ByteOrder

func detectEndianness() binary.ByteOrder {
var x uint32 = 0x01020304
if *(*byte)(unsafe.Pointer(&x)) == 0x01 {
return binary.BigEndian
}
return binary.LittleEndian
}

func init() {
nativeEndian = detectEndianness()
}

type genericTransport struct {
io.ReadWriteCloser
}
Expand All @@ -31,5 +46,5 @@ func (t genericTransport) SendMessage(msg *Message) error {
return errors.New("dbus: unix fd passing not enabled")
}
}
return msg.EncodeTo(t, binary.LittleEndian)
return msg.EncodeTo(t, nativeEndian)
}
4 changes: 2 additions & 2 deletions transport_unix.go
Expand Up @@ -175,7 +175,7 @@ func (t *unixTransport) SendMessage(msg *Message) error {
msg.Headers[FieldUnixFDs] = MakeVariant(uint32(len(fds)))
oob := syscall.UnixRights(fds...)
buf := new(bytes.Buffer)
msg.EncodeTo(buf, binary.LittleEndian)
msg.EncodeTo(buf, nativeEndian)
n, oobn, err := t.UnixConn.WriteMsgUnix(buf.Bytes(), oob, nil)
if err != nil {
return err
Expand All @@ -184,7 +184,7 @@ func (t *unixTransport) SendMessage(msg *Message) error {
return io.ErrShortWrite
}
} else {
if err := msg.EncodeTo(t, binary.LittleEndian); err != nil {
if err := msg.EncodeTo(t, nativeEndian); err != nil {
return nil
}
}
Expand Down

0 comments on commit 3725288

Please sign in to comment.