Skip to content

Commit 11b01ab

Browse files
committed
some slight fixes
1 parent f0b3b8e commit 11b01ab

File tree

2 files changed

+36
-33
lines changed

2 files changed

+36
-33
lines changed

lib/cmd_metadata.go

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"encoding/json"
55
"errors"
66
"fmt"
7-
"os"
87
"strconv"
98
"strings"
109

@@ -77,14 +76,9 @@ func CmdMetadata(f CmdMetadataFlags, args []string, printHelp func()) error {
7776
return errors.New("format must be one of \"pretty\" or \"json\"")
7877
}
7978

80-
mmdbFile, err := os.Open(args[0])
81-
if err != nil {
82-
return fmt.Errorf("couldn't open mmdb file: %w", err)
83-
}
84-
defer mmdbFile.Close()
85-
79+
mmdbFile := args[0]
8680
// open tree.
87-
db, err := maxminddb.Open(args[0])
81+
db, err := maxminddb.Open(mmdbFile)
8882
if err != nil {
8983
return fmt.Errorf("couldn't open mmdb file: %w", err)
9084
}
@@ -116,7 +110,6 @@ func CmdMetadata(f CmdMetadataFlags, args []string, printHelp func()) error {
116110
return fmt.Errorf("couldn't process the mmdb file: %w", err)
117111
}
118112
}
119-
120113
metadataSectionStartOffset = int(offset) + len(MetadataStartMarker)
121114

