You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by jw...@apache.org on 2001/04/20 22:58:29 UTC
cvs commit: httpd-2.0/modules/filters mod_include.c
jwoolley 01/04/20 13:58:28
Modified: modules/filters mod_include.c
Log:
Change mod_include to use the latest bucket API tricks. This gets
rid of some obscure while loop magic that had to be done before,
making mod_include easier to read and a better example for future
filter writers.
There should be no semantic changes in this patch... just a 1-to-1
mapping from while loops to bucket API calls that do the same thing.
Reviewed by: Paul J. Reder
Revision Changes Path
1.108 +19 -47 httpd-2.0/modules/filters/mod_include.c
Index: mod_include.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/filters/mod_include.c,v
retrieving revision 1.107
retrieving revision 1.108
diff -u -d -u -r1.107 -r1.108
--- mod_include.c 2001/04/10 16:57:27 1.107
+++ mod_include.c 2001/04/20 20:58:28 1.108
@@ -2378,27 +2378,20 @@
if ((do_cleanup) && (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade))) {
apr_bucket *tmp_bkt;
- tmp_bkt = apr_bucket_immortal_create(STARTING_SEQUENCE, cleanup_bytes);
+ tmp_bkt = apr_bucket_immortal_create(STARTING_SEQUENCE,
+ cleanup_bytes);
APR_BRIGADE_INSERT_HEAD(*bb, tmp_bkt);
-
- while (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
- tmp_bkt = APR_BRIGADE_FIRST(ctx->ssi_tag_brigade);
- apr_bucket_delete(tmp_bkt);
- }
+ apr_brigade_cleanup(ctx->ssi_tag_brigade);
}
/* If I am inside a conditional (if, elif, else) that is false
* then I need to throw away anything contained in it.
*/
- if ((!(ctx->flags & FLAG_PRINTING)) && (tmp_dptr != NULL) &&
- (dptr != APR_BRIGADE_SENTINEL(*bb))) {
- while ((dptr != APR_BRIGADE_SENTINEL(*bb)) &&
- (dptr != tmp_dptr)) {
- apr_bucket *free_bucket = dptr;
-
- dptr = APR_BUCKET_NEXT (dptr);
- apr_bucket_delete(free_bucket);
- }
+ if ((!(ctx->flags & FLAG_PRINTING)) && (tmp_dptr != NULL)) {
+ apr_bucket_brigade *temp_bb = *bb;
+ *bb = apr_brigade_split(temp_bb, tmp_dptr);
+ apr_brigade_destroy(temp_bb);
+ dptr = APR_BRIGADE_FIRST(*bb);
}
/* Adjust the current bucket position based on what was found... */
@@ -2478,20 +2471,13 @@
CREATE_ERROR_BUCKET(ctx, tmp_bkt, dptr, content_head);
/* DO CLEANUP HERE!!!!! */
- tmp_dptr = ctx->head_start_bucket;
if (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
- while (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
- tmp_bkt = APR_BRIGADE_FIRST(ctx->ssi_tag_brigade);
- apr_bucket_delete(tmp_bkt);
- }
+ apr_brigade_cleanup(ctx->ssi_tag_brigade);
}
else {
- do {
- tmp_bkt = tmp_dptr;
- tmp_dptr = APR_BUCKET_NEXT (tmp_dptr);
- apr_bucket_delete(tmp_bkt);
- } while ((tmp_dptr != dptr) &&
- (tmp_dptr != APR_BRIGADE_SENTINEL(*bb)));
+ apr_bucket_brigade *temp_bb = *bb;
+ *bb = apr_brigade_split(temp_bb, dptr);
+ apr_brigade_destroy(temp_bb);
}
return;
@@ -2549,20 +2535,13 @@
if (content_head == NULL) {
content_head = dptr;
}
- tmp_dptr = ctx->head_start_bucket;
if (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
- while (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
- tmp_bkt = APR_BRIGADE_FIRST(ctx->ssi_tag_brigade);
- apr_bucket_delete(tmp_bkt);
- }
+ apr_brigade_cleanup(ctx->ssi_tag_brigade);
}
else {
- do {
- tmp_bkt = tmp_dptr;
- tmp_dptr = APR_BUCKET_NEXT (tmp_dptr);
- apr_bucket_delete(tmp_bkt);
- } while ((tmp_dptr != content_head) &&
- (tmp_dptr != APR_BRIGADE_SENTINEL(*bb)));
+ apr_bucket_brigade *temp_bb = *bb;
+ *bb = apr_brigade_split(temp_bb, content_head);
+ apr_brigade_destroy(temp_bb);
}
if (ctx->combined_tag == tmp_buf) {
memset (ctx->combined_tag, '\0', ctx->tag_length);
@@ -2582,10 +2561,7 @@
ctx->directive_length = 0;
if (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
- while (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
- tmp_bkt = APR_BRIGADE_FIRST(ctx->ssi_tag_brigade);
- apr_bucket_delete(tmp_bkt);
- }
+ apr_brigade_cleanup(ctx->ssi_tag_brigade);
}
ctx->state = PRE_HEAD;
@@ -2602,12 +2578,8 @@
/* Inside a false conditional (if, elif, else), so toss it all... */
if ((dptr != APR_BRIGADE_SENTINEL(*bb)) &&
(!(ctx->flags & FLAG_PRINTING))) {
- apr_bucket *free_bucket;
- do {
- free_bucket = dptr;
- dptr = APR_BUCKET_NEXT (dptr);
- apr_bucket_delete(free_bucket);
- } while (dptr != APR_BRIGADE_SENTINEL(*bb));
+ apr_brigade_cleanup(*bb);
+ dptr = APR_BRIGADE_SENTINEL(*bb);
}
else { /* Otherwise pass it along... */
ap_pass_brigade(f->next, *bb); /* No SSI tags in this brigade... */
Re: cvs commit: httpd-2.0/modules/filters mod_include.c
Posted by Cliff Woolley <cl...@yahoo.com>.
On Sat, 21 Apr 2001, Brian Havard wrote:
> > }
> > else {
> > - do {
> > - tmp_bkt = tmp_dptr;
> > - tmp_dptr = APR_BUCKET_NEXT (tmp_dptr);
> > - apr_bucket_delete(tmp_bkt);
> > - } while ((tmp_dptr != dptr) &&
> > - (tmp_dptr != APR_BRIGADE_SENTINEL(*bb)));
> > + apr_bucket_brigade *temp_bb = *bb;
> > + *bb = apr_brigade_split(temp_bb, dptr);
> > + apr_brigade_destroy(temp_bb);
> > }
> >
> > return;
>
> This part doesn't appear to be equivalent, I'm seeing data before a tag
> getting lost.
Hmmm... yeah, my fault. I see the problem. Will patch ASAP.
--Cliff
--------------------------------------------------------------
Cliff Woolley
cliffwoolley@yahoo.com
Charlottesville, VA
Re: cvs commit: httpd-2.0/modules/filters mod_include.c
Posted by Brian Havard <br...@kheldar.apana.org.au>.
On 20 Apr 2001 20:58:29 -0000, jwoolley@apache.org wrote:
>jwoolley 01/04/20 13:58:28
>
> Modified: modules/filters mod_include.c
> Log:
> Change mod_include to use the latest bucket API tricks. This gets
> rid of some obscure while loop magic that had to be done before,
> making mod_include easier to read and a better example for future
> filter writers.
>
> There should be no semantic changes in this patch... just a 1-to-1
> mapping from while loops to bucket API calls that do the same thing.
>
> Reviewed by: Paul J. Reder
>
> Revision Changes Path
> 1.108 +19 -47 httpd-2.0/modules/filters/mod_include.c
>
> Index: mod_include.c
> ===================================================================
> RCS file: /home/cvs/httpd-2.0/modules/filters/mod_include.c,v
> retrieving revision 1.107
> retrieving revision 1.108
> diff -u -d -u -r1.107 -r1.108
> --- mod_include.c 2001/04/10 16:57:27 1.107
> +++ mod_include.c 2001/04/20 20:58:28 1.108
> }
> else {
> - do {
> - tmp_bkt = tmp_dptr;
> - tmp_dptr = APR_BUCKET_NEXT (tmp_dptr);
> - apr_bucket_delete(tmp_bkt);
> - } while ((tmp_dptr != dptr) &&
> - (tmp_dptr != APR_BRIGADE_SENTINEL(*bb)));
> + apr_bucket_brigade *temp_bb = *bb;
> + *bb = apr_brigade_split(temp_bb, dptr);
> + apr_brigade_destroy(temp_bb);
> }
>
> return;
This part doesn't appear to be equivalent, I'm seeing data before a tag
getting lost.
--
______________________________________________________________________________
| Brian Havard | "He is not the messiah! |
| brianh@kheldar.apana.org.au | He's a very naughty boy!" - Life of Brian |
------------------------------------------------------------------------------