34 lines
660 B
Go
34 lines
660 B
Go
package mutex
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
const maxMutexLength = 64
|
|
|
|
func sanitizeName(name string) (string, error) {
|
|
trimmed := strings.TrimSpace(name)
|
|
if trimmed == "" {
|
|
return "", fmt.Errorf("empty mutex name")
|
|
}
|
|
|
|
var builder strings.Builder
|
|
for _, r := range trimmed {
|
|
if (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') || (r >= '0' && r <= '9') || r == '-' || r == '_' || r == '.' {
|
|
builder.WriteRune(r)
|
|
}
|
|
}
|
|
|
|
sanitized := builder.String()
|
|
if sanitized == "" {
|
|
return "", fmt.Errorf("mutex name has no valid characters")
|
|
}
|
|
|
|
if len(sanitized) > maxMutexLength {
|
|
sanitized = sanitized[:maxMutexLength]
|
|
}
|
|
|
|
return sanitized, nil
|
|
}
|