# HG changeset patch # User Ben Schmidt # Date 1326709759 -39600 # Node ID 8ddfc2d59a3fb1c156b30b822b94797ac9d4a0da # Parent 99fb6ba7a76ea5ca9ca8a79f321e9dd9f9606b17 Allow more characters in control and text filenames for substitutions. diff -r 99fb6ba7a76e -r 8ddfc2d59a3f ChangeLog --- a/ChangeLog Mon Jan 16 21:29:17 2012 +1100 +++ b/ChangeLog Mon Jan 16 21:29:19 2012 +1100 @@ -1,3 +1,4 @@ + o Allow more characters in control and text filenames for substitutions o Add %%, %^%, %comment%, %control C% and %text T% formatting directives o Allow a space in $originalmail N$ substitution o Improve algorithm for list text substitutions diff -r 99fb6ba7a76e -r 8ddfc2d59a3f README.listtexts --- a/README.listtexts Mon Jan 16 21:29:17 2012 +1100 +++ b/README.listtexts Mon Jan 16 21:29:19 2012 +1100 @@ -251,13 +251,13 @@ - %text T% text from the file named T in the listdir/text directory; the name may only - include letters and digits; note that there is an unformatted version of - this directive + include letters, digits, underscore, dot and hyphen; note that there is an + unformatted version of this directive - %control C% - the contents of the control file named C in listir/control; the name may - only include letters and digits; note that there is an unformatted version - of this directive + the contents of the control file named C in listir/control; the name may only + include letters, digits, underscore, dot and hyphen; note that there is an + unformatted version of this directive - %originalmail% - %originalmail N% @@ -331,8 +331,8 @@ - $control C$ the contents of the control file named C in listdir/control, with its final - newline stripped; the name may only include letters and digits; note that - there is a formatted version of this directive + newline stripped; the name may only include letters, digits, underscore, dot + and hyphen; note that there is a formatted version of this directive - $digestfirst$ (available only in digest) @@ -463,8 +463,8 @@ - $text T$ text from the file named T in the listdir/text directory, with its final - newline stripped; the name may only include letters and digits; note that - there is a formatted version of this directive + newline stripped; the name may only include letters, digits, underscore, dot + and hyphen; note that there is a formatted version of this directive - $$ a single $ diff -r 99fb6ba7a76e -r 8ddfc2d59a3f src/prepstdreply.c --- a/src/prepstdreply.c Mon Jan 16 21:29:17 2012 +1100 +++ b/src/prepstdreply.c Mon Jan 16 21:29:19 2012 +1100 @@ -62,13 +62,16 @@ }; -static char *alphanum_token(char *token) { +static char *filename_token(char *token) { char *pos; if (*token == '\0') return NULL; for(pos = token; *pos != '\0'; pos++) { if(*pos >= '0' && *pos <= '9') continue; if(*pos >= 'A' && *pos <= 'Z') continue; if(*pos >= 'a' && *pos <= 'z') continue; + if(*pos == '_') continue; + if(*pos == '-') continue; + if(*pos == '.') continue; break; } if (*pos != '\0') return NULL; @@ -146,10 +149,10 @@ value = concatstr(4, listname, listdelim, "subscribe-nomail@", fqdn); } else if(strncmp(token, "control ", 8) == 0) { - token = alphanum_token(token + 8); + token = filename_token(token + 8); if (token != NULL) value = ctrlcontent(listdir, token); } else if(strncmp(token, "text ", 5) == 0) { - token = alphanum_token(token + 5); + token = filename_token(token + 5); if (token != NULL) value = textcontent(listdir, token); } else if(data) { for(i = 0; i < datacount; i++) { @@ -357,7 +360,7 @@ *pos_p = pos; return; } else if(strncmp(token, "control ", 8) == 0) { - token = alphanum_token(token + 8); + token = filename_token(token + 8); if (token != NULL) { filename = concatstr(3, listdir, "/control/", token); begin_new_source_file(txt, line_p, pos_p, filename); @@ -365,7 +368,7 @@ return; } } else if(strncmp(token, "text ", 5) == 0) { - token = alphanum_token(token + 5); + token = filename_token(token + 5); if (token != NULL) { filename = concatstr(3, listdir, "/text/", token); begin_new_source_file(txt, line_p, pos_p, filename);