...
Run Format

Source file src/internal/testenv/testenv_windows.go

Documentation: internal/testenv

  // Copyright 2016 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.
  
  package testenv
  
  import (
  	"io/ioutil"
  	"os"
  	"path/filepath"
  	"sync"
  	"syscall"
  )
  
  var symlinkOnce sync.Once
  var winSymlinkErr error
  
  func initWinHasSymlink() {
  	tmpdir, err := ioutil.TempDir("", "symtest")
  	if err != nil {
  		panic("failed to create temp directory: " + err.Error())
  	}
  	defer os.RemoveAll(tmpdir)
  
  	err = os.Symlink("target", filepath.Join(tmpdir, "symlink"))
  	if err != nil {
  		err = err.(*os.LinkError).Err
  		switch err {
  		case syscall.EWINDOWS, syscall.ERROR_PRIVILEGE_NOT_HELD:
  			winSymlinkErr = err
  		}
  	}
  }
  
  func hasSymlink() (ok bool, reason string) {
  	symlinkOnce.Do(initWinHasSymlink)
  
  	switch winSymlinkErr {
  	case nil:
  		return true, ""
  	case syscall.EWINDOWS:
  		return false, ": symlinks are not supported on your version of Windows"
  	case syscall.ERROR_PRIVILEGE_NOT_HELD:
  		return false, ": you don't have enough privileges to create symlinks"
  	}
  
  	return false, ""
  }
  

View as plain text