This set of changes gets rid of most of the libhttpd 64bit warnings on Windows at the cost of several httpd API changes. I defined AP_INT_TRUNC_CAST for use where there are size mismatches with APR API's (those APR API's will need to be updated in APR 2.0)
Comments before I commit?
Allan ----- Index: include/ap_mmn.h =================================================================== RCS file: /home/cvs/httpd-2.0/include/ap_mmn.h,v retrieving revision 1.69 diff -U3 -r1.69 ap_mmn.h --- include/ap_mmn.h 4 Jun 2004 22:40:46 -0000 1.69 +++ include/ap_mmn.h 7 Oct 2004 20:48:55 -0000 @@ -84,14 +84,15 @@ * changed ap_add_module, ap_add_loaded_module, * ap_setup_prelinked_modules, ap_process_resource_config * 20040425.1 (2.1.0-dev) Added ap_module_symbol_t and ap_prelinked_module_symbols + * 20041007 (2.1.0-dev) API changes to clean up 64bit compiles */
#define MODULE_MAGIC_COOKIE 0x41503230UL /* "AP20" */
#ifndef MODULE_MAGIC_NUMBER_MAJOR -#define MODULE_MAGIC_NUMBER_MAJOR 20040425 +#define MODULE_MAGIC_NUMBER_MAJOR 20041007 #endif -#define MODULE_MAGIC_NUMBER_MINOR 1 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 0 /* 0...n */
/** * Determine if the server's current MODULE_MAGIC_NUMBER is at least a Index: include/http_protocol.h =================================================================== RCS file: /home/cvs/httpd-2.0/include/http_protocol.h,v retrieving revision 1.92 diff -U3 -r1.92 http_protocol.h --- include/http_protocol.h 18 Jul 2004 20:06:38 -0000 1.92 +++ include/http_protocol.h 7 Oct 2004 20:48:55 -0000 @@ -340,7 +340,7 @@ * @return The number of bytes sent * @deffunc int ap_rputs(const char *str, request_rec *r) */ -AP_DECLARE(int) ap_rputs(const char *str, request_rec *r); +AP_DECLARE(apr_size_t) ap_rputs(const char *str, request_rec *r);
/** * Write a buffer for the current request @@ -359,7 +359,7 @@ * @return The number of bytes sent * @deffunc int ap_rvputs(request_rec *r, ...) */ -AP_DECLARE_NONSTD(int) ap_rvputs(request_rec *r,...); +AP_DECLARE_NONSTD(apr_size_t) ap_rvputs(request_rec *r,...);
/** * Output data to the client in a printf format @@ -369,7 +369,7 @@ * @return The number of bytes sent * @deffunc int ap_vrprintf(request_rec *r, const char *fmt, va_list vlist) */ -AP_DECLARE(int) ap_vrprintf(request_rec *r, const char *fmt, va_list vlist); +AP_DECLARE(apr_size_t) ap_vrprintf(request_rec *r, const char *fmt, va_list vlist);
/** * Output data to the client in a printf format @@ -379,7 +379,7 @@ * @return The number of bytes sent * @deffunc int ap_rprintf(request_rec *r, const char *fmt, ...) */ -AP_DECLARE_NONSTD(int) ap_rprintf(request_rec *r, const char *fmt,...) +AP_DECLARE_NONSTD(apr_size_t) ap_rprintf(request_rec *r, const char *fmt,...) __attribute__((format(printf,2,3))); /** * Flush all of the data for the current request to the client @@ -445,7 +445,7 @@ * if EOF, or -1 if there was an error * @deffunc long ap_get_client_block(request_rec *r, char *buffer, apr_size_t bufsiz) */ -AP_DECLARE(long) ap_get_client_block(request_rec *r, char *buffer, apr_size_t bufsiz); +AP_DECLARE(apr_size_t) ap_get_client_block(request_rec *r, char *buffer, apr_size_t bufsiz);
/** * In HTTP/1.1, any method can have a body. However, most GET handlers Index: include/httpd.h =================================================================== RCS file: /home/cvs/httpd-2.0/include/httpd.h,v retrieving revision 1.212 diff -U3 -r1.212 httpd.h --- include/httpd.h 12 Aug 2004 05:22:59 -0000 1.212 +++ include/httpd.h 7 Oct 2004 20:48:55 -0000 @@ -1091,7 +1091,7 @@ /** Pathname for ServerPath */ const char *path; /** Length of path */ - int pathlen; + apr_size_t pathlen;
/** Normal names for ServerAlias servers */ apr_array_header_t *names; @@ -1244,7 +1244,7 @@ * address of field is shifted to the next non-comma, non-whitespace * character. len is the length of the item excluding any beginning whitespace. */ -AP_DECLARE(const char *) ap_size_list_item(const char **field, int *len); +AP_DECLARE(const char *) ap_size_list_item(const char **field, apr_size_t *len);
/** * Retrieve an HTTP header field list item, as separated by a comma, @@ -1587,7 +1587,7 @@ * @param c The character to search for * @return The index of the first occurrence of c in str */ -AP_DECLARE(int) ap_ind(const char *str, char c); /* Sigh... */ +AP_DECLARE(apr_size_t) ap_ind(const char *str, char c); /* Sigh... */
/** * Search a string from right to left for the first occurrence of a @@ -1596,7 +1596,7 @@ * @param c The character to search for * @return The index of the first occurrence of c in str */ -AP_DECLARE(int) ap_rind(const char *str, char c); +AP_DECLARE(apr_size_t) ap_rind(const char *str, char c);
/** * Given a string, replace any bare " with \" . @@ -1746,6 +1746,10 @@ #endif
#define AP_NORESTART APR_OS_START_USEERR + 1 + +/* temporary casts for 64bit compiles where there are 32bit int type mismatches in APR APIs */ +#define AP_INT_TRUNC_CAST int +#define AP_INT32_TRUNC_CAST apr_int32_t
#ifdef __cplusplus } Index: include/scoreboard.h =================================================================== RCS file: /home/cvs/httpd-2.0/include/scoreboard.h,v retrieving revision 1.54 diff -U3 -r1.54 scoreboard.h --- include/scoreboard.h 15 Sep 2004 12:08:39 -0000 1.54 +++ include/scoreboard.h 7 Oct 2004 20:48:55 -0000 @@ -164,7 +164,7 @@ int ap_create_scoreboard(apr_pool_t *p, ap_scoreboard_e t); apr_status_t ap_reopen_scoreboard(apr_pool_t *p, apr_shm_t **shm, int detached); void ap_init_scoreboard(void *shared_score); -AP_DECLARE(int) ap_calc_scoreboard_size(void); +AP_DECLARE(apr_size_t) ap_calc_scoreboard_size(void); apr_status_t ap_cleanup_scoreboard(void *d);
AP_DECLARE(void) ap_create_sb_handle(ap_sb_handle_t **new_sbh, apr_pool_t *p, Index: include/util_script.h =================================================================== RCS file: /home/cvs/httpd-2.0/include/util_script.h,v retrieving revision 1.23 diff -U3 -r1.23 util_script.h --- include/util_script.h 9 Feb 2004 20:38:21 -0000 1.23 +++ include/util_script.h 7 Oct 2004 20:48:55 -0000 @@ -53,7 +53,7 @@ * @return The length of the path info * @deffunc int ap_find_path_info(const char *uri, const char *path_info) */ -AP_DECLARE(int) ap_find_path_info(const char *uri, const char *path_info); +AP_DECLARE(apr_size_t) ap_find_path_info(const char *uri, const char *path_info);
/** * Add CGI environment variables required by HTTP/1.1 to the request's @@ -131,7 +131,7 @@ * @deffunc int ap_scan_script_header_err_core(request_rec *r, char *buffer, int (*getsfunc)(char *, int, void *), void *getsfunc_data) */ AP_DECLARE(int) ap_scan_script_header_err_core(request_rec *r, char *buffer, - int (*getsfunc) (char *, int, void *), + int (*getsfunc) (char *, apr_size_t, void *), void *getsfunc_data);
#ifdef __cplusplus Index: modules/http/http_protocol.c =================================================================== RCS file: /home/cvs/httpd-2.0/modules/http/http_protocol.c,v retrieving revision 1.484 diff -U3 -r1.484 http_protocol.c --- modules/http/http_protocol.c 29 Sep 2004 14:38:42 -0000 1.484 +++ modules/http/http_protocol.c 7 Oct 2004 20:48:55 -0000 @@ -662,7 +662,7 @@ */ AP_DECLARE(int) ap_method_number_of(const char *method) { - int len = strlen(method); + apr_size_t len = strlen(method); int which = lookup_builtin_method(method, len);
if (which != UNKNOWN_METHOD) @@ -1858,7 +1858,7 @@ * Returns 0 on End-of-body, -1 on error or premature chunk end. * */ -AP_DECLARE(long) ap_get_client_block(request_rec *r, char *buffer, +AP_DECLARE(apr_size_t) ap_get_client_block(request_rec *r, char *buffer, apr_size_t bufsiz) { apr_status_t rv; Index: server/core.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/core.c,v retrieving revision 1.287 diff -U3 -r1.287 core.c --- server/core.c 22 Sep 2004 18:21:29 -0000 1.287 +++ server/core.c 7 Oct 2004 20:48:55 -0000 @@ -2298,7 +2298,7 @@ }
cmd->server->path = arg; - cmd->server->pathlen = (int)strlen(arg); + cmd->server->pathlen = strlen(arg); return NULL; }
@@ -3009,19 +3009,19 @@ }
static apr_status_t writev_it_all(apr_socket_t *s, - struct iovec *vec, int nvec, + struct iovec *vec, apr_size_t nvec, apr_size_t len, apr_size_t *nbytes) { apr_size_t bytes_written = 0; apr_status_t rv; apr_size_t n = len; - int i = 0; + apr_size_t i = 0;
*nbytes = 0;
/* XXX handle checking for non-blocking socket */ while (bytes_written != len) { - rv = apr_socket_sendv(s, vec + i, nvec - i, &n); + rv = apr_socket_sendv(s, vec + i, (AP_INT32_TRUNC_CAST)(nvec - i), &n); *nbytes += n; bytes_written += n; if (rv != APR_SUCCESS) @@ -4288,12 +4288,12 @@
memset(&hdtr, '\0', sizeof(hdtr)); if (nvec) { - hdtr.numheaders = nvec; + hdtr.numheaders = (AP_INT_TRUNC_CAST)nvec; hdtr.headers = vec; }
if (nvec_trailers) { - hdtr.numtrailers = nvec_trailers; + hdtr.numtrailers = (AP_INT_TRUNC_CAST)nvec_trailers; hdtr.trailers = vec_trailers; }
Index: server/protocol.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/protocol.c,v retrieving revision 1.153 diff -U3 -r1.153 protocol.c --- server/protocol.c 21 Sep 2004 21:07:23 -0000 1.153 +++ server/protocol.c 7 Oct 2004 20:48:55 -0000 @@ -1387,7 +1387,7 @@ return c; }
-AP_DECLARE(int) ap_rputs(const char *str, request_rec *r) +AP_DECLARE(apr_size_t) ap_rputs(const char *str, request_rec *r) { apr_size_t len;
@@ -1441,7 +1441,7 @@ return APR_SUCCESS; }
-AP_DECLARE(int) ap_vrprintf(request_rec *r, const char *fmt, va_list va) +AP_DECLARE(apr_size_t) ap_vrprintf(request_rec *r, const char *fmt, va_list va) { apr_size_t written; struct ap_vrprintf_data vd; @@ -1461,7 +1461,7 @@ *(vd.vbuff.curpos) = '\0';
if (written != -1) { - int n = vd.vbuff.curpos - vrprintf_buf; + apr_size_t n = vd.vbuff.curpos - vrprintf_buf;
/* last call to buffer_output, to finish clearing the buffer */ if (buffer_output(r, vrprintf_buf,n) != APR_SUCCESS) @@ -1473,10 +1473,10 @@ return written; }
-AP_DECLARE_NONSTD(int) ap_rprintf(request_rec *r, const char *fmt, ...) +AP_DECLARE_NONSTD(apr_size_t) ap_rprintf(request_rec *r, const char *fmt, ...) { va_list va; - int n; + apr_size_t n;
if (r->connection->aborted) return -1; @@ -1488,7 +1488,7 @@ return n; }
-AP_DECLARE_NONSTD(int) ap_rvputs(request_rec *r, ...) +AP_DECLARE_NONSTD(apr_size_t) ap_rvputs(request_rec *r, ...) { va_list va; const char *s; Index: server/request.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/request.c,v retrieving revision 1.137 diff -U3 -r1.137 request.c --- server/request.c 20 Aug 2004 20:58:49 -0000 1.137 +++ server/request.c 7 Oct 2004 20:48:56 -0000 @@ -1213,7 +1213,8 @@ /* We start now_merged from NULL since we want to build * a locations list that can be merged to any vhost. */ - int len, sec_idx; + apr_size_t len; + int sec_idx; int matches = cache->walked->nelts; walk_walked_t *last_walk = (walk_walked_t*)cache->walked->elts; cache->cached = entry_uri; Index: server/scoreboard.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/scoreboard.c,v retrieving revision 1.77 diff -U3 -r1.77 scoreboard.c --- server/scoreboard.c 22 Sep 2004 13:35:31 -0000 1.77 +++ server/scoreboard.c 7 Oct 2004 20:48:56 -0000 @@ -88,7 +88,7 @@ return APR_SUCCESS; }
-AP_DECLARE(int) ap_calc_scoreboard_size(void) +AP_DECLARE(apr_size_t) ap_calc_scoreboard_size(void) { ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &thread_limit); ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, &server_limit); Index: server/util.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/util.c,v retrieving revision 1.150 diff -U3 -r1.150 util.c --- server/util.c 15 Sep 2004 11:44:05 -0000 1.150 +++ server/util.c 7 Oct 2004 20:48:56 -0000 @@ -451,7 +451,7 @@ AP_DECLARE(void) ap_getparents(char *name) { char *next; - int l, w, first_dot; + apr_size_t l, w, first_dot;
/* Four paseses, as per RFC 1808 */ /* a) remove ./ path segments */ @@ -480,7 +480,7 @@ while (name[l] != '\0') { if (name[l] == '.' && name[l + 1] == '.' && IS_SLASH(name[l + 2]) && (l == 0 || IS_SLASH(name[l - 1]))) { - register int m = l + 3, n; + register apr_size_t m = l + 3, n;
l = l - 2; if (l >= 0) { @@ -592,7 +592,7 @@ { const char *last_slash = ap_strrchr_c(s, '/'); char *d; - int l; + apr_size_t l;
if (last_slash == NULL) { return apr_pstrdup(p, ""); @@ -623,7 +623,7 @@ AP_DECLARE(char *) ap_getword(apr_pool_t *atrans, const char **line, char stop) { const char *pos = *line; - int len; + apr_size_t len; char *res;
while ((*pos != stop) && *pos) { @@ -653,7 +653,7 @@ AP_DECLARE(char *) ap_getword_white(apr_pool_t *atrans, const char **line) { const char *pos = *line; - int len; + apr_size_t len; char *res;
while (!apr_isspace(*pos) && *pos) { @@ -705,12 +705,12 @@ * all honored */
-static char *substring_conf(apr_pool_t *p, const char *start, int len, +static char *substring_conf(apr_pool_t *p, const char *start, apr_size_t len, char quote) { char *result = apr_palloc(p, len + 2); char *resp = result; - int i; + apr_size_t i;
for (i = 0; i < len; ++i) { if (start[i] == '\\' && (start[i + 1] == '\\' @@ -887,11 +887,11 @@ return (int)EOF; }
-static void *cfg_getstr(void *buf, size_t bufsiz, void *param) +static void *cfg_getstr(void *buf, apr_size_t bufsiz, void *param) { apr_file_t *cfp = (apr_file_t *) param; apr_status_t rv; - rv = apr_file_gets(buf, bufsiz, cfp); + rv = apr_file_gets(buf, (AP_INT_TRUNC_CAST)bufsiz, cfp); if (rv == APR_SUCCESS) { return buf; } @@ -1152,7 +1152,7 @@ * of field is shifted to the next non-comma, non-whitespace character. * len is the length of the item excluding any beginning whitespace. */ -AP_DECLARE(const char *) ap_size_list_item(const char **field, int *len) +AP_DECLARE(const char *) ap_size_list_item(const char **field, apr_size_t *len) { const unsigned char *ptr = (const unsigned char *)*field; const unsigned char *token; @@ -1218,7 +1218,8 @@ const unsigned char *ptr; unsigned char *pos; char *token; - int addspace = 0, in_qpair = 0, in_qstr = 0, in_com = 0, tok_len = 0; + int addspace = 0, in_qpair = 0, in_qstr = 0, in_com = 0; + apr_size_t tok_len = 0;
/* Find the beginning and maximum length of the list item so that * we can allocate a buffer for the new string and reset the field. @@ -1411,7 +1412,7 @@ const char *ptr = *accept_line; const char *tok_start; char *token; - int tok_len; + apr_size_t tok_len;
/* Find first non-white byte */
@@ -1484,7 +1485,7 @@ AP_DECLARE(int) ap_find_last_token(apr_pool_t *p, const char *line, const char *tok) { - int llen, tlen, lidx; + apr_size_t llen, tlen, lidx;
if (!line) return 0; @@ -1969,7 +1970,7 @@ return (x ? 1 : 0); /* If the first character is ':', it's broken, too */ }
-AP_DECLARE(int) ap_ind(const char *s, char c) +AP_DECLARE(apr_size_t) ap_ind(const char *s, char c) { const char *p = ap_strchr_c(s, c);
@@ -1978,7 +1979,7 @@ return p - s; }
-AP_DECLARE(int) ap_rind(const char *s, char c) +AP_DECLARE(apr_size_t) ap_rind(const char *s, char c) { const char *p = ap_strrchr_c(s, c);
@@ -2079,10 +2080,10 @@ AP_DECLARE(char *) ap_pbase64encode(apr_pool_t *p, char *string) { char *encoded; - int l = strlen(string); + apr_size_t l = strlen(string);
- encoded = (char *) apr_palloc(p, 1 + apr_base64_encode_len(l)); - l = apr_base64_encode(encoded, string, l); + encoded = (char *) apr_palloc(p, 1 + apr_base64_encode_len((AP_INT_TRUNC_CAST)l)); + l = apr_base64_encode(encoded, string, (AP_INT_TRUNC_CAST)l); encoded[l] = '\0'; /* make binary sequence into string */
return encoded; Index: server/util_script.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/util_script.c,v retrieving revision 1.91 diff -U3 -r1.91 util_script.c --- server/util_script.c 1 Aug 2004 01:12:30 -0000 1.91 +++ server/util_script.c 7 Oct 2004 20:48:56 -0000 @@ -283,10 +283,10 @@ * and find as much of the two that match as possible. */
-AP_DECLARE(int) ap_find_path_info(const char *uri, const char *path_info) +AP_DECLARE(apr_size_t) ap_find_path_info(const char *uri, const char *path_info) { - int lu = strlen(uri); - int lp = strlen(path_info); + apr_size_t lu = strlen(uri); + apr_size_t lp = strlen(path_info);
while (lu-- && lp-- && uri[lu] == path_info[lp]);
@@ -354,7 +354,7 @@ apr_table_setn(e, "SCRIPT_NAME", r->uri); } else { - int path_info_start = ap_find_path_info(r->uri, r->path_info); + apr_size_t path_info_start = ap_find_path_info(r->uri, r->path_info);
apr_table_setn(e, "SCRIPT_NAME", apr_pstrndup(r->pool, r->uri, path_info_start)); @@ -394,12 +394,12 @@ }
AP_DECLARE(int) ap_scan_script_header_err_core(request_rec *r, char *buffer, - int (*getsfunc) (char *, int, void *), + int (*getsfunc) (char *, apr_size_t, void *), void *getsfunc_data) { char x[MAX_STRING_LEN]; char *w, *l; - int p; + apr_size_t p; int cgi_status = HTTP_OK; apr_table_t *merge; apr_table_t *cookie_table; @@ -581,9 +581,9 @@ return OK; }
-static int getsfunc_FILE(char *buf, int len, void *f) +static int getsfunc_FILE(char *buf, apr_size_t len, void *f) { - return apr_file_gets(buf, len, (apr_file_t *) f) == APR_SUCCESS; + return apr_file_gets(buf, (AP_INT_TRUNC_CAST)len, (apr_file_t *) f) == APR_SUCCESS; }
AP_DECLARE(int) ap_scan_script_header_err(request_rec *r, apr_file_t *f, @@ -592,7 +592,7 @@ return ap_scan_script_header_err_core(r, buffer, getsfunc_FILE, f); }
-static int getsfunc_BRIGADE(char *buf, int len, void *arg) +static int getsfunc_BRIGADE(char *buf, apr_size_t len, void *arg) { apr_bucket_brigade *bb = (apr_bucket_brigade *)arg; const char *dst_end = buf + len - 1; /* leave room for terminating null */ @@ -650,11 +650,11 @@ const char *curpos; };
-static int getsfunc_STRING(char *w, int len, void *pvastrs) +static int getsfunc_STRING(char *w, apr_size_t len, void *pvastrs) { struct vastrs *strs = (struct vastrs*) pvastrs; const char *p; - int t; + apr_size_t t;
if (!strs->curpos || !*strs->curpos) return 0; @@ -674,7 +674,7 @@ } else strs->curpos += t; - return t; + return t > 0 ? 1 : 0; }
/* ap_scan_script_header_err_strs() accepts additional const char* args...