Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/gorun
- // @author dlin at gmail
- // @license BSD 3-clause
- // check is target kernel config fit with specific config
- package main
- import (
- "bufio"
- "fmt"
- "io"
- "log"
- "os"
- "strings"
- )
- func GetFileLines(fileName string) ([]string, error) {
- f, err := os.Open(fileName)
- if err != nil {
- log.Fatalln(err)
- }
- defer f.Close()
- r := bufio.NewReader(f)
- var lines []string
- L_RD_LINE:
- for {
- line, isPrefix, err := r.ReadLine()
- if err == io.EOF {
- break
- }
- if err != nil {
- log.Fatalln(err)
- }
- for isPrefix {
- var ex_line []byte
- ex_line, isPrefix, err = r.ReadLine()
- if err == io.EOF {
- break L_RD_LINE
- }
- if err != nil {
- log.Fatalln(err)
- }
- line = append(line, ex_line...)
- }
- lines = append(lines, string(line))
- }
- return lines, nil
- }
- func getKeyFile(fileName string) map[string]string {
- lines, err := GetFileLines(fileName)
- if err != nil {
- log.Fatalln(err)
- }
- result := make(map[string]string)
- for _, line := range lines {
- line = strings.TrimSpace(line)
- if line != "" && !strings.HasPrefix(line, "#") {
- flds := strings.SplitN(line, "=", 2)
- key := strings.TrimSpace(flds[0])
- value := strings.TrimSpace(flds[1])
- result[key] = value
- }
- }
- return result
- }
- // compare key file, if fulfill all rules, return 0
- func compareKeyFile(keyFileName, configFileName string) int {
- keys := getKeyFile(keyFileName)
- config := getKeyFile(configFileName)
- var errCnt int
- for k, v := range keys {
- if cv, ok := config[k]; ok {
- if v != cv {
- fmt.Print(k, "=", v, " # original ", cv, "\n")
- errCnt++
- }
- } else {
- fmt.Print(k, "=", v, "\n")
- errCnt++
- }
- }
- return errCnt
- }
- func main() {
- log.SetFlags(log.Lshortfile)
- if len(os.Args) != 3 {
- fmt.Println(`Usage: kernel_config_diff.go <require.config> <kernel.config>
- eg. kernel_config_diff.go req.config linux_pf.config`)
- os.Exit(1)
- }
- os.Exit(compareKeyFile(os.Args[1], os.Args[2]))
- }
Advertisement
Add Comment
Please, Sign In to add comment