Commit e06d05d1 authored by Greg Stein's avatar Greg Stein
Browse files

use apr_off_t and APR_OFF_T_FMT (for portability to 64-bit off_t systems)

Submitted by: Jeff Trawick
Reviewed by: Greg Stein


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@88288 13f79535-47bb-0310-9956-ffa450edef68
parent f7a8f643
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@
*/

#include "apr_strings.h"
#include "apr_lib.h"            /* for apr_is* */

#define APR_WANT_STRFUNC
#include "apr_want.h"
@@ -686,7 +687,7 @@ static dav_error * dav_open_lockdb(request_rec *r, int ro, dav_lockdb **lockdb)
}

static int dav_parse_range(request_rec *r,
                           off_t *range_start, off_t *range_end)
                           apr_off_t *range_start, apr_off_t *range_end)
{
    const char *range_c;
    char *range;
@@ -706,8 +707,11 @@ static int dav_parse_range(request_rec *r,
    }

    *dash = *slash = '\0';

    /* ### atol may not be large enough for the apr_off_t */
    *range_start = atol(range + 6);
    *range_end = atol(dash + 1);

    if (*range_end < *range_start
        || (slash[1] != '*' && atol(slash + 1) <= *range_end)) {
        /* invalid range. ignore it (per S14.16 of RFC2616) */
@@ -811,8 +815,8 @@ static int dav_method_get(request_rec *r)
	dav_error *err;
	void *buffer;
        int has_range;
        off_t range_start;
        off_t range_end;
        apr_off_t range_start;
        apr_off_t range_end;

	/* set up the HTTP headers for the response */
	if ((err = (*resource->hooks->set_headers)(r, resource)) != NULL) {
@@ -835,7 +839,9 @@ static int dav_method_get(request_rec *r)
            r->status = HTTP_PARTIAL_CONTENT;
            apr_table_setn(r->headers_out,
                          "Content-Range",
                          apr_psprintf(r->pool, "bytes %ld-%ld/*",
                          apr_psprintf(r->pool,
                                       "bytes %" APR_OFF_T_FMT
                                       "-%" APR_OFF_T_FMT "/*",
                                       range_start, range_end));
            ap_set_content_length(r, range_end - range_start + 1);
        }
@@ -870,7 +876,7 @@ static int dav_method_get(request_rec *r)

	buffer = apr_palloc(r->pool, DAV_READ_BLOCKSIZE);
	while (1) {
	    size_t amt;
	    apr_size_t amt;

            if (!has_range)
                amt = DAV_READ_BLOCKSIZE;
@@ -878,7 +884,7 @@ static int dav_method_get(request_rec *r)
                amt = DAV_READ_BLOCKSIZE;
            else {
                /* note: range_end - range_start is an ssize_t */
                amt = (size_t)(range_end - range_start + 1);
                amt = (apr_size_t)(range_end - range_start + 1);
            }

	    if ((err = (*resource->hooks->read_stream)(stream, buffer,
@@ -954,8 +960,8 @@ static int dav_method_put(request_rec *r)
    dav_stream *stream;
    dav_response *multi_response;
    int has_range;
    off_t range_start;
    off_t range_end;
    apr_off_t range_start;
    apr_off_t range_end;

    if ((result = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK)) != OK) {
	return result;