git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use %ld not %l
[exim.git]
/
src
/
src
/
transports
/
tf_maildir.c
diff --git
a/src/src/transports/tf_maildir.c
b/src/src/transports/tf_maildir.c
index 611895e064a72aac70be4e4f491fe36e98bb527f..2673b1443e9f73cf0da6e77bccc63bd3180ba7ea 100644
(file)
--- a/
src/src/transports/tf_maildir.c
+++ b/
src/src/transports/tf_maildir.c
@@
-3,6
+3,7
@@
*************************************************/
/* Copyright (c) University of Cambridge 1995 - 2018 */
*************************************************/
/* Copyright (c) University of Cambridge 1995 - 2018 */
+/* Copyright (c) The Exim Maintainers 2020 */
/* See the file NOTICE for conditions of use and distribution. */
/* Functions in support of the use of maildirsize files for handling quotas in
/* See the file NOTICE for conditions of use and distribution. */
/* Functions in support of the use of maildirsize files for handling quotas in
@@
-139,26
+140,26
@@
for (i = 0; i < 4; i++)
/* If the basic path matches maildirfolder_create_regex, we are dealing with
a subfolder, and should ensure that a maildirfolder file exists. */
/* If the basic path matches maildirfolder_create_regex, we are dealing with
a subfolder, and should ensure that a maildirfolder file exists. */
-if (maildirfolder_create_regex
!= NULL
)
+if (maildirfolder_create_regex)
{
{
-
const uschar *erro
r;
-
int
offset;
- const pcre
*regex
;
+
int er
r;
+
PCRE2_SIZE
offset;
+ const pcre
2_code * re
;
DEBUG(D_transport) debug_printf("checking for maildirfolder requirement\n");
DEBUG(D_transport) debug_printf("checking for maildirfolder requirement\n");
- regex = pcre_compile(CS maildirfolder_create_regex, PCRE_COPT,
- (const char **)&error, &offset, NULL);
-
- if (regex == NULL)
+ if (!(re = pcre2_compile((PCRE2_SPTR)maildirfolder_create_regex,
+ PCRE2_ZERO_TERMINATED, PCRE_COPT, &err, &offset, pcre_cmp_ctx)))
{
{
+ uschar errbuf[128];
+ pcre2_get_error_message(err, errbuf, sizeof(errbuf));
addr->message = string_sprintf("appendfile: regular expression "
addr->message = string_sprintf("appendfile: regular expression "
- "error: %s at offset %
d while compiling %s", error,
offset,
+ "error: %s at offset %
ld while compiling %s", errbuf, (long)
offset,
maildirfolder_create_regex);
return FALSE;
}
maildirfolder_create_regex);
return FALSE;
}
- if (
pcre_exec(regex, NULL, CS path, Ustrlen(path), 0, 0, NULL, 0) >= 0
)
+ if (
regex_match(re, path, -1, NULL)
)
{
uschar *fname = string_sprintf("%s/maildirfolder", path);
if (Ustat(fname, &statbuf) == 0)
{
uschar *fname = string_sprintf("%s/maildirfolder", path);
if (Ustat(fname, &statbuf) == 0)
@@
-251,19
+252,18
@@
Returns: the sum of the sizes of the messages
off_t
maildir_compute_size(uschar *path, int *filecount, time_t *latest,
off_t
maildir_compute_size(uschar *path, int *filecount, time_t *latest,
- const pcre
*regex, const pcr
e *dir_regex, BOOL timestamp_only)
+ const pcre
2_code *regex, const pcre2_cod
e *dir_regex, BOOL timestamp_only)
{
DIR *dir;
off_t sum = 0;
{
DIR *dir;
off_t sum = 0;
-struct dirent *ent;
-struct stat statbuf;
-if (!(dir =
opendir(CS
path)))
+if (!(dir =
exim_opendir(
path)))
return 0;
return 0;
-
while ((ent = readdir(dir))
)
+
for (struct dirent *ent; ent = readdir(dir);
)
{
uschar * s, * name = US ent->d_name;
{
uschar * s, * name = US ent->d_name;
+ struct stat statbuf;
if (Ustrcmp(name, ".") == 0 || Ustrcmp(name, "..") == 0) continue;
if (Ustrcmp(name, ".") == 0 || Ustrcmp(name, "..") == 0) continue;
@@
-271,8
+271,7
@@
while ((ent = readdir(dir)))
scan. We do the regex match first, because that avoids a stat() for names
we aren't interested in. */
scan. We do the regex match first, because that avoids a stat() for names
we aren't interested in. */
- if (dir_regex != NULL &&
- pcre_exec(dir_regex, NULL, CS name, Ustrlen(name), 0, 0, NULL, 0) < 0)
+ if (dir_regex && !regex_match(dir_regex, name, -1, NULL))
{
DEBUG(D_transport)
debug_printf("skipping %s/%s: dir_regex does not match\n", path, name);
{
DEBUG(D_transport)
debug_printf("skipping %s/%s: dir_regex does not match\n", path, name);
@@
-360,7
+359,7
@@
Returns: >=0 a file descriptor for an open maildirsize file
int
maildir_ensure_sizefile(uschar *path, appendfile_transport_options_block *ob,
int
maildir_ensure_sizefile(uschar *path, appendfile_transport_options_block *ob,
- const pcre
*regex, const pcr
e *dir_regex, off_t *returned_size,
+ const pcre
2_code *regex, const pcre2_cod
e *dir_regex, off_t *returned_size,
int *returned_filecount)
{
int count, fd;
int *returned_filecount)
{
int count, fd;