aboutsummaryrefslogtreecommitdiff
path: root/nexgb/record/record.go
diff options
context:
space:
mode:
Diffstat (limited to 'nexgb/record/record.go')
-rw-r--r--nexgb/record/record.go35
1 files changed, 20 insertions, 15 deletions
diff --git a/nexgb/record/record.go b/nexgb/record/record.go
index 3777422..30be090 100644
--- a/nexgb/record/record.go
+++ b/nexgb/record/record.go
@@ -133,7 +133,7 @@ func (v ClientInfo) Bytes() []byte {
b += RangeListBytes(buf[b:], v.Ranges)
- return buf
+ return buf[:b]
}
// ClientInfoListBytes writes a list of ClientInfo values to a byte slice.
@@ -222,7 +222,7 @@ func (v ExtRange) Bytes() []byte {
b += len(structBytes)
}
- return buf
+ return buf[:b]
}
// ExtRangeListBytes writes a list of ExtRange values to a byte slice.
@@ -368,7 +368,7 @@ func (v Range) Bytes() []byte {
}
b += 1
- return buf
+ return buf[:b]
}
// RangeListBytes writes a list of Range values to a byte slice.
@@ -422,7 +422,7 @@ func (v Range16) Bytes() []byte {
xgb.Put16(buf[b:], v.Last)
b += 2
- return buf
+ return buf[:b]
}
// Range16ListBytes writes a list of Range16 values to a byte slice.
@@ -476,7 +476,7 @@ func (v Range8) Bytes() []byte {
buf[b] = v.Last
b += 1
- return buf
+ return buf[:b]
}
// Range8ListBytes writes a list of Range8 values to a byte slice.
@@ -551,7 +551,7 @@ func (cook CreateContextCookie) Check() error {
// Write request to wire for CreateContext
// createContextRequest writes a CreateContext request to a byte slice.
func createContextRequest(c *xgb.Conn, Context Context, ElementHeader ElementHeader, NumClientSpecs uint32, NumRanges uint32, ClientSpecs []ClientSpec, Ranges []Range) []byte {
- size := xgb.Pad(((20 + xgb.Pad((int(NumClientSpecs) * 4))) + xgb.Pad((int(NumRanges) * 24))))
+ size := xgb.Pad((((20 + xgb.Pad((int(NumClientSpecs) * 4))) + 4) + xgb.Pad((int(NumRanges) * 24))))
b := 0
buf := make([]byte, size)
@@ -561,7 +561,7 @@ func createContextRequest(c *xgb.Conn, Context Context, ElementHeader ElementHea
buf[b] = 1 // request opcode
b += 1
- xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ blen := b
b += 2
xgb.Put32(buf[b:], uint32(Context))
@@ -582,11 +582,14 @@ func createContextRequest(c *xgb.Conn, Context Context, ElementHeader ElementHea
xgb.Put32(buf[b:], uint32(ClientSpecs[i]))
b += 4
}
- b = xgb.Pad(b)
+
+ b = (b + 3) & ^3 // alignment gap
b += RangeListBytes(buf[b:], Ranges)
- return buf
+ b = xgb.Pad(b)
+ xgb.Put16(buf[blen:], uint16(b/4)) // write request size in 4-byte units
+ return buf[:b]
}
// DisableContextCookie is a cookie used only for DisableContext requests.
@@ -737,7 +740,7 @@ func enableContextReply(buf []byte) *EnableContextReply {
v.Data = make([]byte, (int(v.Length) * 4))
copy(v.Data[:(int(v.Length)*4)], buf[b:])
- b += xgb.Pad(int((int(v.Length) * 4)))
+ b += int((int(v.Length) * 4))
return v
}
@@ -1057,7 +1060,7 @@ func (cook RegisterClientsCookie) Check() error {
// Write request to wire for RegisterClients
// registerClientsRequest writes a RegisterClients request to a byte slice.
func registerClientsRequest(c *xgb.Conn, Context Context, ElementHeader ElementHeader, NumClientSpecs uint32, NumRanges uint32, ClientSpecs []ClientSpec, Ranges []Range) []byte {
- size := xgb.Pad(((20 + xgb.Pad((int(NumClientSpecs) * 4))) + xgb.Pad((int(NumRanges) * 24))))
+ size := xgb.Pad((((20 + xgb.Pad((int(NumClientSpecs) * 4))) + 4) + xgb.Pad((int(NumRanges) * 24))))
b := 0
buf := make([]byte, size)
@@ -1067,7 +1070,7 @@ func registerClientsRequest(c *xgb.Conn, Context Context, ElementHeader ElementH
buf[b] = 2 // request opcode
b += 1
- xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ blen := b
b += 2
xgb.Put32(buf[b:], uint32(Context))
@@ -1088,11 +1091,14 @@ func registerClientsRequest(c *xgb.Conn, Context Context, ElementHeader ElementH
xgb.Put32(buf[b:], uint32(ClientSpecs[i]))
b += 4
}
- b = xgb.Pad(b)
+
+ b = (b + 3) & ^3 // alignment gap
b += RangeListBytes(buf[b:], Ranges)
- return buf
+ b = xgb.Pad(b)
+ xgb.Put16(buf[blen:], uint16(b/4)) // write request size in 4-byte units
+ return buf[:b]
}
// UnregisterClientsCookie is a cookie used only for UnregisterClients requests.
@@ -1154,7 +1160,6 @@ func unregisterClientsRequest(c *xgb.Conn, Context Context, NumClientSpecs uint3
xgb.Put32(buf[b:], uint32(ClientSpecs[i]))
b += 4
}
- b = xgb.Pad(b)
return buf
}