package smb2

import (
	
	
	
	
)

var NORMALIZE_PATH = true // normalize path arguments automatically

const PathSeparator = '\\'

func ( uint8) bool {
	return  == '\\'
}

func base( string) string {
	 := len()
	for  > 0 && IsPathSeparator([-1]) {
		--
	}

	if  == 0 {
		return ""
	}

	 :=  - 1
	for  > 0 && !IsPathSeparator([-1]) {
		--
	}

	return [:]
}

func dir( string) string {
	if  == "" {
		return ""
	}

	 := len()
	for  > 0 && IsPathSeparator([-1]) {
		--
	}

	if  == 0 {
		return "\\"
	}

	--
	for  > 0 && !IsPathSeparator([-1]) {
		--
	}

	if  == 0 {
		return ""
	}

	--
	for  > 0 && IsPathSeparator([-1]) {
		--
	}

	if  == 0 {
		return "\\"
	}

	return [:]
}

func validatePath( string,  string,  bool) error {
	if len() == 0 {
		return nil
	}

	if !NORMALIZE_PATH {
		if strings.ContainsRune(, '/') {
			return &os.PathError{Op: , Path: , Err: errors.New("can't use '/' as a path separator; use '\\' instead")}
		}
	}

	if ! && [0] == '\\' {
		return &os.PathError{Op: , Path: , Err: errors.New("leading '\\' is not allowed in this operation")}
	}

	return nil
}

var mountPathPattern = regexp.MustCompile(`^\\\\[^\\/]+\\[^\\/]+$`)

func validateMountPath( string) error {
	if !mountPathPattern.MatchString() {
		return &os.PathError{Op: "mount", Path: , Err: errors.New(`mount path must be a valid share name (\\<server>\<share>)`)}
	}
	return nil
}

func normPath( string) string {
	if !NORMALIZE_PATH {
		return 
	}
	 = strings.Replace(, `/`, `\`, -1)
	for strings.HasPrefix(, `.\`) {
		 = [2:]
	}
	if  == "." {
		return ""
	}
	return 
}

func normPattern( string) string {
	if !NORMALIZE_PATH {
		return 
	}
	 = strings.Replace(, `/`, `\`, -1)
	for strings.HasPrefix(, `.\`) {
		 = [2:]
	}
	return 
}

func join( ...string) string {
	return normPath(strings.Join(, string(PathSeparator)))
}

func split( string) (,  string) {
	 := len() - 1
	for  >= 0 && !IsPathSeparator([]) {
		--
	}
	return [:+1], [+1:]
}