k3s/vendor/github.com/erikdubbelboer/gspt/gspt.go

72 lines
1.2 KiB
Go

package gspt
/*
#include "setproctitle.h"
*/
import "C"
import (
"os"
"strings"
"unsafe"
)
const (
// These values must match the return values for spt_init1() used in C.
HaveNone = 0
HaveNative = 1
HaveReplacement = 2
)
var (
HaveSetProcTitle int
HaveSetProcTitleFast int
)
func init() {
HaveSetProcTitle = int(C.spt_init1())
HaveSetProcTitleFast = int(C.spt_fast_init1())
if HaveSetProcTitle == HaveReplacement {
newArgs := make([]string, len(os.Args))
for i, s := range os.Args {
// Use cgo to force go to make copies of the strings.
cs := C.CString(s)
newArgs[i] = C.GoString(cs)
C.free(unsafe.Pointer(cs))
}
os.Args = newArgs
env := os.Environ()
for _, kv := range env {
skv := strings.SplitN(kv, "=", 2)
os.Setenv(skv[0], skv[1])
}
argc := C.int(len(os.Args))
arg0 := C.CString(os.Args[0])
defer C.free(unsafe.Pointer(arg0))
C.spt_init2(argc, arg0)
// Restore the original title.
SetProcTitle(os.Args[0])
}
}
func SetProcTitle(title string) {
cs := C.CString(title)
defer C.free(unsafe.Pointer(cs))
C.spt_setproctitle(cs)
}
func SetProcTitleFast(title string) {
cs := C.CString(title)
defer C.free(unsafe.Pointer(cs))
C.spt_setproctitle_fast(cs)
}