// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build netbsd || openbsd
// +build netbsd openbsd

package main

import (
	"fmt"
	"log"
	"os"
	"runtime"

	"golang.org/x/sys/unix"
)

func init() {
	switch runtime.GOOS {
	case "netbsd":
		setOSRlimit = setNetBSDRlimit
	case "openbsd":
		setOSRlimit = setOpenBSDRlimit
	}
}

// setNetBSDRlimit sets limits for NetBSD.
// See https://github.com/golang/go/issues/22871#issuecomment-346888363
func setNetBSDRlimit() error {
	limit := unix.Rlimit{
		Cur: unix.RLIM_INFINITY,
		Max: unix.RLIM_INFINITY,
	}
	if err := unix.Setrlimit(unix.RLIMIT_DATA, &limit); err != nil && os.Getuid() == 0 {
		return err
	}
	return nil
}

// setOpenBSDRlimit sets limits for OpenBSD.
// See https://go-review.googlesource.com/c/go/+/81876
func setOpenBSDRlimit() error {
	var lim unix.Rlimit
	if err := unix.Getrlimit(unix.RLIMIT_NOFILE, &lim); err != nil {
		return fmt.Errorf("getting initial rlimit: %v", err)
	}
	log.Printf("initial NOFILE rlimit: %+v", lim)

	lim.Cur = 32 << 10
	lim.Max = 32 << 10
	if err := unix.Setrlimit(unix.RLIMIT_NOFILE, &lim); err != nil && os.Getuid() == 0 {
		return fmt.Errorf("Setrlimit: %v", err)
	}

	if err := unix.Getrlimit(unix.RLIMIT_NOFILE, &lim); err != nil {
		return fmt.Errorf("getting updated rlimit: %v", err)
	}
	log.Printf("updated NOFILE rlimit: %+v", lim)

	return nil
}
