--- mod_encoding.c.orig	2006-05-20 18:04:44.000000000 +0900
+++ mod_encoding.c	2006-05-20 18:03:31.000000000 +0900
@@ -74,7 +74,8 @@
 #include <http_log.h>
 #include <http_protocol.h>
 #include <http_request.h>
-/* #include <ap_compat.h> */
+#include <ap_compat.h>
+#include <apr_strings.h>
 
 #include <iconv_hook/iconv.h>
 
@@ -185,13 +186,20 @@
   char *buff;
   char *keys[] = { "Destination", NULL };
   int   i;
+  const char *query_string;
+  char *unparsed_uri;
 
   /* Normalize encoding in HTTP request line */
-  ap_unescape_url(r->unparsed_uri);
-  if ((buff = iconv_string(r, cd, r->unparsed_uri,
-			   strlen(r->unparsed_uri))) == NULL)
-    return -1;
-  ap_parse_uri(r, buff);
+  query_string = apr_pstrdup(r->pool, r->unparsed_uri);
+  unparsed_uri = ap_getword(r->pool, &query_string, '?');
+  ap_unescape_url(unparsed_uri);
+  if ((buff = iconv_string(r, cd, unparsed_uri, strlen(unparsed_uri))) == NULL)
+      return -1;
+  if (query_string && strlen(query_string) > 0) {
+     ap_parse_uri(r, apr_pstrcat(r->pool, buff, "?", query_string, NULL));
+  } else {
+     ap_parse_uri(r, buff);
+  }
   ap_getparents(r->uri); /* normalize given path for security */
 
   /* Normalize encoding in HTTP request header(s) */
@@ -232,7 +240,7 @@
 
 
   for (i = 0 ; i < encmap->nelts ; i += 2) {
-    if (ap_regexec((regex_t *)list[i], lookup, 0, NULL, 0) == 0) {
+    if (ap_regexec((ap_regex_t *)list[i], lookup, 0, NULL, 0) == 0) {
       apr_array_cat(encs, (apr_array_header_t *)list[i + 1]);
       return encs;
     }
@@ -290,7 +298,7 @@
   /* register useragent with UserAgent: pattern */
   if (*args && (arg = ap_getword_conf_nc(cmd->pool, &args))) {
     *(void **)apr_array_push(conf->client_encoding) =
-      ap_pregcomp(cmd->pool, arg, REG_EXTENDED|REG_ICASE|REG_NOSUB);
+      ap_pregcomp(cmd->pool, arg, AP_REG_EXTENDED|AP_REG_ICASE|AP_REG_NOSUB);
   }
 
   /* register list of possible encodings from above useragent */
@@ -351,25 +359,25 @@
  ***************************************************************************/
 
 static const command_rec mod_enc_commands[] = {
-  {"EncodingEngine",
-   set_encoding_engine, NULL,
-   OR_ALL, FLAG,  "Usage: EncodingEngine (on|off)"},
-
-  {"SetServerEncoding",
-   set_server_encoding, NULL,
-   OR_ALL, TAKE1, "Usage: SetServerEncoding <enc>"},
-
-  {"AddClientEncoding",
-   add_client_encoding, NULL,
-   OR_ALL, RAW_ARGS, "Usage: AddClientEncoding <agent> <enc> [<enc> ...]"},
-
-  {"DefaultClientEncoding",
-   default_client_encoding, NULL,
-   OR_ALL, RAW_ARGS, "Usage: DefaultClientEncoding <enclist>"},
-
-  {"NormalizeUsername",
-   set_normalize_username, NULL,
-   OR_ALL, FLAG, "Usage: NormalizeUsername (on|off)"},
+  AP_INIT_FLAG("EncodingEngine",
+                set_encoding_engine, NULL,
+                RSRC_CONF | ACCESS_CONF, "Usage: EncodingEngine (on|off)"),
+
+  AP_INIT_TAKE1("SetServerEncoding",
+                set_server_encoding, NULL,
+                RSRC_CONF | ACCESS_CONF, "Usage: SetServerEncoding <enc>"),
+
+  AP_INIT_RAW_ARGS("AddClientEncoding",
+                   add_client_encoding, NULL,
+                   RSRC_CONF | ACCESS_CONF, "Usage: AddClientEncoding <agent> <enc> [<enc> ...]"),
+
+  AP_INIT_RAW_ARGS("DefaultClientEncoding",
+                   default_client_encoding, NULL,
+                   RSRC_CONF | ACCESS_CONF, "Usage: DefaultClientEncoding <enclist>"),
+
+  AP_INIT_FLAG("NormalizeUsername",
+                set_normalize_username, NULL,
+                RSRC_CONF | ACCESS_CONF | OR_AUTHCFG, "Usage: NormalizeUsername (on|off)"),
 
   {NULL}
 };
