// Copyright 2015 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.

// +build darwin dragonfly freebsd linux netbsd openbsd solaris

package main

// Test a shared library created by -buildmode=c-shared that does not
// export anything.

import (
	"fmt"
	"os"
	"syscall"
)

// To test this we want to communicate between the main program and
// the shared library without using any exported symbols.  The init
// function creates a pipe and Dups the read end to a known number
// that the C code can also use.

const (
	fd = 10
)

func init() {
	var p [2]int
	if e := syscall.Pipe(p[0:]); e != nil {
		fmt.Fprintf(os.Stderr, "pipe: %v\n", e)
		os.Exit(2)
	}

	if e := syscall.Dup2(p[0], fd); e != nil {
		fmt.Fprintf(os.Stderr, "dup2: %v\n", e)
		os.Exit(2)
	}

	const str = "PASS"
	if n, e := syscall.Write(p[1], []byte(str)); e != nil || n != len(str) {
		fmt.Fprintf(os.Stderr, "write: %d %v\n", n, e)
		os.Exit(2)
	}

	if e := syscall.Close(p[1]); e != nil {
		fmt.Fprintf(os.Stderr, "close: %v\n", e)
		os.Exit(2)
	}
}

func main() {
}
