mirror of
https://github.com/lionsoul2014/ip2region.git
synced 2025-12-08 19:25:22 +00:00
add version flag for source ip editor
This commit is contained in:
parent
33beaf96c9
commit
9cbcca588a
@ -202,6 +202,7 @@ func genDb() {
|
||||
return
|
||||
} else if v, err := xdb.VersionFromName(ipVersion); err != nil {
|
||||
slog.Error("failed to parse version name", "error", err)
|
||||
return
|
||||
} else {
|
||||
version = v
|
||||
}
|
||||
@ -412,6 +413,7 @@ func testBench() {
|
||||
return
|
||||
} else if v, err := xdb.VersionFromName(ipVersion); err != nil {
|
||||
slog.Error("failed to parse version name", "error", err)
|
||||
return
|
||||
} else {
|
||||
version = v
|
||||
}
|
||||
@ -476,11 +478,13 @@ func testBench() {
|
||||
|
||||
func edit() {
|
||||
var err error
|
||||
var srcFile = ""
|
||||
var srcFile, ipVersion = "", ""
|
||||
var fErr = iterateFlags(func(key string, val string) error {
|
||||
switch key {
|
||||
case "src":
|
||||
srcFile = val
|
||||
case "version":
|
||||
ipVersion = val
|
||||
default:
|
||||
return fmt.Errorf("undefined option '%s=%s'\n", key, val)
|
||||
}
|
||||
@ -494,10 +498,23 @@ func edit() {
|
||||
if srcFile == "" {
|
||||
fmt.Printf("%s edit [command options]\n", os.Args[0])
|
||||
fmt.Printf("options:\n")
|
||||
fmt.Printf(" --src string source ip text file path\n")
|
||||
fmt.Printf(" --src string source ip text file path\n")
|
||||
fmt.Printf(" --version string IP version, options: ipv4/ipv6, specify this flag so you don't get confused \n")
|
||||
return
|
||||
}
|
||||
|
||||
// check and define the IP version
|
||||
var version *xdb.Version = nil
|
||||
if len(ipVersion) < 2 {
|
||||
slog.Error("please specify the ip version with flag --version, ipv4 or ipv6 ?")
|
||||
return
|
||||
} else if v, err := xdb.VersionFromName(ipVersion); err != nil {
|
||||
slog.Error("failed to parse version name", "error", err)
|
||||
return
|
||||
} else {
|
||||
version = v
|
||||
}
|
||||
|
||||
rExp, err := regexp.Compile("\\s+")
|
||||
if err != nil {
|
||||
fmt.Printf("failed to compile regexp: %s\n", err)
|
||||
@ -506,7 +523,7 @@ func edit() {
|
||||
|
||||
fmt.Printf("init the editor from source @ `%s` ... \n", srcFile)
|
||||
var tStart = time.Now()
|
||||
editor, err := xdb.NewEditor(srcFile)
|
||||
editor, err := xdb.NewEditor(version, srcFile)
|
||||
if err != nil {
|
||||
fmt.Printf("failed to init editor: %s", err)
|
||||
return
|
||||
|
||||
@ -14,6 +14,8 @@ import (
|
||||
)
|
||||
|
||||
type Editor struct {
|
||||
verison *Version
|
||||
|
||||
// source ip file
|
||||
srcPath string
|
||||
srcHandle *os.File
|
||||
@ -23,7 +25,7 @@ type Editor struct {
|
||||
segments *list.List
|
||||
}
|
||||
|
||||
func NewEditor(srcFile string) (*Editor, error) {
|
||||
func NewEditor(version *Version, srcFile string) (*Editor, error) {
|
||||
// check the src and dst file
|
||||
srcPath, err := filepath.Abs(srcFile)
|
||||
if err != nil {
|
||||
@ -36,6 +38,7 @@ func NewEditor(srcFile string) (*Editor, error) {
|
||||
}
|
||||
|
||||
e := &Editor{
|
||||
verison: version,
|
||||
srcPath: srcPath,
|
||||
srcHandle: srcHandle,
|
||||
toSave: false,
|
||||
@ -57,6 +60,11 @@ func (e *Editor) loadSegments() error {
|
||||
var iErr = IterateSegments(e.srcHandle, func(l string) {
|
||||
// do nothing here
|
||||
}, func(seg *Segment) error {
|
||||
// version check
|
||||
if len(seg.StartIP) != e.verison.Bytes {
|
||||
return fmt.Errorf("invalid ip segment(%s expected)", e.verison.Name)
|
||||
}
|
||||
|
||||
// check the continuity of the data segment
|
||||
if err := seg.AfterCheck(last); err != nil {
|
||||
return err
|
||||
@ -270,8 +278,9 @@ func (e *Editor) Save() error {
|
||||
continue
|
||||
}
|
||||
|
||||
var l = s.String()
|
||||
_, err = dstHandle.WriteString(fmt.Sprintf("%s\n", l))
|
||||
// var l = s.String()
|
||||
// _, err = dstHandle.WriteString(fmt.Sprintf("%s\n", l))
|
||||
_, err = fmt.Fprintln(dstHandle, s.String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user