mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-01 00:23:56 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // +build windows
 | |
| 
 | |
| package system
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"path/filepath"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| // DefaultPathEnv is deliberately empty on Windows as the default path will be set by
 | |
| // the container. Docker has no context of what the default path should be.
 | |
| const DefaultPathEnv = ""
 | |
| 
 | |
| // CheckSystemDriveAndRemoveDriveLetter verifies and manipulates a Windows path.
 | |
| // This is used, for example, when validating a user provided path in docker cp.
 | |
| // If a drive letter is supplied, it must be the system drive. The drive letter
 | |
| // is always removed. Also, it translates it to OS semantics (IOW / to \). We
 | |
| // need the path in this syntax so that it can ultimately be contatenated with
 | |
| // a Windows long-path which doesn't support drive-letters. Examples:
 | |
| // C:			--> Fail
 | |
| // C:\			--> \
 | |
| // a			--> a
 | |
| // /a			--> \a
 | |
| // d:\			--> Fail
 | |
| func CheckSystemDriveAndRemoveDriveLetter(path string) (string, error) {
 | |
| 	if len(path) == 2 && string(path[1]) == ":" {
 | |
| 		return "", fmt.Errorf("No relative path specified in %q", path)
 | |
| 	}
 | |
| 	if !filepath.IsAbs(path) || len(path) < 2 {
 | |
| 		return filepath.FromSlash(path), nil
 | |
| 	}
 | |
| 	if string(path[1]) == ":" && !strings.EqualFold(string(path[0]), "c") {
 | |
| 		return "", fmt.Errorf("The specified path is not on the system drive (C:)")
 | |
| 	}
 | |
| 	return filepath.FromSlash(path[2:]), nil
 | |
| }
 | 
