func upgradeConfig(rc string, lines []string) { newrc := rc + ".upgrade" f, err := os.Create(newrc) if err != nil { fmt.Println("can't create upgraded config file") return } // Upgrade config. proxyId := 0 listenId := 0 w := bufio.NewWriter(f) for _, line := range lines { line := strings.TrimSpace(line) if line == "" || line[0] == '#' { w.WriteString(line + newLine) continue } v := strings.Split(line, "=") key := strings.TrimSpace(v[0]) switch key { case "listen": listen := listenProxy[listenId] listenId++ w.WriteString(listen.genConfig() + newLine) // comment out original w.WriteString("#" + line + newLine) case "httpParent", "shadowSocks", "socksParent": parent := parentProxy[proxyId] proxyId++ w.WriteString(parent.genConfig() + newLine) // comment out original w.WriteString("#" + line + newLine) case "httpUserPasswd", "shadowPasswd", "shadowMethod", "addrInPAC": // just comment out w.WriteString("#" + line + newLine) case "proxy": proxyId++ w.WriteString(line + newLine) default: w.WriteString(line + newLine) } } w.Flush() f.Close() // Must close file before renaming, otherwise will fail on windows. // Rename new and old config file. if err := os.Rename(rc, rc+"0.8"); err != nil { fmt.Println("can't backup config file for upgrade:", err) return } if err := os.Rename(newrc, rc); err != nil { fmt.Println("can't rename upgraded rc to original name:", err) return } }
func upgradeConfig(rc string, lines []string) { newrc := rc + ".upgrade" f, err := os.Create(newrc) if err != nil { errl.Println("can't create upgraded config file") return } defer f.Close() // Upgrade config. proxyId := 0 w := bufio.NewWriter(f) for _, line := range lines { line := strings.TrimSpace(line) if line == "" || line[0] == '#' { w.WriteString(line + newLine) continue } v := strings.Split(line, "=") key := strings.TrimSpace(v[0]) switch key { case "httpParent", "shadowSocks", "socksParent": parent := parentProxy[proxyId] proxyId++ // write out new proxy syntax w.WriteString(parent.genConfig() + newLine) // comment out original w.WriteString("#" + line + newLine) case "httpUserPasswd", "shadowPasswd", "shadowMethod": // just comment out w.WriteString("#" + line + newLine) default: w.WriteString(line + newLine) } } w.Flush() // Rename new and old config file. if err := os.Rename(rc, rc+version); err != nil { errl.Println("can't backup config file for upgrade") return } if err := os.Rename(newrc, rc); err != nil { errl.Println("can't rename upgraded rc to original name") return } }