From: <no...@so...> - 2007-04-17 18:21:46
|
Update of /cvsroot/ijbswa/current In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv458 Modified Files: actions.c actions.h Log Message: Split update_action_bits() into update_action_bits_for_all_tags() and update_action_bits_for_tag(). Index: actions.c =================================================================== RCS file: /cvsroot/ijbswa/current/actions.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -d -r1.38 -r1.39 --- actions.c 15 Apr 2007 16:39:20 -0000 1.38 +++ actions.c 17 Apr 2007 18:21:45 -0000 1.39 @@ -33,6 +33,11 @@ * * Revisions : * $Log$ + * Revision 1.39 2007/04/17 18:21:45 fabiankeil + * Split update_action_bits() into + * update_action_bits_for_all_tags() + * and update_action_bits_for_tag(). + * * Revision 1.38 2007/04/15 16:39:20 fabiankeil * Introduce tags as alternative way to specify which * actions apply to a request. At the moment tags can be @@ -878,9 +883,9 @@ /********************************************************************* * - * Function : update_action_bits + * Function : update_action_bits_for_all_tags * - * Description : Updates the action bits based on matching tags. + * Description : Updates the action bits based on all matching tags. * * Parameters : * 1 : csp = Current client state (buffers, headers, etc...) @@ -889,46 +894,78 @@ * 1 otherwise * *********************************************************************/ -int update_action_bits(struct client_state *csp) +int update_action_bits_for_all_tags(struct client_state *csp) +{ + struct list_entry *tag; + int updated = 0; + + for (tag = csp->tags->first; tag != NULL; tag = tag->next) + { + if (update_action_bits_for_tag(csp, tag->str)) + { + updated = 1; + } + } + + return updated; +} + + +/********************************************************************* + * + * Function : update_action_bits_for_tag + * + * Description : Updates the action bits based on the action sections + * whose tag patterns match a provided tag. + * + * Parameters : + * 1 : csp = Current client state (buffers, headers, etc...) + * 2 : tag = The tag on which the update should be based on + * + * Returns : 0 if no tag matched, or + * 1 otherwise + * + *********************************************************************/ +int update_action_bits_for_tag(struct client_state *csp, const char *tag) { struct file_list *fl; struct url_actions *b; - struct list_entry *tag; + int updated = 0; int i; - /* Take each tag, */ - for (tag = csp->tags->first; tag != NULL; tag = tag->next) + assert(tag); + assert(list_contains_item(csp->tags, tag)); + + /* Run through all action files, */ + for (i = 0; i < MAX_AF_FILES; i++) { - /* run through all action files, */ - for (i = 0; i < MAX_AF_FILES; i++) + if (((fl = csp->actions_list[i]) == NULL) || ((b = fl->f) == NULL)) { - if (((fl = csp->actions_list[i]) == NULL) || ((b = fl->f) == NULL)) + /* Skip empty files */ + continue; + } + + /* and through all the action patterns, */ + for (b = b->next; NULL != b; b = b->next) + { + /* skip the URL patterns, */ + if (NULL == b->url->tag_regex) { - /* Skip empty files */ continue; } - /* and through all the action patterns, */ - for (b = b->next; NULL != b; b = b->next) - { - /* skip the URL patterns, */ - if (NULL == b->url->tag_regex) - { - continue; - } - /* and check if one of the tag patterns matches this tag, */ - if (0 == regexec(b->url->tag_regex, tag->str, 0, NULL, 0)) + /* and check if one of the tag patterns matches the tag, */ + if (0 == regexec(b->url->tag_regex, tag, 0, NULL, 0)) + { + /* if it does, update the action bit map, */ + if (merge_current_action(csp->action, b->action)) { - /* if it does, update the action bit map, */ - if (merge_current_action(csp->action, b->action)) - { - log_error(LOG_LEVEL_ERROR, - "Out of memorey while changing action bits"); - } - /* and signal the change. */ - updated = 1; + log_error(LOG_LEVEL_ERROR, + "Out of memorey while changing action bits"); } + /* and signal the change. */ + updated = 1; } } } Index: actions.h =================================================================== RCS file: /cvsroot/ijbswa/current/actions.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- actions.h 15 Apr 2007 16:39:20 -0000 1.15 +++ actions.h 17 Apr 2007 18:21:45 -0000 1.16 @@ -35,6 +35,11 @@ * * Revisions : * $Log$ + * Revision 1.16 2007/04/17 18:21:45 fabiankeil + * Split update_action_bits() into + * update_action_bits_for_all_tags() + * and update_action_bits_for_tag(). + * * Revision 1.15 2007/04/15 16:39:20 fabiankeil * Introduce tags as alternative way to specify which * actions apply to a request. At the moment tags can be @@ -131,7 +136,8 @@ extern void free_action(struct action_spec *src); extern jb_err merge_actions (struct action_spec *dest, const struct action_spec *src); -extern int update_action_bits(struct client_state *csp); +extern int update_action_bits_for_all_tags(struct client_state *csp); +extern int update_action_bits_for_tag(struct client_state *csp, const char *tag); extern jb_err copy_action (struct action_spec *dest, const struct action_spec *src); extern char * actions_to_text (struct action_spec *action); |