122115
if f.Format == "pretty" {
@@ -135,7 +128,6 @@ func CmdMetadata(f CmdMetadataFlags, args []string, printHelp func()) error {
135128
}
136129

137130
printline := printlineGen("", "13")
138-
139131
printline("Binary Format", binaryFmt, "")
140132
printline("Database Type", mdFromLib.DatabaseType, "")
141133
printline("IP Version", strconv.Itoa(int(mdFromLib.IPVersion)), "")
@@ -186,7 +178,7 @@ func CmdMetadata(f CmdMetadataFlags, args []string, printHelp func()) error {
186178
NodeCount uint `json:"node_count"`
187179
TreeSize uint `json:"tree_size"`
188180
DataSectionSize uint `json:"data_section_size"`
189-
TypeSize *TypeSizes `json:"type_size,omitempty"`
181+
TypeSize *TypeSizes `json:"data_type_sizes,omitempty"`
190182
DataSectionStartOffset uint `json:"data_section_start_offset"`
191183
DataSectionEndOffset uint `json:"data_section_end_offset"`
192184
MetadataStartOffset uint `json:"metadata_section_start_offset"`

lib/utils.go

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -68,16 +68,22 @@ func mapInterfaceToStr(m map[string]interface{}) map[string]string {
6868
return retVal
6969
}
7070

71-
func findSectionSeparator(mmdbFile *os.File, sep string) (int64, error) {
72-
fileInfo, err := mmdbFile.Stat()
71+
func findSectionSeparator(mmdbFile string, sep string) (int64, error) {
72+
file, err := os.Open(mmdbFile)
73+
if err != nil {
74+
return 0, fmt.Errorf("couldn't open mmdb file: %w", err)
75+
}
76+
defer file.Close()
77+
78+
fileInfo, err := file.Stat()
7379
if err != nil {
7480
return 0, err
7581
}
7682

7783
fileSize := fileInfo.Size()
7884

7985
// Map the mmdb file into memory.
80-
mmap, err := syscall.Mmap(int(mmdbFile.Fd()), 0, int(fileSize), syscall.PROT_READ, syscall.MAP_SHARED)
86+
mmap, err := syscall.Mmap(int(file.Fd()), 0, int(fileSize), syscall.PROT_READ, syscall.MAP_SHARED)
8187
if err != nil {
8288
return 0, err
8389
}
@@ -120,19 +126,25 @@ type TypeSizes struct {
120126
Utf8StringSize int64 `json:"utf8_string_size"`
121127
DoubleSize int64 `json:"double_size"`
122128
BytesSize int64 `json:"bytes_size"`
123-
Unsigned16bitIntSize int64 `json:"unsigned_16-bit_int_size"`
124-
Unsigned32bitIntSize int64 `json:"unsigned_32-bit_int_size"`
125-
Signed32bitIntSize int64 `json:"signed_32-bit_int_size"`
126-
Unsigned64bitIntSize int64 `json:"unsigned_64-bit_int_size"`
127-
Unsigned128bitIntSize int64 `json:"unsigned_128-bit_int_size"`
129+
Unsigned16bitIntSize int64 `json:"unsigned_16bit_int_size"`
130+
Unsigned32bitIntSize int64 `json:"unsigned_32bit_int_size"`
131+
Signed32bitIntSize int64 `json:"signed_32bit_int_size"`
132+
Unsigned64bitIntSize int64 `json:"unsigned_64bit_int_size"`
133+
Unsigned128bitIntSize int64 `json:"unsigned_128bit_int_size"`
128134
MapKeyValueCount int64 `json:"map_key_value_pair_count"`
129135
ArrayLength int64 `json:"array_length"`
130136
FloatSize int64 `json:"float_size"`
131137
}
132138

133-
func traverseDataSection(mmdbFile *os.File, startOffset int64, endOffset int64) (TypeSizes, error) {
139+
func traverseDataSection(mmdbFile string, startOffset int64, endOffset int64) (TypeSizes, error) {
140+
file, err := os.Open(mmdbFile)
141+
if err != nil {
142+
return TypeSizes{}, fmt.Errorf("couldn't open mmdb file: %w", err)
143+
}
144+
defer file.Close()
145+
134146
// Go to the start offset of the data section.
135-
_, err := mmdbFile.Seek(startOffset, 0)
147+
_, err = file.Seek(startOffset, 0)
136148
if err != nil {
137149
return TypeSizes{}, err
138150
}
@@ -142,7 +154,7 @@ func traverseDataSection(mmdbFile *os.File, startOffset int64, endOffset int64)
142154
// Read and process bytes until the end offset is reached.
143155
for offset := startOffset; offset < endOffset; {
144156
var controlByte [1]byte
145-
_, err := mmdbFile.Read(controlByte[:])
157+
_, err := file.Read(controlByte[:])
146158
if err != nil {
147159
return TypeSizes{}, err
148160
}
@@ -156,33 +168,33 @@ func traverseDataSection(mmdbFile *os.File, startOffset int64, endOffset int64)
156168
if dataType == 0 {
157169
// Read actual type number from the next byte
158170
var extendedTypeByte [1]byte
159-
_, err := mmdbFile.Read(extendedTypeByte[:])
171+
_, err := file.Read(extendedTypeByte[:])
160172
if err != nil {
161173
return TypeSizes{}, fmt.Errorf("couldn't read the file: %v", err)
162174
}
163175
offset++
164176

165177
switch extendedTypeByte[0] {
166178
case 1: // unsigned 32-bit int.
167-
payloadSize, offset, err = payloadCalculation(mmdbFile, payloadSize, offset)
179+
payloadSize, offset, err = payloadCalculation(file, payloadSize, offset)
168180
if err != nil {
169181
return TypeSizes{}, fmt.Errorf("couldn't read the file: %v", err)
170182
}
171183
typeSizes.Signed32bitIntSize += int64(payloadSize)
172184
case 2: // unsigned 64-bit int.
173-
payloadSize, offset, err = payloadCalculation(mmdbFile, payloadSize, offset)
185+
payloadSize, offset, err = payloadCalculation(file, payloadSize, offset)
174186
if err != nil {
175187
return TypeSizes{}, fmt.Errorf("couldn't read the file: %v", err)
176188
}
177189
typeSizes.Unsigned64bitIntSize += int64(payloadSize)
178190
case 3: // unsigned 128-bit int.
179-
payloadSize, offset, err = payloadCalculation(mmdbFile, payloadSize, offset)
191+
payloadSize, offset, err = payloadCalculation(file, payloadSize, offset)
180192
if err != nil {
181193
return TypeSizes{}, fmt.Errorf("couldn't read the file: %v", err)
182194
}
183195
typeSizes.Unsigned128bitIntSize += int64(payloadSize)
184196
case 4: // array.
185-
payloadSize, offset, err = payloadCalculation(mmdbFile, payloadSize, offset)
197+
payloadSize, offset, err = payloadCalculation(file, payloadSize, offset)
186198
if err != nil {
187199
return TypeSizes{}, fmt.Errorf("couldn't read the file: %v", err)
188200
}
@@ -204,40 +216,39 @@ func traverseDataSection(mmdbFile *os.File, startOffset int64, endOffset int64)
204216
typeSizes.PointerSize += 3
205217
}
206218
case 2: // UTF-8 string.
207-
payloadSize, offset, err = payloadCalculation(mmdbFile, payloadSize, offset)
219+
payloadSize, offset, err = payloadCalculation(file, payloadSize, offset)
208220
if err != nil {
209221
return TypeSizes{}, fmt.Errorf("couldn't read the file: %v", err)
210222
}
211223
typeSizes.Utf8StringSize += int64(payloadSize)
212224
case 3: // Double.
213225
typeSizes.DoubleSize += 8
214226
case 4: // Byte.
215-
payloadSize, offset, err = payloadCalculation(mmdbFile, payloadSize, offset)
227+
payloadSize, offset, err = payloadCalculation(file, payloadSize, offset)
216228
if err != nil {
217229
return TypeSizes{}, fmt.Errorf("couldn't read the file: %v", err)
218230
}
219231
typeSizes.BytesSize += int64(payloadSize)
220232
case 5: // unsigned 16-bit int.
221-
payloadSize, offset, err = payloadCalculation(mmdbFile, payloadSize, offset)
233+
payloadSize, offset, err = payloadCalculation(file, payloadSize, offset)
222234
if err != nil {
223235
return TypeSizes{}, fmt.Errorf("couldn't read the file: %v", err)
224236
}
225237
typeSizes.Unsigned16bitIntSize += int64(payloadSize)
226238
case 6: // unsigned 32-bit int.
227-
payloadSize, offset, err = payloadCalculation(mmdbFile, payloadSize, offset)
239+
payloadSize, offset, err = payloadCalculation(file, payloadSize, offset)
228240
if err != nil {
229241
return TypeSizes{}, fmt.Errorf("couldn't read the file: %v", err)
230242
}
231243
typeSizes.Unsigned32bitIntSize += int64(payloadSize)
232244
case 7: // map.
233-
payloadSize, offset, err = payloadCalculation(mmdbFile, payloadSize, offset)
245+
payloadSize, offset, err = payloadCalculation(file, payloadSize, offset)
234246
if err != nil {
235247
return TypeSizes{}, fmt.Errorf("couldn't read the file: %v", err)
236248
}
237249
typeSizes.MapKeyValueCount += int64(payloadSize)
238250
}
239251
}
240-
241252
}
242253

243254
return typeSizes, nil

0 commit comments

Comments
 (0)