Add support for escaping in Windows with the '^' char

This commit is contained in:
Andrea Mazzoleni 2016-03-02 12:05:38 +01:00
parent ecff017ffe
commit 8fbd8b35ea
5 changed files with 45 additions and 7 deletions

View file

@ -1,6 +1,13 @@
SnapRAID HISTORY
================
10.1 2016/03
============
* In the Windows version allow to use the escape char '^' to handle
file patterns containing real characters matching the globbing '*?[]'
ones. In Unix it was already possible to do the same escaping with
'\'.
10.0 2016/02
============
* Boosts the speed of the 'sync' and 'scrub' commands with a new

View file

@ -638,10 +638,17 @@ void pathimport(char* dst, size_t size, const char* src)
pathcpy(dst, size, src);
#ifdef _WIN32
/* convert all Windows '\' to C '/' */
/* convert the Windows dir separator '\' to C '/', */
/* and the Windows escaping char '^' to the fnmatch '\' */
while (*dst) {
if (*dst == '\\')
switch (*dst) {
case '\\' :
*dst = '/';
break;
case '^' :
*dst = '\\';
break;
}
++dst;
}
#endif
@ -652,10 +659,16 @@ void pathexport(char* dst, size_t size, const char* src)
pathcpy(dst, size, src);
#ifdef _WIN32
/* convert all C '/' to Windows '\' */
/* invert the import */
while (*dst) {
if (*dst == '/')
switch (*dst) {
case '/' :
*dst = '\\';
break;
case '\\' :
*dst = '^';
break;
}
++dst;
}
#endif

View file

@ -1550,7 +1550,7 @@ There are four different types of patterns:
.TP
.B FILE
Selects any file named as FILE. You can use any globbing
character like * and ?.
character like * and ?, and char classes like [a\-z].
This pattern is applied only to files and not to directories.
.TP
.B DIR/
@ -1578,6 +1578,12 @@ Note that Windows system directories, junctions, mount points, and any
other Windows special directory are treated just as files, meaning that
to exclude them you must use a file rule, and not a directory one.
.PP
If the file name you want to use really contains a \'*\', \'?\', \'[\',
or \']\' char, you have to escape it to avoid to have interpreted as a
globbing character. In Unix the escape char is \'\\\' in Windows it\'s \'^\'.
Note that when the pattern is on the command line, you have to double the
escape character to avoid to have it interpreted by the command shell.
.PP
In the configuration file, you can use different strategies to filter
the files to process.
The simplest one is to use only \[dq]exclude\[dq] rules to remove all the

View file

@ -1165,7 +1165,7 @@ Pattern
=FILE
Selects any file named as FILE. You can use any globbing
character like * and ?.
character like * and ?, and char classes like [a-z].
This pattern is applied only to files and not to directories.
=DIR/
@ -1193,6 +1193,12 @@ Pattern
other Windows special directory are treated just as files, meaning that
to exclude them you must use a file rule, and not a directory one.
If the file name you want to use really contains a '*', '?', '[',
or ']' char, you have to escape it to avoid to have interpreted as a
globbing character. In Unix the escape char is '\' in Windows it's '^'.
Note that when the pattern is on the command line, you have to double the
escape character to avoid to have it interpreted by the command shell.
In the configuration file, you can use different strategies to filter
the files to process.
The simplest one is to use only "exclude" rules to remove all the

View file

@ -1258,7 +1258,7 @@ There are four different types of patterns:
FILE
Selects any file named as FILE. You can use any globbing
character like * and ?.
character like * and ?, and char classes like [a-z].
This pattern is applied only to files and not to directories.
DIR/
@ -1286,6 +1286,12 @@ Note that Windows system directories, junctions, mount points, and any
other Windows special directory are treated just as files, meaning that
to exclude them you must use a file rule, and not a directory one.
If the file name you want to use really contains a '*', '?', '[',
or ']' char, you have to escape it to avoid to have interpreted as a
globbing character. In Unix the escape char is '\' in Windows it's '^'.
Note that when the pattern is on the command line, you have to double the
escape character to avoid to have it interpreted by the command shell.
In the configuration file, you can use different strategies to filter
the files to process.
The simplest one is to use only "exclude" rules to remove all the