Skip to content

Commit d57d9a7

Browse files
committed
Avoid heap allocations in Htonl
1 parent facee9e commit d57d9a7

File tree

2 files changed

+17
-24
lines changed

2 files changed

+17
-24
lines changed

pkg/inet.go

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,17 @@
11
package rpmdb
22

33
import (
4-
"bytes"
54
"encoding/binary"
6-
"log"
75
)
86

97
func Htonl(val int32) int32 {
10-
buf := new(bytes.Buffer)
11-
if err := binary.Write(buf, binary.LittleEndian, val); err != nil {
12-
log.Println(err)
13-
return 0
14-
}
15-
16-
if err := binary.Read(buf, binary.BigEndian, &val); err != nil {
17-
log.Println(err)
18-
return 0
19-
}
20-
return val
8+
var buf [4]byte
9+
binary.LittleEndian.PutUint32(buf[:], uint32(val))
10+
return int32(binary.BigEndian.Uint32(buf[:]))
2111
}
2212

2313
func HtonlU(val uint32) uint32 {
24-
buf := new(bytes.Buffer)
25-
if err := binary.Write(buf, binary.LittleEndian, val); err != nil {
26-
log.Println(err)
27-
return 0
28-
}
29-
30-
if err := binary.Read(buf, binary.BigEndian, &val); err != nil {
31-
log.Println(err)
32-
return 0
33-
}
34-
return val
14+
var buf [4]byte
15+
binary.LittleEndian.PutUint32(buf[:], val)
16+
return binary.BigEndian.Uint32(buf[:])
3517
}

pkg/rpmdb_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,17 @@ func TestPackageList(t *testing.T) {
119119
}
120120
})
121121
}
122+
123+
for _, tt := range tests {
124+
allocs := testing.AllocsPerRun(10, func() {
125+
db, err := Open(tt.file)
126+
require.NoError(t, err)
127+
128+
_, err = db.ListPackages()
129+
require.NoError(t, err)
130+
})
131+
t.Logf("Allocations per run %q: %f", tt.name, allocs)
132+
}
122133
}
123134

124135
func TestRpmDB_Package(t *testing.T) {

0 commit comments

Comments
 (0)