summaryrefslogtreecommitdiff
path: root/packages/httpd24
diff options
context:
space:
mode:
authormichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2014-01-24 10:40:22 +0000
committermichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2014-01-24 10:40:22 +0000
commit8b243a13ee0bbd29815d1a5f1454bd4e99abd524 (patch)
tree1a1e4d17e70cdf8f8c6a236682c96f0e51825935 /packages/httpd24
parentcdfe901e0e02a9d647cb80c729a706589d2db6fb (diff)
downloadfpc-8b243a13ee0bbd29815d1a5f1454bd4e99abd524.tar.gz
* Patch from Dennis (Bug ID 25534) to add some APR functions to the interface
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@26573 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/httpd24')
-rw-r--r--packages/httpd24/fpmake.pp1
-rw-r--r--packages/httpd24/src/apr/apr24.pas1
-rw-r--r--packages/httpd24/src/apr/apr_tables.inc11
-rw-r--r--packages/httpd24/src/aprutil/apr_buckets.inc42
-rw-r--r--packages/httpd24/src/http_config.inc22
-rw-r--r--packages/httpd24/src/httpd24.pas235
-rw-r--r--packages/httpd24/src/util_filter.inc6
7 files changed, 283 insertions, 35 deletions
diff --git a/packages/httpd24/fpmake.pp b/packages/httpd24/fpmake.pp
index 0f553a25bb..2223fb6c7d 100644
--- a/packages/httpd24/fpmake.pp
+++ b/packages/httpd24/fpmake.pp
@@ -59,6 +59,7 @@ begin
AddInclude('http_config.inc');
AddInclude('http_core.inc');
AddInclude('util_filter.inc');
+ AddInclude('util_script.inc');
AddInclude('http_log.inc');
AddInclude('http_protocol.inc');
AddInclude('aprutil/apr_buckets.inc');
diff --git a/packages/httpd24/src/apr/apr24.pas b/packages/httpd24/src/apr/apr24.pas
index 35a932a391..a8eb4cbcb2 100644
--- a/packages/httpd24/src/apr/apr24.pas
+++ b/packages/httpd24/src/apr/apr24.pas
@@ -138,5 +138,4 @@ type
implementation
-
end.
diff --git a/packages/httpd24/src/apr/apr_tables.inc b/packages/httpd24/src/apr/apr_tables.inc
index c0538c334b..210b0d33c9 100644
--- a/packages/httpd24/src/apr/apr_tables.inc
+++ b/packages/httpd24/src/apr/apr_tables.inc
@@ -53,6 +53,7 @@
type
apr_table_t = record end;
Papr_table_t = ^apr_table_t;
+ PPapr_table_t = ^Papr_table_T;
//** @see apr_array_header_t */
//typedef struct apr_array_header_t apr_array_header_t;
@@ -458,7 +459,7 @@ function apr_table_overlay(t: Papr_table_t;
//typedef int (apr_table_do_callback_fn_t)(void *rec, const char *key,
// const char *value);
type
- apr_table_do_callback_fn_t = function (rec: Pointer; const key, value: PChar): Integer;
+ apr_table_do_callback_fn_t = function (rec: Pointer; const key, value: PChar): Integer; cdecl;
Papr_table_do_callback_fn_t = ^apr_table_do_callback_fn_t;
{**
@@ -487,6 +488,12 @@ type
//#endif
// ;
+// This has to be a GNU C-Declaration
+
+function apr_table_do(comp: apr_table_do_callback_fn_t; rec: Pointer;
+ t: Papr_table_t): Integer; cdecl; varargs;
+ external LibAPR Name 'apr_table_do';
+
{**
* Iterate over a table running the provided function once for every
* element in the table. The @param vp varargs parameter must be a
@@ -509,7 +516,7 @@ type
//APR_DECLARE(int) apr_table_vdo(apr_table_do_callback_fn_t *comp,
// void *rec, const apr_table_t *t, va_list vp);
function apr_table_vdo(comp: Papr_table_do_callback_fn_t;
- rec: Pointer; const t: Papr_table_t; vp: va_list): Integer;
+ rec: Pointer; t: Papr_table_t; vp: va_list): Integer;
{$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
external LibAPR name LibNamePrefix + 'apr_table_vdo' + LibSuff16;
diff --git a/packages/httpd24/src/aprutil/apr_buckets.inc b/packages/httpd24/src/aprutil/apr_buckets.inc
index a8c6144922..6675019f04 100644
--- a/packages/httpd24/src/aprutil/apr_buckets.inc
+++ b/packages/httpd24/src/aprutil/apr_buckets.inc
@@ -49,6 +49,10 @@
const
//** default bucket buffer size - 8KB minus room for memory allocator headers */
APR_BUCKET_BUFF_SIZE = 8000;
+//** This bucket type represents actual data to send to the client. */
+ APR_BUCKET_DATA = 0;
+//** This bucket type represents metadata. */
+ APR_BUCKET_METADATA = 1;
//** Determines how a bucket or brigade should be read */
type
@@ -132,16 +136,8 @@ Papr_bucket_alloc_t = ^apr_bucket_alloc_t;
//typedef struct apr_bucket_type_t apr_bucket_type_t;
Papr_bucket_type_t = ^apr_bucket_type_t;
-{from below}
-is_metadata = (
- //** This bucket type represents actual data to send to the client. */
- APR_BUCKET_DATA = 0,
- //** This bucket type represents metadata. */
- APR_BUCKET_METADATA = 1
-);
-
// void ( *destroy)(void *data);
- destroy_t = procedure(data: Pointer);
+ destroy_t = procedure(data: Pointer); cdecl;
// apr_status_t ( *read)(apr_bucket *b, const char **str, apr_size_t *len,
// apr_read_type_e block);
@@ -181,7 +177,7 @@ is_metadata = (
* that are the "content" of the brigade and "metadata" describes
* that data but is not a proper part of it.
*}
-{is_metadata is moved up}
+ is_metadata : integer;
// enum {
// /** This bucket type represents actual data to send to the client. */
// APR_BUCKET_DATA = 0,
@@ -253,7 +249,7 @@ is_metadata = (
{from below}
// void (*free)(void *e);
- free_t = procedure(e: Pointer);
+ free_t = procedure(e: Pointer); cdecl;
link_t = record
next: Papr_bucket;
@@ -341,7 +337,7 @@ is_metadata = (
* Function called when a brigade should be flushed
*}
//typedef apr_status_t (*apr_brigade_flush)(apr_bucket_brigade *bb, void *ctx);
-apr_brigade_flush = function(bb: Papr_bucket_brigade; ctx: Pointer): apr_status_t;
+apr_brigade_flush = function(bb: Papr_bucket_brigade; ctx: Pointer): apr_status_t; cdecl;
(* fpc -> big part ignored here
{*
@@ -392,14 +388,12 @@ apr_brigade_flush = function(bb: Papr_bucket_brigade; ctx: Pointer): apr_status_
* @return The magic pointer value
*/
#define APR_BRIGADE_SENTINEL(b) APR_RING_SENTINEL(&(b)->list, apr_bucket, link)
-
/**
* Determine if the bucket brigade is empty
* @param b The brigade to check
* @return true or false
*/
#define APR_BRIGADE_EMPTY(b) APR_RING_EMPTY(&(b)->list, apr_bucket, link)
-
/**
* Return the first bucket in a brigade
* @param b The brigade to query
@@ -412,7 +406,6 @@ apr_brigade_flush = function(bb: Papr_bucket_brigade; ctx: Pointer): apr_status_
* @return The last bucket in the brigade
*/
#define APR_BRIGADE_LAST(b) APR_RING_LAST(&(b)->list)
-
/**
* Insert a list of buckets at the front of a brigade
* @param b The brigade to add to
@@ -489,13 +482,11 @@ apr_brigade_flush = function(bb: Papr_bucket_brigade; ctx: Pointer): apr_status_
* @return The previous bucket
*/
#define APR_BUCKET_PREV(e) APR_RING_PREV((e), link)
-
/**
* Remove a bucket from its bucket brigade
* @param e The bucket to remove
*/
#define APR_BUCKET_REMOVE(e) APR_RING_REMOVE((e), link)
-
/**
* Initialize a new bucket's prev/next pointers
* @param e The bucket to initialize
@@ -509,7 +500,6 @@ apr_brigade_flush = function(bb: Papr_bucket_brigade; ctx: Pointer): apr_status_
* @return true or false
*/
#define APR_BUCKET_IS_METADATA(e) ((e)->type->is_metadata)
-
/**
* Determine if a bucket is a FLUSH bucket
* @param e The bucket to inspect
@@ -607,7 +597,7 @@ Papr_bucket_heap = ^apr_bucket_heap;
{from below}
// void (*free_func)(void *data);
-free_func_t = procedure (data: Pointer);
+free_func_t = procedure (data: Pointer); cdecl;
{**
* A bucket referring to data allocated off the heap.
@@ -819,8 +809,13 @@ APU_DECLARE(apr_status_t) apr_brigade_partition(apr_bucket_brigade *b,
*/
APU_DECLARE(apr_status_t) apr_brigade_length(apr_bucket_brigade *bb,
int read_all,
- apr_off_t *length);
+ apr_off_t *length);*)
+function apr_brigade_length(bb: Papr_bucket_brigade; read_all: Integer;
+ length: Papr_off_t): apr_status_t; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF}
+ external LibAPRUtil name LibNamePrefix + 'apr_brigade_length' + LibSuff12;
+
+(*
/**
* Take a bucket brigade and store the data in a flat char*
* @param bb The bucket brigade to create the char* from
@@ -830,8 +825,13 @@ APU_DECLARE(apr_status_t) apr_brigade_length(apr_bucket_brigade *bb,
*/
APU_DECLARE(apr_status_t) apr_brigade_flatten(apr_bucket_brigade *bb,
char *c,
- apr_size_t *len);
+ apr_size_t *len);*)
+
+function apr_brigade_flatten(bb: Papr_bucket_brigade; c: Pchar;
+ len: Papr_size_t): apr_status_t;{$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF}
+ external LibAPRUtil name LibNamePrefix + 'apr_brigade_flatten' + LibSuff12;
+(*
/**
* Creates a pool-allocated string representing a flat bucket brigade
* @param bb The bucket brigade to create the char array from
diff --git a/packages/httpd24/src/http_config.inc b/packages/httpd24/src/http_config.inc
index 0a8e613f32..67fc5783d9 100644
--- a/packages/httpd24/src/http_config.inc
+++ b/packages/httpd24/src/http_config.inc
@@ -119,6 +119,14 @@ type
//#if defined(AP_HAVE_DESIGNATED_INITIALIZER) || defined(DOXYGEN)
+ tnoargsfunc = function(parms: Pcmd_parms; mconfig: pointer): Pchar; cdecl;
+ trawargsfunc = function(parms: Pcmd_parms; mconfig: pointer; args: Pchar): Pchar; cdecl;
+ ttakeargvfunc = function(parms: Pcmd_parms; mconfig: pointer; argc: longint; argv: PPchar): Pchar; cdecl;
+ ttake1func = function(parms: Pcmd_parms; mconfig: pointer; w: Pchar): Pchar; cdecl;
+ ttake2func = function(parms: Pcmd_parms; mconfig: pointer; w, w2: Pchar): Pchar; cdecl;
+ ttake3func = function(parms: Pcmd_parms; mconfig: pointer; w, w2, w3: Pchar): Pchar; cdecl;
+ tflagfunc = function(parms: Pcmd_parms; mconfig: pointer; on_: longint): Pchar; cdecl;
+
{**
* All the types of functions that can be used in directives
* @internal
@@ -126,25 +134,25 @@ type
cmd_func = record
case longint of
{** function to call for a no-args *}
- 0 : ( no_args : function (parms:Pcmd_parms; mconfig:pointer):Pchar;cdecl; );
+ 0 : ( no_args : tnoargsfunc);
{** function to call for a raw-args *}
- 1 : ( raw_args : function (parms:Pcmd_parms; mconfig:pointer; args:Pchar):Pchar;cdecl; );
+ 1 : ( raw_args : trawargsfunc);
{** function to call for a argv/argc *}
- 2 : ( take_argv : function (parms:Pcmd_parms; mconfig:pointer; argc:longint; argv:PPchar):Pchar;cdecl; );
+ 2 : ( take_argv : ttakeargvfunc);
{** function to call for a take1 *}
- 3 : ( take1 : function (parms:Pcmd_parms; mconfig:pointer; w:Pchar):Pchar;cdecl; );
+ 3 : ( take1 : ttake1func);
{** function to call for a take2 *}
- 4 : ( take2 : function (parms:Pcmd_parms; mconfig:pointer; w:Pchar; w2:Pchar):Pchar;cdecl; );
+ 4 : ( take2 : ttake2func);
{** function to call for a take3 *}
- 5 : ( take3 : function (parms:Pcmd_parms; mconfig:pointer; w:Pchar; w2:Pchar; w3:Pchar):Pchar;cdecl; );
+ 5 : ( take3 : ttake3func);
{** function to call for a flag *}
- 6 : ( flag : function (parms:Pcmd_parms; mconfig:pointer; on_:longint):Pchar;cdecl; );
+ 6 : ( flag : tflagfunc);
end;
Pcmd_func = ^cmd_func;
(*
diff --git a/packages/httpd24/src/httpd24.pas b/packages/httpd24/src/httpd24.pas
index 93ff4e2015..9dec940306 100644
--- a/packages/httpd24/src/httpd24.pas
+++ b/packages/httpd24/src/httpd24.pas
@@ -43,6 +43,7 @@
* @
}
unit httpd24;
+
{$ifdef fpc}
{$mode delphi}{$H+}
{$endif}
@@ -50,6 +51,8 @@ unit httpd24;
{$PACKRECORDS C}
{$endif}
+{$PACKENUM 4}
+
{$IFDEF Apache1_3}
{$WARNING Apache1_3 is defined somewhere, but the HTTPD unit included is for Apache2_4}
{$ENDIF}
@@ -158,11 +161,101 @@ type
//{$include http_connection.inc}
//{$include http_vhost.inc}
-//{$include util_script.inc}
+{$include util_script.inc}
//{$include util_time.inc}
//{$include util_md5.inc}
//{$include ap_mpm.inc}
+// APRUtil External Variables //
+
+var
+
+ {/* All of the bucket types implemented by the core */
+ /**
+ * The flush bucket type. This signifies that all data should be flushed to
+ * the next filter. The flush bucket should be sent with the other buckets.
+ */}
+ apr_bucket_type_flush: apr_bucket_type_t external LibAPRUtil;
+ {/**
+ * The EOS bucket type. This signifies that there will be no more data, ever.
+ * All filters MUST send all data to the next filter when they receive a
+ * bucket of this type
+ */}
+ apr_bucket_type_eos: apr_bucket_type_t external LibAPRUtil;
+ {/**
+ * The FILE bucket type. This bucket represents a file on disk
+ */}
+ apr_bucket_type_file: apr_bucket_type_t external LibAPRUtil;
+ {/**
+ * The HEAP bucket type. This bucket represents a data allocated from the
+ * heap.
+ */}
+ apr_bucket_type_heap: apr_bucket_type_t external LibAPRUtil;
+ {$IFDEF APR_HAS_MMAP}
+ {/**
+ * The MMAP bucket type. This bucket represents an MMAP'ed file
+ */}
+ apr_bucket_type_mmap: apr_bucket_type_t external LibAPRUtil;
+ {$ENDIF}
+ {/**
+ * The POOL bucket type. This bucket represents a data that was allocated
+ * from a pool. IF this bucket is still available when the pool is cleared,
+ * the data is copied on to the heap.
+ */}
+ apr_bucket_type_pool: apr_bucket_type_t external LibAPRUtil;
+ {/**
+ * The PIPE bucket type. This bucket represents a pipe to another program.
+ */}
+ apr_bucket_type_pipe: apr_bucket_type_t external LibAPRUtil;
+ {/**
+ * The IMMORTAL bucket type. This bucket represents a segment of data that
+ * the creator is willing to take responsibility for. The core will do
+ * nothing with the data in an immortal bucket
+ */}
+ apr_bucket_type_immortal: apr_bucket_type_t external LibAPRUtil;
+ {/**
+ * The TRANSIENT bucket type. This bucket represents a data allocated off
+ * the stack. When the setaside function is called, this data is copied on
+ * to the heap
+ */}
+ apr_bucket_type_transient: apr_bucket_type_t external LibAPRUtil;
+ {/**
+ * The SOCKET bucket type. This bucket represents a socket to another machine
+ */}
+ apr_bucket_type_socket: apr_bucket_type_t external LibAPRUtil;
+
+//********************************************************************
+ { from apr_buckets.inc }
+
+ function APR_BRIGADE_SENTINEL(b: Papr_bucket_brigade): Papr_bucket;
+ function APR_BRIGADE_FIRST(b: Papr_bucket_brigade): Papr_bucket;
+ function APR_BRIGADE_LAST(b: Papr_bucket_brigade): Papr_bucket;
+ function APR_BUCKET_NEXT(e: Papr_bucket): Papr_bucket;
+ function APR_BUCKET_PREV(e: Papr_bucket): Papr_bucket;
+ procedure APR_BUCKET_REMOVE(e: Papr_bucket);
+ function APR_BUCKET_IS_METADATA(e: Papr_bucket): boolean;
+ function APR_BUCKET_IS_FLUSH(e: Papr_bucket): boolean;
+ function APR_BUCKET_IS_EOS(e: Papr_bucket): boolean;
+ function APR_BUCKET_IS_FILE(e: Papr_bucket): boolean;
+ function APR_BUCKET_IS_PIPE(e: Papr_bucket): boolean;
+ function APR_BUCKET_IS_SOCKET(e: Papr_bucket): boolean;
+ function APR_BUCKET_IS_HEAP(e: Papr_bucket): boolean;
+ function APR_BUCKET_IS_TRANSIENT(e: Papr_bucket): boolean;
+ function APR_BUCKET_IS_IMMORTAL(e: Papr_bucket): boolean;
+ {$IFDEF APR_HAS_MMAP}
+ function APR_BUCKET_IS_MMAP(e: Papr_bucket): boolean;
+ {$ENDIF}
+ function APR_BUCKET_IS_POOL(e: Papr_bucket): boolean;
+ function apr_bucket_read(e: Papr_bucket; const str: PPChar; len: Papr_size_t;
+ block: apr_read_type_e): apr_status_t;
+
+ function AP_INIT_TAKE1(directive: Pchar; const take1func : ttake1func;
+ mconfig: Pointer; where: Integer; help: Pchar): command_rec;
+ function AP_INIT_TAKE2(directive: Pchar; const take2func: ttake2func;
+ mconfig: Pointer; where: Integer; help: Pchar): command_rec;
+ function AP_INIT_TAKE3(directive: Pchar; const take3func: ttake3func;
+ mconfig: Pointer; where: Integer; help: Pchar): command_rec;
+
implementation
{ Internal representation for a HTTP protocol number, e.g., HTTP/1.1 }
function HTTP_VERSION(major, minor: Integer): Integer;
@@ -245,6 +338,146 @@ implementation
end;
//********************************************************************
+ { from apr_buckets.inc }
+
+ function APR_BRIGADE_FIRST(b: Papr_bucket_brigade): Papr_bucket; inline;
+ begin
+ APR_BRIGADE_FIRST := b^.list.next;
+ end;
+
+ function APR_BRIGADE_LAST(b: Papr_bucket_brigade): Papr_bucket; inline;
+ begin
+ APR_BRIGADE_LAST := b^.list.prev;
+ end;
+
+ function APR_BRIGADE_SENTINEL(b: Papr_bucket_brigade): Papr_bucket; inline;
+ var b_: apr_bucket; // This should technically be <type> and link shouldn't be hard-coded..
+ begin
+ APR_BRIGADE_SENTINEL := Papr_bucket(pointer(@b^.list.next) - (pointer(@b_.Link) - pointer(@b_) ) );
+ end;
+
+ function APR_BUCKET_IS_METADATA(e: Papr_bucket): boolean; inline;
+ begin
+ APR_BUCKET_IS_METADATA := e^.type_^.is_metadata = APR_BUCKET_METADATA;
+ end;
+
+ function APR_BUCKET_IS_FLUSH(e: Papr_bucket): boolean; inline;
+ begin
+ APR_BUCKET_IS_FLUSH := e^.type_ = @apr_bucket_type_flush;
+ end;
+
+ function APR_BUCKET_IS_EOS(e: Papr_bucket): boolean; inline;
+ begin
+ APR_BUCKET_IS_EOS := e^.type_ = @apr_bucket_type_eos;
+ end;
+
+ function APR_BUCKET_IS_FILE(e: Papr_bucket): boolean; inline;
+ begin
+ APR_BUCKET_IS_FILE := e^.type_ = @apr_bucket_type_file;
+ end;
+
+ function APR_BUCKET_IS_PIPE(e: Papr_bucket): boolean; inline;
+ begin
+ APR_BUCKET_IS_PIPE := e^.type_ = @apr_bucket_type_pipe;
+ end;
+
+ function APR_BUCKET_IS_SOCKET(e: Papr_bucket): boolean; inline;
+ begin
+ APR_BUCKET_IS_SOCKET := e^.type_ = @apr_bucket_type_socket;
+ end;
+
+ function APR_BUCKET_IS_HEAP(e: Papr_bucket): boolean; inline;
+ begin
+ APR_BUCKET_IS_HEAP := e^.type_ = @apr_bucket_type_heap;
+ end;
+
+ function APR_BUCKET_IS_TRANSIENT(e: Papr_bucket): boolean; inline;
+ begin
+ APR_BUCKET_IS_TRANSIENT := e^.type_ = @apr_bucket_type_transient;
+ end;
+
+ function APR_BUCKET_IS_IMMORTAL(e: Papr_bucket): boolean; inline;
+ begin
+ APR_BUCKET_IS_IMMORTAL := e^.type_ = @apr_bucket_type_immortal;
+ end;
+
+ {$IFDEF APR_HAS_MMAP}
+ function APR_BUCKET_IS_MMAP(e: Papr_bucket): boolean; inline;
+ begin
+ APR_BUCKET_IS_MMAP := e^.type_ = @apr_bucket_type_mmap;
+ end;
+ {$ENDIF}
+
+ function APR_BUCKET_IS_POOL(e: Papr_bucket): boolean; inline;
+ begin
+ APR_BUCKET_IS_POOL := e^.type_ = @apr_bucket_type_pool;
+ end;
+
+ function APR_BUCKET_NEXT(e: Papr_bucket): Papr_bucket; inline;
+ begin
+ APR_BUCKET_NEXT := e^.link.next;
+ end;
+
+ function APR_BUCKET_PREV(e: Papr_bucket): Papr_bucket; inline;
+ begin
+ APR_BUCKET_PREV := e^.link.prev;
+ end;
+
+ procedure APR_BUCKET_REMOVE(e: Papr_bucket); inline;
+ begin
+ APR_BUCKET_PREV(e)^.link.next := APR_BUCKET_NEXT(e);
+ APR_BUCKET_NEXT(e)^.link.prev := APR_BUCKET_PREV(e);
+ end;
+
+ function apr_bucket_read(e: Papr_bucket; const str: PPChar; len: Papr_size_t;
+ block: apr_read_type_e): apr_status_t; inline;
+ begin
+ apr_bucket_read := e^.type_^.read(e, str, len, block);
+ end;
+
+ function AP_INIT_TAKE1(directive: Pchar; const take1func: ttake1func;
+ mconfig: Pointer; where: Integer; help: Pchar): command_rec; inline;
+ begin
+ with result DO
+ begin
+ name := directive;
+ func.take1 := take1func;
+ cmd_data := mconfig;
+ req_override := where;
+ args_how := TAKE1;
+ errmsg := help;
+ end;
+ end;
+
+ function AP_INIT_TAKE2(directive: Pchar; const take2func: ttake2func;
+ mconfig: Pointer; where: Integer; help: Pchar): command_rec; inline;
+ begin
+ with result DO
+ begin
+ name := directive;
+ func.take2 := take2func;
+ cmd_data := mconfig;
+ req_override := where;
+ args_how := TAKE2;
+ errmsg := help;
+ end;
+ end;
+
+ function AP_INIT_TAKE3(directive: Pchar; const take3func: ttake3func;
+ mconfig: Pointer; where: Integer; help: Pchar): command_rec; inline;
+ begin
+ with result DO
+ begin
+ name := directive;
+ func.take3 := take3func;
+ cmd_data := mconfig;
+ req_override := where;
+ args_how := TAKE3;
+ errmsg := help;
+ end;
+ end;
+
+//********************************************************************
{ from http_config.inc }
{ Use this in all standard modules }
diff --git a/packages/httpd24/src/util_filter.inc b/packages/httpd24/src/util_filter.inc
index fe24b35266..cd022340c2 100644
--- a/packages/httpd24/src/util_filter.inc
+++ b/packages/httpd24/src/util_filter.inc
@@ -135,15 +135,15 @@ type
* @
}
ap_out_filter_func = function (f: Pap_filter_t;
- b: Papr_bucket_brigade):apr_status_t;
+ b: Papr_bucket_brigade):apr_status_t; cdecl;
ap_in_filter_func = function (f: Pap_filter_t;
b: Papr_bucket_brigade;
mode: ap_input_mode_t;
block: apr_read_type_e;
- readbytes: apr_off_t): apr_status_t;
+ readbytes: apr_off_t): apr_status_t; cdecl;
- ap_init_filter_func = function (f: Pap_filter_t): Longint;
+ ap_init_filter_func = function (f: Pap_filter_t): Longint; cdecl;
Pap_filter_func = ^ap_filter_func;
ap_filter_func = record