diff -Naur privoxy-3.0.19-stable/configure.in privoxy-3.0.19-stable-haiku/configure.in
--- privoxy-3.0.19-stable/configure.in	2012-09-12 20:00:37.292814848 -0400
+++ privoxy-3.0.19-stable-haiku/configure.in	2012-09-12 22:21:25.287309824 -0400
@@ -160,7 +160,7 @@
 dnl =================================================================
 
 
-if test "$EMXOS2" = yes; then
+if test "$EMXOS2" = yes || test "$host_os" = haiku; then
   echo "Skipping user and group validity stuff.";
 
 else
@@ -677,6 +677,26 @@
 AC_SUBST(AMIGAOS_ONLY)
 
 dnl =================================================================
+dnl Haiku specific
+dnl =================================================================
+
+if test "$host_os" = haiku; then
+  # Omit the "-pthread" flag to gcc, even when building with gcc 2.95
+  SPECIAL_CFLAGS=
+
+  # Haiku's pthreads implementation exists in its system library,
+  # libroot, not in a separate pthreads library
+  PTHREAD_LIB=
+
+  # Networking code exists in libnetwork
+  SOCKET_LIB=-lnetwork
+
+  # Search Haiku's common-library folder to find its pcre and
+  # pcreposix libraries
+  LIBS="-L/boot/common/lib $LIBS"
+fi
+
+dnl =================================================================
 dnl Check for standard compiler stuff
 dnl =================================================================
 
diff -Naur privoxy-3.0.19-stable/filters.c privoxy-3.0.19-stable-haiku/filters.c
--- privoxy-3.0.19-stable/filters.c	2012-09-12 20:00:37.720371712 -0400
+++ privoxy-3.0.19-stable-haiku/filters.c	2012-09-12 22:21:28.150470656 -0400
@@ -1095,6 +1095,11 @@
    char *new_url = NULL;
    char *tmp;
 
+   char *url_segment = NULL;
+   char **url_segments;
+   size_t max_segments;
+   int segments;
+
    assert(subject);
    assert(redirect_mode);
 
@@ -1117,14 +1122,13 @@
        * and look for a URL in the decoded result.
        * Stop the search after the first match.
        */
-      char *url_segment = NULL;
+
       /*
        * XXX: This estimate is guaranteed to be high enough as we
        *      let ssplit() ignore empty fields, but also a bit wasteful.
        */
-      size_t max_segments = strlen(subject) / 2;
-      char **url_segments = malloc(max_segments * sizeof(char *));
-      int segments;
+      max_segments = strlen(subject) / 2;
+      url_segments = malloc(max_segments * sizeof(char *));
 
       if (NULL == url_segments)
       {
