github.com/hattya/go.sh@v0.0.0-20240328132134-f53276d95cc6/pattern/pattern_unix.go (about) 1 // 2 // go.sh/pattern :: pattern_unix.go 3 // 4 // Copyright (c) 2021-2023 Akinori Hattori <hattya@gmail.com> 5 // 6 // SPDX-License-Identifier: MIT 7 // 8 9 //go:build unix 10 11 package pattern 12 13 import "strings" 14 15 func indexSep(pat string) (int, int) { 16 n := len(pat) 17 for { 18 switch i := strings.IndexAny(pat, `/\`); { 19 case i == -1: 20 return -1, 0 21 case pat[i] == '\\' && i+1 < len(pat): 22 if pat[i+1] == '/' { 23 return n - len(pat[i:]), 2 24 } 25 pat = pat[i+1:] 26 default: 27 return n - len(pat[i:]), 1 28 } 29 } 30 } 31 32 func split(pat string) (string, string) { 33 if i, w := indexSep(pat); i == 0 { 34 return "/", pat[w:] 35 } 36 return ".", pat 37 }