1// Copyright 2021 Tobias Klauser. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd
6// +build darwin dragonfly freebsd linux netbsd openbsd
7
8package sysconf
9
10import "os"
11
12func sysconfGeneric(name int) (int64, error) {
13	// POSIX default values
14	if sc, err := sysconfPOSIX(name); err == nil {
15		return sc, nil
16	}
17
18	switch name {
19	case SC_BC_BASE_MAX:
20		return _BC_BASE_MAX, nil
21	case SC_BC_DIM_MAX:
22		return _BC_DIM_MAX, nil
23	case SC_BC_SCALE_MAX:
24		return _BC_SCALE_MAX, nil
25	case SC_BC_STRING_MAX:
26		return _BC_STRING_MAX, nil
27	case SC_COLL_WEIGHTS_MAX:
28		return _COLL_WEIGHTS_MAX, nil
29	case SC_EXPR_NEST_MAX:
30		return _EXPR_NEST_MAX, nil
31	case SC_HOST_NAME_MAX:
32		return _HOST_NAME_MAX, nil
33	case SC_LINE_MAX:
34		return _LINE_MAX, nil
35	case SC_LOGIN_NAME_MAX:
36		return _LOGIN_NAME_MAX, nil
37	case SC_PAGESIZE: // same as SC_PAGE_SIZE
38		return int64(os.Getpagesize()), nil
39	case SC_RE_DUP_MAX:
40		return _RE_DUP_MAX, nil
41	case SC_SYMLOOP_MAX:
42		return _SYMLOOP_MAX, nil
43	}
44
45	return -1, errInvalid
46}
47