Normalizes a database path. Converts backslashes and removes duplicate and leading slashes. Returns null if the path contains invalid characters. @param path input path @return normalized path or null
(final String path)
| 162 | * @return normalized path or {@code null} |
| 163 | */ |
| 164 | public static String normPath(final String path) { |
| 165 | // scan path segments |
| 166 | final StringList list = new StringList(); |
| 167 | final StringBuilder sb = new StringBuilder(); |
| 168 | final int pl = path.length(); |
| 169 | for(int p = 0; p < pl; p++) { |
| 170 | final char ch = path.charAt(p); |
| 171 | if(ch == '\\' || ch == '/') { |
| 172 | if(!addToPath(sb, list)) return null; |
| 173 | } else { |
| 174 | if(Prop.WIN && ":*?\"<>\\|".indexOf(ch) != -1) return null; |
| 175 | sb.append(ch); |
| 176 | } |
| 177 | } |
| 178 | if(!addToPath(sb, list)) return null; |
| 179 | sb.append(String.join("/", list.finish())); |
| 180 | |
| 181 | // add trailing slash |
| 182 | if(pl > 0 && !sb.isEmpty()) { |
| 183 | final char ch = path.charAt(pl - 1); |
| 184 | if(ch == '\\' || ch == '/') sb.append('/'); |
| 185 | } |
| 186 | return sb.toString(); |
| 187 | } |
| 188 | |
| 189 | /** |
| 190 | * Adds a segment to the path if it is valid. |
no test coverage detected