Fix Issue #21: automatic calculation of alignment padding after lists
This commit is contained in:
@@ -408,7 +408,7 @@ func (v ModeInfo) Bytes() []byte {
|
||||
xgb.Put32(buf[b:], v.Privsize)
|
||||
b += 4
|
||||
|
||||
return buf
|
||||
return buf[:b]
|
||||
}
|
||||
|
||||
// ModeInfoListBytes writes a list of ModeInfo values to a byte slice.
|
||||
@@ -676,7 +676,7 @@ func addModeLineRequest(c *xgb.Conn, Screen uint32, Dotclock Dotclock, Hdisplay
|
||||
b += 12 // padding
|
||||
|
||||
copy(buf[b:], Private[:Privsize])
|
||||
b += xgb.Pad(int(Privsize))
|
||||
b += int(Privsize)
|
||||
|
||||
return buf
|
||||
}
|
||||
@@ -774,7 +774,7 @@ func deleteModeLineRequest(c *xgb.Conn, Screen uint32, Dotclock Dotclock, Hdispl
|
||||
b += 4
|
||||
|
||||
copy(buf[b:], Private[:Privsize])
|
||||
b += xgb.Pad(int(Privsize))
|
||||
b += int(Privsize)
|
||||
|
||||
return buf
|
||||
}
|
||||
@@ -956,7 +956,6 @@ func getDotClocksReply(buf []byte) *GetDotClocksReply {
|
||||
v.Clock[i] = xgb.Get32(buf[b:])
|
||||
b += 4
|
||||
}
|
||||
b = xgb.Pad(b)
|
||||
|
||||
return v
|
||||
}
|
||||
@@ -1120,9 +1119,11 @@ type GetGammaRampReply struct {
|
||||
// padding: 1 bytes
|
||||
Size uint16
|
||||
// padding: 22 bytes
|
||||
Red []uint16 // size: xgb.Pad((((int(Size) + 1) & -2) * 2))
|
||||
Red []uint16 // size: xgb.Pad((((int(Size) + 1) & -2) * 2))
|
||||
// alignment gap to multiple of 2
|
||||
Green []uint16 // size: xgb.Pad((((int(Size) + 1) & -2) * 2))
|
||||
Blue []uint16 // size: xgb.Pad((((int(Size) + 1) & -2) * 2))
|
||||
// alignment gap to multiple of 2
|
||||
Blue []uint16 // size: xgb.Pad((((int(Size) + 1) & -2) * 2))
|
||||
}
|
||||
|
||||
// Reply blocks and returns the reply data for a GetGammaRamp request.
|
||||
@@ -1160,21 +1161,22 @@ func getGammaRampReply(buf []byte) *GetGammaRampReply {
|
||||
v.Red[i] = xgb.Get16(buf[b:])
|
||||
b += 2
|
||||
}
|
||||
b = xgb.Pad(b)
|
||||
|
||||
b = (b + 1) & ^1 // alignment gap
|
||||
|
||||
v.Green = make([]uint16, ((int(v.Size) + 1) & -2))
|
||||
for i := 0; i < int(((int(v.Size) + 1) & -2)); i++ {
|
||||
v.Green[i] = xgb.Get16(buf[b:])
|
||||
b += 2
|
||||
}
|
||||
b = xgb.Pad(b)
|
||||
|
||||
b = (b + 1) & ^1 // alignment gap
|
||||
|
||||
v.Blue = make([]uint16, ((int(v.Size) + 1) & -2))
|
||||
for i := 0; i < int(((int(v.Size) + 1) & -2)); i++ {
|
||||
v.Blue[i] = xgb.Get16(buf[b:])
|
||||
b += 2
|
||||
}
|
||||
b = xgb.Pad(b)
|
||||
|
||||
return v
|
||||
}
|
||||
@@ -1413,7 +1415,7 @@ func getModeLineReply(buf []byte) *GetModeLineReply {
|
||||
|
||||
v.Private = make([]byte, v.Privsize)
|
||||
copy(v.Private[:v.Privsize], buf[b:])
|
||||
b += xgb.Pad(int(v.Privsize))
|
||||
b += int(v.Privsize)
|
||||
|
||||
return v
|
||||
}
|
||||
@@ -1479,7 +1481,8 @@ type GetMonitorReply struct {
|
||||
NumHsync byte
|
||||
NumVsync byte
|
||||
// padding: 20 bytes
|
||||
Hsync []Syncrange // size: xgb.Pad((int(NumHsync) * 4))
|
||||
Hsync []Syncrange // size: xgb.Pad((int(NumHsync) * 4))
|
||||
// alignment gap to multiple of 4
|
||||
Vsync []Syncrange // size: xgb.Pad((int(NumVsync) * 4))
|
||||
Vendor string // size: xgb.Pad((int(VendorLength) * 1))
|
||||
AlignmentPad []byte // size: xgb.Pad(((((int(VendorLength) + 3) & -4) - int(VendorLength)) * 1))
|
||||
@@ -1530,14 +1533,14 @@ func getMonitorReply(buf []byte) *GetMonitorReply {
|
||||
v.Hsync[i] = Syncrange(xgb.Get32(buf[b:]))
|
||||
b += 4
|
||||
}
|
||||
b = xgb.Pad(b)
|
||||
|
||||
b = (b + 3) & ^3 // alignment gap
|
||||
|
||||
v.Vsync = make([]Syncrange, v.NumVsync)
|
||||
for i := 0; i < int(v.NumVsync); i++ {
|
||||
v.Vsync[i] = Syncrange(xgb.Get32(buf[b:]))
|
||||
b += 4
|
||||
}
|
||||
b = xgb.Pad(b)
|
||||
|
||||
{
|
||||
byteString := make([]byte, v.VendorLength)
|
||||
@@ -1548,7 +1551,7 @@ func getMonitorReply(buf []byte) *GetMonitorReply {
|
||||
|
||||
v.AlignmentPad = make([]byte, (((int(v.VendorLength) + 3) & -4) - int(v.VendorLength)))
|
||||
copy(v.AlignmentPad[:(((int(v.VendorLength)+3)&-4)-int(v.VendorLength))], buf[b:])
|
||||
b += xgb.Pad(int((((int(v.VendorLength) + 3) & -4) - int(v.VendorLength))))
|
||||
b += int((((int(v.VendorLength) + 3) & -4) - int(v.VendorLength)))
|
||||
|
||||
{
|
||||
byteString := make([]byte, v.ModelLength)
|
||||
@@ -1922,7 +1925,7 @@ func modModeLineRequest(c *xgb.Conn, Screen uint32, Hdisplay uint16, Hsyncstart
|
||||
b += 4
|
||||
|
||||
copy(buf[b:], Private[:Privsize])
|
||||
b += xgb.Pad(int(Privsize))
|
||||
b += int(Privsize)
|
||||
|
||||
return buf
|
||||
}
|
||||
@@ -2178,7 +2181,7 @@ func (cook SetGammaRampCookie) Check() error {
|
||||
// Write request to wire for SetGammaRamp
|
||||
// setGammaRampRequest writes a SetGammaRamp request to a byte slice.
|
||||
func setGammaRampRequest(c *xgb.Conn, Screen uint16, Size uint16, Red []uint16, Green []uint16, Blue []uint16) []byte {
|
||||
size := xgb.Pad((((8 + xgb.Pad((((int(Size) + 1) & -2) * 2))) + xgb.Pad((((int(Size) + 1) & -2) * 2))) + xgb.Pad((((int(Size) + 1) & -2) * 2))))
|
||||
size := xgb.Pad((((((8 + xgb.Pad((((int(Size) + 1) & -2) * 2))) + 2) + xgb.Pad((((int(Size) + 1) & -2) * 2))) + 2) + xgb.Pad((((int(Size) + 1) & -2) * 2))))
|
||||
b := 0
|
||||
buf := make([]byte, size)
|
||||
|
||||
@@ -2188,7 +2191,7 @@ func setGammaRampRequest(c *xgb.Conn, Screen uint16, Size uint16, Red []uint16,
|
||||
buf[b] = 18 // request opcode
|
||||
b += 1
|
||||
|
||||
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
||||
blen := b
|
||||
b += 2
|
||||
|
||||
xgb.Put16(buf[b:], Screen)
|
||||
@@ -2201,21 +2204,24 @@ func setGammaRampRequest(c *xgb.Conn, Screen uint16, Size uint16, Red []uint16,
|
||||
xgb.Put16(buf[b:], Red[i])
|
||||
b += 2
|
||||
}
|
||||
b = xgb.Pad(b)
|
||||
|
||||
b = (b + 1) & ^1 // alignment gap
|
||||
|
||||
for i := 0; i < int(((int(Size) + 1) & -2)); i++ {
|
||||
xgb.Put16(buf[b:], Green[i])
|
||||
b += 2
|
||||
}
|
||||
b = xgb.Pad(b)
|
||||
|
||||
b = (b + 1) & ^1 // alignment gap
|
||||
|
||||
for i := 0; i < int(((int(Size) + 1) & -2)); i++ {
|
||||
xgb.Put16(buf[b:], Blue[i])
|
||||
b += 2
|
||||
}
|
||||
b = xgb.Pad(b)
|
||||
|
||||
return buf
|
||||
b = xgb.Pad(b)
|
||||
xgb.Put16(buf[blen:], uint16(b/4)) // write request size in 4-byte units
|
||||
return buf[:b]
|
||||
}
|
||||
|
||||
// SetViewPortCookie is a cookie used only for SetViewPort requests.
|
||||
@@ -2432,7 +2438,7 @@ func switchToModeRequest(c *xgb.Conn, Screen uint32, Dotclock Dotclock, Hdisplay
|
||||
b += 4
|
||||
|
||||
copy(buf[b:], Private[:Privsize])
|
||||
b += xgb.Pad(int(Privsize))
|
||||
b += int(Privsize)
|
||||
|
||||
return buf
|
||||
}
|
||||
@@ -2566,7 +2572,7 @@ func validateModeLineRequest(c *xgb.Conn, Screen uint32, Dotclock Dotclock, Hdis
|
||||
b += 4
|
||||
|
||||
copy(buf[b:], Private[:Privsize])
|
||||
b += xgb.Pad(int(Privsize))
|
||||
b += int(Privsize)
|
||||
|
||||
return buf
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user