mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-25 11:05:45 +00:00
ipn/conffile: don't depend on hujson on iOS/Android
Fixes #13772 Change-Id: I3ae03a5ee48c801f2e5ea12d1e54681df25d4604 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
91f58c5e63
commit
508980603b
@ -8,10 +8,11 @@
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"runtime"
|
||||||
|
|
||||||
"github.com/tailscale/hujson"
|
|
||||||
"tailscale.com/ipn"
|
"tailscale.com/ipn"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -39,8 +40,21 @@ func (c *Config) WantRunning() bool {
|
|||||||
// from the VM's metadata service's user-data field.
|
// from the VM's metadata service's user-data field.
|
||||||
const VMUserDataPath = "vm:user-data"
|
const VMUserDataPath = "vm:user-data"
|
||||||
|
|
||||||
|
// hujsonStandardize is set to hujson.Standardize by conffile_hujson.go on
|
||||||
|
// platforms that support config files.
|
||||||
|
var hujsonStandardize func([]byte) ([]byte, error)
|
||||||
|
|
||||||
// Load reads and parses the config file at the provided path on disk.
|
// Load reads and parses the config file at the provided path on disk.
|
||||||
func Load(path string) (*Config, error) {
|
func Load(path string) (*Config, error) {
|
||||||
|
switch runtime.GOOS {
|
||||||
|
case "ios", "android":
|
||||||
|
// compile-time for deadcode elimination
|
||||||
|
return nil, fmt.Errorf("config file loading not supported on %q", runtime.GOOS)
|
||||||
|
}
|
||||||
|
if hujsonStandardize == nil {
|
||||||
|
// Build tags are wrong in conffile_hujson.go
|
||||||
|
return nil, errors.New("[unexpected] config file loading not wired up")
|
||||||
|
}
|
||||||
var c Config
|
var c Config
|
||||||
c.Path = path
|
c.Path = path
|
||||||
var err error
|
var err error
|
||||||
@ -54,7 +68,7 @@ func Load(path string) (*Config, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
c.Std, err = hujson.Standardize(c.Raw)
|
c.Std, err = hujsonStandardize(c.Raw)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error parsing config file %s HuJSON/JSON: %w", path, err)
|
return nil, fmt.Errorf("error parsing config file %s HuJSON/JSON: %w", path, err)
|
||||||
}
|
}
|
||||||
|
20
ipn/conffile/conffile_hujson.go
Normal file
20
ipn/conffile/conffile_hujson.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
//go:build !ios && !android
|
||||||
|
|
||||||
|
package conffile
|
||||||
|
|
||||||
|
import "github.com/tailscale/hujson"
|
||||||
|
|
||||||
|
// Only link the hujson package on platforms that use it, to reduce binary size
|
||||||
|
// & memory a bit.
|
||||||
|
//
|
||||||
|
// (iOS and Android don't have config files)
|
||||||
|
|
||||||
|
// While the linker's deadcode mostly handles the hujson package today, this
|
||||||
|
// keeps us honest for the future.
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
hujsonStandardize = hujson.Standardize
|
||||||
|
}
|
@ -23,6 +23,7 @@ func TestDeps(t *testing.T) {
|
|||||||
"database/sql/driver": "iOS doesn't use an SQL database",
|
"database/sql/driver": "iOS doesn't use an SQL database",
|
||||||
"github.com/google/uuid": "see tailscale/tailscale#13760",
|
"github.com/google/uuid": "see tailscale/tailscale#13760",
|
||||||
"tailscale.com/clientupdate/distsign": "downloads via AppStore, not distsign",
|
"tailscale.com/clientupdate/distsign": "downloads via AppStore, not distsign",
|
||||||
|
"github.com/tailscale/hujson": "no config file support on iOS",
|
||||||
},
|
},
|
||||||
}.Check(t)
|
}.Check(t)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user