67module AP_MODULE_DECLARE_DATA version_module;
79 int version[3] = {0, 0, 0};
82 *
error =
"Version appears to be invalid. It must have the format "
83 "major[.minor[.patch]] where major, minor and patch are "
92 while (
p <=
ep &&
c < 3) {
151 *
error =
"Unable to compile regular expression";
199 || (!(
arg3 && *
arg3 ==
'>' && !
arg3[1]) && *--endp !=
'>')) {
201 "> directive missing closing '>'",
NULL);
213 if (!*
p || (*
p ==
'=' && !
p[1] &&
c !=
'~')) {
235 if (endp == ++
arg2 || *--endp !=
'/') {
236 return "Missing delimiting / of regular expression.";
258 match = ((-1 == compare) || (*
p && !compare));
269 match = ((1 == compare) || (*
p && !compare));
289 ¤t, &
parent,
"<IfVersion");
300 "a comparison operator, a version (and a delimiter)"),
int int const char ** match
APR general purpose library routines.
static void reverse(const char **argv, int start, int len)
const char * ap_build_cont_config(apr_pool_t *p, apr_pool_t *temp_pool, cmd_parms *parms, ap_directive_t **current, ap_directive_t **curr_parent, char *orig_directive)
#define AP_INIT_TAKE123(directive, func, mconfig, where, help)
const char * ap_soak_end_container(cmd_parms *cmd, char *directive)
#define AP_DECLARE_MODULE(foo)
void ap_get_server_revision(ap_version_t *version)
apr_pool_t const char apr_dbd_t const char ** error
#define STANDARD20_MODULE_STUFF
ap_regex_t * ap_pregcomp(apr_pool_t *p, const char *pattern, int cflags)
void ap_pregfree(apr_pool_t *p, ap_regex_t *reg)
const char int apr_pool_t * pool
apr_vformatter_buff_t * c
static int match_version(apr_pool_t *pool, char *version_string, const char **error)
static const command_rec version_cmds[]
static ap_version_t httpd_version
static int compare_version(char *version_string, const char **error)
static const char * start_ifversion(cmd_parms *cmd, void *mconfig, const char *arg1, const char *arg2, const char *arg3)
Structure used to build the config tree.
The numeric version information is broken out into fields within this structure.