1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
package main
// functions to import and export the protobuf
// data to and from config files
import (
"errors"
"fmt"
"os"
"path/filepath"
"go.wit.com/log"
)
func (m *Portmaps) ConfigSave() error {
if m == nil {
return fmt.Errorf("ConfigSave() nil")
}
s := m.FormatTEXT()
log.Info("proto.Marshal() worked len", len(s))
configWrite(argv.Config, []byte(s))
return nil
}
func ConfigLoad() *Portmaps {
var fullname string
if os.Getenv("CLOUD_HOME") != "" {
fullname = filepath.Join(os.Getenv("CLOUD_HOME"), "gus.text")
if argv.Config == "" {
argv.Config = fullname
}
}
if argv.Config != "" {
fullname = argv.Config
}
if fullname == "" {
homeDir, _ := os.UserHomeDir()
fullname = filepath.Join(homeDir, ".config/cloud", "gus.text")
argv.Config = fullname
}
var data []byte
var err error
if data, err = loadFile("gus.text"); err != nil {
log.Warn("gus.text failed to load", err)
// something went wrong loading the file
return nil
}
if data == nil {
return nil
}
p := new(Portmaps)
if err = p.UnmarshalTEXT(data); err != nil {
log.Warn("unmarshal failed on gus.text config file", err)
return nil
}
log.Log(INFO, "gus.ConfigLoad() has", p.Len(), "port mappings")
return p
}
/*
func (m *Portmaps) ConfigLoad() error {
var fullname string
if m == nil {
return errors.New("It's not safe to run ConfigLoad() on a nil ?")
}
if os.Getenv("CLOUD_HOME") != "" {
fullname = filepath.Join(os.Getenv("CLOUD_HOME"), "gus.text")
if argv.Config == "" {
argv.Config = fullname
}
}
if argv.Config != "" {
fullname = argv.Config
}
if fullname == "" {
homeDir, _ := os.UserHomeDir()
fullname = filepath.Join(homeDir, ".config/cloud", "gus.text")
argv.Config = fullname
}
var data []byte
var err error
if data, err = loadFile(); err != nil {
// something went wrong loading the file
return err
}
if data != nil {
if err = proto.Unmarshal(data, m); err != nil {
log.Warn("broken gus.text config file", "gus.text")
return err
}
return nil
}
log.Log(INFO, "gus.ConfigLoad() has", m.Len(), "port mappings")
return nil
}
*/
func loadFile(fullname string) ([]byte, error) {
data, err := os.ReadFile(fullname)
if errors.Is(err, os.ErrNotExist) {
// if file does not exist, just return nil. this
return nil, nil
}
if err != nil {
// log.Info("open config file :", err)
return nil, err
}
return data, nil
}
func (m *Portmaps) loadFile(fullname string) ([]byte, error) {
data, err := os.ReadFile(fullname)
if err != nil {
// log.Info("open config file :", err)
return nil, err
}
return data, nil
}
func configWrite(fullname string, data []byte) error {
if _, base := filepath.Split(fullname); base == "" {
return fmt.Errorf("--config option not set")
}
cfgfile, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
defer cfgfile.Close()
if err != nil {
log.Warn("open config file :", err)
return err
}
cfgfile.Write(data)
return nil
}
func (m *Portmaps) configWrite(fullname string, data []byte) error {
if _, base := filepath.Split(fullname); base == "" {
return fmt.Errorf("--config option not set")
}
cfgfile, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
defer cfgfile.Close()
if err != nil {
log.Warn("open config file :", err)
return err
}
cfgfile.Write(data)
return nil
}
|