Commit 93df069b authored by Cliff Woolley's avatar Cliff Woolley
Browse files

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


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@88906 13f79535-47bb-0310-9956-ffa450edef68
parent 11a22ac2
Loading
Loading
Loading
Loading
+19 −47
Original line number Diff line number Diff line
@@ -2378,27 +2378,20 @@ static void send_parsed_content(apr_bucket_brigade **bb, request_rec *r,
            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 @@ static void send_parsed_content(apr_bucket_brigade **bb, request_rec *r,
                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 @@ static void send_parsed_content(apr_bucket_brigade **bb, request_rec *r,
            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 @@ static void send_parsed_content(apr_bucket_brigade **bb, request_rec *r,
            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 @@ static void send_parsed_content(apr_bucket_brigade **bb, request_rec *r,
        /* 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... */