9fans.net/go@v0.0.5/plan9/client/dial.go (about)

     1  // +build !plan9
     2  
     3  package client
     4  
     5  import (
     6  	"fmt"
     7  	"net"
     8  	"os"
     9  	"regexp"
    10  	"strings"
    11  )
    12  
    13  func Dial(network, addr string) (*Conn, error) {
    14  	c, err := net.Dial(network, addr)
    15  	if err != nil {
    16  		return nil, err
    17  	}
    18  	return NewConn(c)
    19  }
    20  
    21  func DialService(service string) (*Conn, error) {
    22  	ns := Namespace()
    23  	return Dial("unix", ns+"/"+service)
    24  }
    25  
    26  func Mount(network, addr string) (*Fsys, error) {
    27  	c, err := Dial(network, addr)
    28  	if err != nil {
    29  		return nil, err
    30  	}
    31  	fsys, err := c.Attach(nil, getuser(), "")
    32  	if err != nil {
    33  		c.Close()
    34  	}
    35  	return fsys, err
    36  }
    37  
    38  func MountService(service string) (*Fsys, error) {
    39  	c, err := DialService(service)
    40  	if err != nil {
    41  		return nil, err
    42  	}
    43  	fsys, err := c.Attach(nil, getuser(), "")
    44  	if err != nil {
    45  		c.Close()
    46  	}
    47  	return fsys, err
    48  }
    49  
    50  func MountServiceAname(service, aname string) (*Fsys, error) {
    51  	c, err := DialService(service)
    52  	if err != nil {
    53  		return nil, err
    54  	}
    55  	fsys, err := c.Attach(nil, getuser(), aname)
    56  	if err != nil {
    57  		c.Close()
    58  	}
    59  	return fsys, err
    60  }
    61  
    62  var dotZero = regexp.MustCompile(`\A(.*:\d+)\.0\z`)
    63  
    64  // Namespace returns the path to the name space directory.
    65  func Namespace() string {
    66  	ns := os.Getenv("NAMESPACE")
    67  	if ns != "" {
    68  		return ns
    69  	}
    70  
    71  	disp := os.Getenv("DISPLAY")
    72  	if disp == "" {
    73  		// No $DISPLAY? Use :0.0 for non-X11 GUI (OS X).
    74  		disp = ":0.0"
    75  	}
    76  
    77  	// Canonicalize: xxx:0.0 => xxx:0.
    78  	if m := dotZero.FindStringSubmatch(disp); m != nil {
    79  		disp = m[1]
    80  	}
    81  
    82  	// Turn /tmp/launch/:0 into _tmp_launch_:0 (OS X 10.5).
    83  	disp = strings.Replace(disp, "/", "_", -1)
    84  
    85  	// NOTE: plan9port creates this directory on demand.
    86  	// Maybe someday we'll need to do that.
    87  
    88  	return fmt.Sprintf("/tmp/ns.%s.%s", os.Getenv("USER"), disp)
    89  }