--- parser3/src/include/pa_file.h 2026/10/01 11:48:37 1.4 +++ parser3/src/include/pa_file.h 2026/10/03 14:30:03 1.7 @@ -8,7 +8,7 @@ #ifndef PA_FILE_H #define PA_FILE_H -#define IDENT_PA_FILE_H "$Id: pa_file.h,v 1.4 2026/10/01 11:48:37 moko Exp $" +#define IDENT_PA_FILE_H "$Id: pa_file.h,v 1.7 2026/10/03 14:30:03 moko Exp $" #include "pa_common.h" @@ -57,12 +57,21 @@ enum { PA_ALLOW_HTTP=PA_SCHEME_HTTP, PA_ /// scheme of a not '/'-normalized path: file://, http:// or parser://, PA_SCHEME_NONE otherwise uint path_scheme(const String& path); +/// false if the scheme is tainted +bool clean_path_scheme(uint scheme, const String& path); + /// throws unless the scheme is allowed, file:// always is, or if the scheme is tainted void check_path_scheme(uint scheme, const String& path, uint allowed); /// resolved file:// or null; the result is not '/'-normalized const String* file_uri_to_path(const String& uri); +/// strncmp for disk paths, case insensitive under windows +int path_cmp(const char* path, const char* dir, size_t length); + +/// returns ", actual filename '...'" only if escaping changed the file name (exception source shows the original file) +const char* actual_filename(const String& file_spec, const char* fname); + #define FILE_BUFFER_SIZE (128*0x400) int pa_lock_shared_blocking(int fd);