You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apreq-cvs@httpd.apache.org by pg...@apache.org on 2008/12/09 22:33:22 UTC
svn commit: r724901 - in /httpd/apreq/branches/apr-build-system/libapreq:
include/ library/
Author: pgollucci
Date: Tue Dec 9 13:33:21 2008
New Revision: 724901
URL: http://svn.apache.org/viewvc?rev=724901&view=rev
Log:
sync from trunk@724900
Modified:
httpd/apreq/branches/apr-build-system/libapreq/include/apreq.h
httpd/apreq/branches/apr-build-system/libapreq/include/apreq_cookie.h
httpd/apreq/branches/apr-build-system/libapreq/include/apreq_error.h
httpd/apreq/branches/apr-build-system/libapreq/include/apreq_module.h
httpd/apreq/branches/apr-build-system/libapreq/include/apreq_param.h
httpd/apreq/branches/apr-build-system/libapreq/include/apreq_parser.h
httpd/apreq/branches/apr-build-system/libapreq/include/apreq_util.h
httpd/apreq/branches/apr-build-system/libapreq/include/apreq_version.h
httpd/apreq/branches/apr-build-system/libapreq/library/cookie.c
httpd/apreq/branches/apr-build-system/libapreq/library/error.c
httpd/apreq/branches/apr-build-system/libapreq/library/module.c
httpd/apreq/branches/apr-build-system/libapreq/library/module_cgi.c
httpd/apreq/branches/apr-build-system/libapreq/library/module_custom.c
httpd/apreq/branches/apr-build-system/libapreq/library/param.c
httpd/apreq/branches/apr-build-system/libapreq/library/parser.c
httpd/apreq/branches/apr-build-system/libapreq/library/parser_header.c
httpd/apreq/branches/apr-build-system/libapreq/library/parser_multipart.c
httpd/apreq/branches/apr-build-system/libapreq/library/parser_urlencoded.c
httpd/apreq/branches/apr-build-system/libapreq/library/util.c
httpd/apreq/branches/apr-build-system/libapreq/library/version.c
Modified: httpd/apreq/branches/apr-build-system/libapreq/include/apreq.h
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/include/apreq.h?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/include/apreq.h (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/include/apreq.h Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
@@ -68,10 +69,18 @@
* APREQ_DECLARE_DATA type apr_variable = value;
*/
#define APREQ_DECLARE_DATA
-#else
+#elif defined (APREQ_DECLARE_STATIC)
+#define APREQ_DECLARE(type) type __stdcall
+#define APREQ_DECLARE_NONSTD(type) type
+#define APREQ_DECLARE_DATA
+#elif defined (APREQ_DECLARE_EXPORT)
#define APREQ_DECLARE(type) __declspec(dllexport) type __stdcall
#define APREQ_DECLARE_NONSTD(type) __declspec(dllexport) type
#define APREQ_DECLARE_DATA __declspec(dllexport)
+#else
+#define APREQ_DECLARE(type) __declspec(dllimport) type __stdcall
+#define APREQ_DECLARE_NONSTD(type) __declspec(dllimport) type
+#define APREQ_DECLARE_DATA __declspec(dllimport)
#endif
/**
Modified: httpd/apreq/branches/apr-build-system/libapreq/include/apreq_cookie.h
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/include/apreq_cookie.h?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/include/apreq_cookie.h (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/include/apreq_cookie.h Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
Modified: httpd/apreq/branches/apr-build-system/libapreq/include/apreq_error.h
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/include/apreq_error.h?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/include/apreq_error.h (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/include/apreq_error.h Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
Modified: httpd/apreq/branches/apr-build-system/libapreq/include/apreq_module.h
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/include/apreq_module.h?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/include/apreq_module.h (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/include/apreq_module.h Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
Modified: httpd/apreq/branches/apr-build-system/libapreq/include/apreq_param.h
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/include/apreq_param.h?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/include/apreq_param.h (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/include/apreq_param.h Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
Modified: httpd/apreq/branches/apr-build-system/libapreq/include/apreq_parser.h
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/include/apreq_parser.h?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/include/apreq_parser.h (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/include/apreq_parser.h Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
Modified: httpd/apreq/branches/apr-build-system/libapreq/include/apreq_util.h
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/include/apreq_util.h?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/include/apreq_util.h (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/include/apreq_util.h Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
@@ -269,8 +270,8 @@
* @return Error status code from either an unsuccessful apr_bucket_read(),
* or a failed apr_file_writev().
*
- * @remarks In the future, this function may do something
- * intelligent with file buckets.
+ * @remarks This function leaks a bucket brigade into bb->p whenever
+ * the final bucket in bb is a spool bucket.
*/
APREQ_DECLARE(apr_status_t) apreq_brigade_fwrite(apr_file_t *f,
Modified: httpd/apreq/branches/apr-build-system/libapreq/include/apreq_version.h
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/include/apreq_version.h?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/include/apreq_version.h (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/include/apreq_version.h Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
@@ -61,7 +62,7 @@
#define APREQ_MINOR_VERSION 6
/** patch level */
-#define APREQ_PATCH_VERSION 0
+#define APREQ_PATCH_VERSION 3
/**
* This symbol is defined for internal, "development" copies of libapreq.
Modified: httpd/apreq/branches/apr-build-system/libapreq/library/cookie.c
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/library/cookie.c?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/library/cookie.c (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/library/cookie.c Tue Dec 9 13:33:21 2008
@@ -1,9 +1,205 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+#include "apr_strings.h"
+#include "apreq_cookie.h"
+#include "apreq_error.h"
+#include "apreq_module.h"
+#include "apreq_util.h"
+#include "at.h"
+
+static const char nscookies[] = "a=1; foo=bar; fl=left; fr=right;bad; "
+ "ns=foo=1&bar=2,frl=right-left; "
+ "flr=left-right; fll=left-left; "
+ "good_one=1;=;bad";
+
+static const char rfccookies[] = "$Version=1; first=a;$domain=quux;second=be,"
+ "$Version=1;third=cie";
+
+static apr_table_t *jar, *jar2;
+static apr_pool_t *p;
+
+static void jar_make(dAT)
+{
+ jar = apr_table_make(p, APREQ_DEFAULT_NELTS);
+ AT_not_null(jar);
+ AT_int_eq(apreq_parse_cookie_header(p, jar, nscookies), APREQ_ERROR_NOTOKEN);
+ jar2 = apr_table_make(p, APREQ_DEFAULT_NELTS);
+ AT_not_null(jar2);
+ AT_int_eq(apreq_parse_cookie_header(p, jar2, rfccookies), APR_SUCCESS);
+}
+
+static void jar_get_rfc(dAT)
+{
+ const char *val;
+ AT_not_null(val = apr_table_get(jar2, "first"));
+ AT_str_eq(val, "a");
+ AT_not_null(val = apr_table_get(jar2, "second"));
+ AT_str_eq(val, "be");
+ AT_not_null(val = apr_table_get(jar2, "third"));
+ AT_str_eq(val, "cie");
+}
+
+static void jar_get_ns(dAT)
+{
+
+ AT_str_eq(apr_table_get(jar, "a"), "1");
+
+ /* ignore wacky cookies that don't have an '=' sign */
+ AT_is_null(apr_table_get(jar, "bad"));
+
+ /* accept wacky cookies that contain multiple '=' */
+ AT_str_eq(apr_table_get(jar, "ns"), "foo=1&bar=2");
+
+ AT_str_eq(apr_table_get(jar,"foo"), "bar");
+ AT_str_eq(apr_table_get(jar,"fl"), "left");
+ AT_str_eq(apr_table_get(jar,"fr"), "right");
+ AT_str_eq(apr_table_get(jar,"frl"), "right-left");
+ AT_str_eq(apr_table_get(jar,"flr"), "left-right");
+ AT_str_eq(apr_table_get(jar,"fll"), "left-left");
+ AT_is_null(apr_table_get(jar,""));
+}
+
+
+static void netscape_cookie(dAT)
+{
+ char expires[APR_RFC822_DATE_LEN];
+ char *val;
+ apreq_cookie_t *c;
+
+ *(const char **)&val = apr_table_get(jar, "foo");
+ AT_not_null(val);
+
+ c = apreq_value_to_cookie(val);
+
+ AT_str_eq(c->v.data, "bar");
+ AT_int_eq(apreq_cookie_version(c), 0);
+ AT_str_eq(apreq_cookie_as_string(c, p), "foo=bar");
+
+ c->domain = apr_pstrdup(p, "example.com");
+ AT_str_eq(apreq_cookie_as_string(c, p), "foo=bar; domain=example.com");
+
+ c->path = apr_pstrdup(p, "/quux");
+ AT_str_eq(apreq_cookie_as_string(c, p),
+ "foo=bar; path=/quux; domain=example.com");
+
+ apreq_cookie_expires(c, "+1y");
+ apr_rfc822_date(expires, apr_time_now()
+ + apr_time_from_sec(apreq_atoi64t("+1y")));
+ expires[7] = '-';
+ expires[11] = '-';
+ val = apr_pstrcat(p, "foo=bar; path=/quux; domain=example.com; expires=",
+ expires, NULL);
+
+ AT_str_eq(apreq_cookie_as_string(c, p), val);
+}
+
+
+static void rfc_cookie(dAT)
+{
+ apreq_cookie_t *c = apreq_cookie_make(p,"rfc",3,"out",3);
+ const char *expected;
+ long expires;
+
+ AT_str_eq(c->v.data, "out");
+
+ apreq_cookie_version_set(c, 1);
+ AT_int_eq(apreq_cookie_version(c), 1);
+ AT_str_eq(apreq_cookie_as_string(c,p),"rfc=out; Version=1");
+
+ c->domain = apr_pstrdup(p, "example.com");
+
+#ifndef WIN32
+
+ AT_str_eq(apreq_cookie_as_string(c,p),
+ "rfc=out; Version=1; domain=\"example.com\"");
+ c->path = apr_pstrdup(p, "/quux");
+ AT_str_eq(apreq_cookie_as_string(c,p),
+ "rfc=out; Version=1; path=\"/quux\"; domain=\"example.com\"");
+
+ apreq_cookie_expires(c, "+3m");
+ expires = apreq_atoi64t("+3m");
+ expected = apr_psprintf(p, "rfc=out; Version=1; path=\"/quux\"; "
+ "domain=\"example.com\"; max-age=%ld",
+ expires);
+ AT_str_eq(apreq_cookie_as_string(c,p), expected);
+
+#else
+
+ expected = "rfc=out; Version=1; domain=\"example.com\"";
+ AT_str_eq(apreq_cookie_as_string(c,p), expected);
+
+ c->path = apr_pstrdup(p, "/quux");
+ expected = "rfc=out; Version=1; path=\"/quux\"; domain=\"example.com\"";
+ AT_str_eq(apreq_cookie_as_string(c,p), expected);
+
+ apreq_cookie_expires(c, "+3m");
+ expires = apreq_atoi64t("+3m");
+ expected = apr_psprintf(p, "rfc=out; Version=1; path=\"/quux\"; "
+ "domain=\"example.com\"; max-age=%ld",
+ expires);
+ AT_str_eq(apreq_cookie_as_string(c,p), expected);
+
+#endif
+
+}
+
+
+#define dT(func, plan) #func, func, plan
+
+
+int main(int argc, char *argv[])
+{
+ unsigned i, plan = 0;
+ dAT;
+ at_test_t test_list [] = {
+ { dT(jar_make, 4) },
+ { dT(jar_get_rfc, 6), "1 3 5" },
+ { dT(jar_get_ns, 10) },
+ { dT(netscape_cookie, 7) },
+ { dT(rfc_cookie, 6) },
+ };
+
+ apr_initialize();
+ atexit(apr_terminate);
+
+ apr_pool_create(&p, NULL);
+
+ AT = at_create(p, 0, at_report_stdout_make(p));
+
+ for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i)
+ plan += test_list[i].plan;
+
+ AT_begin(plan);
+
+ for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i)
+ AT_run(&test_list[i]);
+
+ AT_end();
+
+ return 0;
+}
+/*
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
Modified: httpd/apreq/branches/apr-build-system/libapreq/library/error.c
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/library/error.c?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/library/error.c (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/library/error.c Tue Dec 9 13:33:21 2008
@@ -1,8 +1,102 @@
-/* Copyright 2000-2006 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/*
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+#include "apr_strings.h"
+#include "apreq_error.h"
+#include "at.h"
+
+
+static void test_strerror(dAT)
+{
+ char buf[256], *str;
+
+ str = apreq_strerror(APREQ_ERROR_GENERAL, buf, sizeof buf);
+ AT_ptr_eq(str, buf);
+ AT_str_eq(str, "Internal apreq error");
+
+ str = apreq_strerror(APREQ_ERROR_TAINTED, buf, sizeof buf);
+ AT_str_eq(str, "Attempt to perform unsafe action with tainted data");
+
+ str = apreq_strerror(APREQ_ERROR_BADSEQ, buf, sizeof buf);
+ AT_str_eq(str, "Invalid byte sequence");
+
+ str = apreq_strerror(APREQ_ERROR_NODATA, buf, sizeof buf);
+ AT_str_eq(str, "Missing input data");
+
+ str = apreq_strerror(APREQ_ERROR_GENERAL+99, buf, sizeof buf);
+ AT_str_eq(str, "Error string not yet specified by apreq");
+
+
+
+
+ /* Test some common APR status codes also */
+
+ str = apreq_strerror(APR_EINIT, buf, sizeof buf);
+ AT_str_eq(str, "There is no error, this value signifies an initialized "
+ "error code");
+
+ str = apreq_strerror(APR_INCOMPLETE, buf, sizeof buf);
+ AT_str_eq(str, "Partial results are valid but processing is incomplete");
+
+ str = apreq_strerror(APR_EOF, buf, sizeof buf);
+ AT_str_eq(str, "End of file found");
+
+ str = apreq_strerror(APR_ENOTIMPL, buf, sizeof buf);
+ AT_str_eq(str, "This function has not been implemented on this platform");
+
+ }
+
+#define dT(func, plan) #func, func, plan
+
+
+int main(int argc, char *argv[])
+{
+ unsigned i, plan = 0;
+ apr_pool_t *p;
+ dAT;
+ at_test_t test_list [] = {
+ { dT(test_strerror, 10), "1" }
+ };
+
+ apr_initialize();
+ atexit(apr_terminate);
+
+ apr_pool_create(&p, NULL);
+
+ AT = at_create(p, 0, at_report_stdout_make(p));
+
+ for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i)
+ plan += test_list[i].plan;
+
+ AT_begin(plan);
+
+ for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i)
+ AT_run(&test_list[i]);
+
+ AT_end();
+
+ return 0;
+}
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
Modified: httpd/apreq/branches/apr-build-system/libapreq/library/module.c
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/library/module.c?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/library/module.c (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/library/module.c Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
Modified: httpd/apreq/branches/apr-build-system/libapreq/library/module_cgi.c
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/library/module_cgi.c?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/library/module_cgi.c (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/library/module_cgi.c Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
@@ -473,7 +474,7 @@
h = req->find_param;
h->next = req->parser->hook;
req->parser->hook = h;
- *(const char **)&h->ctx = name;
+ h->ctx = (void *)name;
do {
cgi_read(handle, APREQ_DEFAULT_READ_BLOCK_SIZE);
Modified: httpd/apreq/branches/apr-build-system/libapreq/library/module_custom.c
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/library/module_custom.c?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/library/module_custom.c (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/library/module_custom.c Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
@@ -249,7 +250,7 @@
}
-static APREQ_MODULE(custom, 20050516);
+static APREQ_MODULE(custom, 20070428);
APREQ_DECLARE(apreq_handle_t *)apreq_handle_custom(apr_pool_t *pool,
const char *query_string,
@@ -264,6 +265,7 @@
req->handle.pool = pool;
req->handle.bucket_alloc = in->bucket_alloc;
req->read_limit = read_limit;
+ req->bytes_read = 0;
req->parser = parser;
req->in = apr_brigade_create(pool, in->bucket_alloc);
req->tmpbb = apr_brigade_create(pool, in->bucket_alloc);
Modified: httpd/apreq/branches/apr-build-system/libapreq/library/param.c
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/library/param.c?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/library/param.c (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/library/param.c Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
Modified: httpd/apreq/branches/apr-build-system/libapreq/library/parser.c
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/library/parser.c?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/library/parser.c (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/library/parser.c Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
Modified: httpd/apreq/branches/apr-build-system/libapreq/library/parser_header.c
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/library/parser_header.c?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/library/parser_header.c (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/library/parser_header.c Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
Modified: httpd/apreq/branches/apr-build-system/libapreq/library/parser_multipart.c
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/library/parser_multipart.c?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/library/parser_multipart.c (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/library/parser_multipart.c Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
@@ -161,11 +162,18 @@
* so we can move previous buckets across
* and retest buf against the full bdry.
*/
+
+ /* give hints to GCC by making the brigade volatile, otherwise the
+ * loop below will end up being endless. See:
+ * https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=193740
+ */
+ apr_bucket_brigade * volatile in_v = in;
+
do {
- apr_bucket *f = APR_BRIGADE_FIRST(in);
+ apr_bucket *f = APR_BRIGADE_FIRST(in_v);
APR_BUCKET_REMOVE(f);
APR_BRIGADE_INSERT_TAIL(out, f);
- } while (e != APR_BRIGADE_FIRST(in));
+ } while (e != APR_BRIGADE_FIRST(in_v));
off = 0;
goto look_for_boundary_up_front;
}
Modified: httpd/apreq/branches/apr-build-system/libapreq/library/parser_urlencoded.c
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/library/parser_urlencoded.c?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/library/parser_urlencoded.c (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/library/parser_urlencoded.c Tue Dec 9 13:33:21 2008
@@ -1,9 +1,10 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
Modified: httpd/apreq/branches/apr-build-system/libapreq/library/util.c
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/library/util.c?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/library/util.c (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/library/util.c Tue Dec 9 13:33:21 2008
@@ -1,9 +1,350 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+#include "apr_strings.h"
+#include "apreq_error.h"
+#include "apreq_util.h"
+#include "at.h"
+
+
+static void test_atoi64f(dAT)
+{
+ AT_int_eq(apreq_atoi64f("0"), 0);
+ AT_int_eq(apreq_atoi64f("-1"), -1);
+ AT_int_eq(apreq_atoi64f("-"), 0);
+ AT_int_eq(apreq_atoi64f("5"), 5);
+ AT_int_eq(apreq_atoi64f("3.333"), 3);
+ AT_int_eq(apreq_atoi64f("33k"), 33 * 1024);
+ AT_int_eq(apreq_atoi64f(" +8M "), 8 * 1024 * 1024);
+ AT_ok(apreq_atoi64f("44GB") == (apr_int64_t)44 * 1024 * 1024 * 1024,
+ "44GB test");
+ AT_ok(apreq_atoi64f("0xaBcDefg") == (apr_int64_t)11259375 * 1024 * 1024 * 1024,
+ "hex test");
+}
+
+static void test_atoi64t(dAT)
+{
+ AT_int_eq(apreq_atoi64t("0"), 0);
+ AT_int_eq(apreq_atoi64t("-1"), -1);
+ AT_int_eq(apreq_atoi64t("-g088l3dyg00k"), 0);
+ AT_int_eq(apreq_atoi64t("5s"), 5);
+ AT_int_eq(apreq_atoi64t("3.333"), 3);
+ AT_int_eq(apreq_atoi64t("33d"), 33 * 60 * 60 * 24);
+ AT_int_eq(apreq_atoi64t(" +8M "), 8 * 60 * 60 * 24 * 30);
+ AT_int_eq(apreq_atoi64t("+9m"), 9 * 60);
+ AT_int_eq(apreq_atoi64t("6h"), 6 * 60 * 60);
+
+}
+
+static void test_index(dAT)
+{
+ const char haystack[] = "Four score and seven years ago";
+ apr_size_t hlen = sizeof haystack - 1;
+ AT_int_eq(apreq_index(haystack, hlen, "Four", 4, APREQ_MATCH_FULL),
+ 0);
+ AT_int_eq(apreq_index(haystack, hlen, "Four", 4, APREQ_MATCH_PARTIAL),
+ 0);
+ AT_int_eq(apreq_index(haystack, hlen, "Fourteen", 8, APREQ_MATCH_FULL),
+ -1);
+ AT_int_eq(apreq_index(haystack, hlen, "Fourteen", 8, APREQ_MATCH_PARTIAL),
+ -1);
+ AT_int_eq(apreq_index(haystack, hlen, "agoraphobia", 11, APREQ_MATCH_FULL),
+ -1);
+ AT_int_eq(apreq_index(haystack, hlen, "agoraphobia", 11, APREQ_MATCH_PARTIAL),
+ hlen - 3);
+}
+
+#define A_GRAVE 0xE5
+#define KATAKANA_A 0xFF71
+
+static void test_decode(dAT)
+{
+ apr_size_t elen;
+ char src1[] = "%C3%80%E3%82%a2"; /* A_GRAVE KATAKANA_A as utf8 */
+ unsigned char expect[6];
+
+ AT_int_eq(apreq_decode((char *)expect, &elen, src1, sizeof(src1) -1),
+ APR_SUCCESS);
+ AT_int_eq(elen, 5);
+ AT_int_eq(expect[0], 0xC3);
+ AT_int_eq(expect[1], 0x80);
+ AT_int_eq(expect[2], 0xE3);
+ AT_int_eq(expect[3], 0x82);
+ AT_int_eq(expect[4], 0xA2);
+}
+
+static void test_charset_divine(dAT)
+{
+ apr_size_t elen;
+ char src1[] = "%C3%80%E3%82%a2"; /* A_GRAVE KATAKANA_A as utf8 */
+ char src2[] = "pound%A3";/* latin-1 */
+ char src3[] = "euro%80";/* cp-1252 */
+ char expect[7];
+
+ AT_int_eq(apreq_decode(expect, &elen, src1, sizeof(src1) -1),
+ APR_SUCCESS);
+
+ AT_int_eq(apreq_charset_divine(expect, elen), APREQ_CHARSET_UTF8);
+
+ AT_int_eq(apreq_decode(expect, &elen, src2, sizeof(src2) -1),
+ APR_SUCCESS);
+
+ AT_int_eq(apreq_charset_divine(expect, elen), APREQ_CHARSET_LATIN1);
+ AT_int_eq(apreq_decode(expect, &elen, src3, sizeof(src3) -1),
+ APR_SUCCESS);
+
+ AT_int_eq(apreq_charset_divine(expect, elen), APREQ_CHARSET_CP1252);
+
+}
+
+
+static void test_decodev(dAT)
+{
+ char src1[] = "%2540%2";
+ char src2[] = "0%u0";
+ char src3[] = "041";
+ struct iovec iovec1[] = {
+ { src1, sizeof(src1) - 1 },
+ { src2, sizeof(src2) - 1 },
+ { src3, sizeof(src3) - 1 },
+ };
+ struct iovec iovec2[] = {
+ { src1, sizeof(src1) - 1 },
+ { src2, sizeof(src2) - 1 },
+ };
+ const char expect1[] = "%40 A";
+ const char expect2[] = "%40 ";
+ char dest[sizeof(src1) + sizeof(src2) + sizeof(src3)];
+ apr_size_t dest_len;
+ apr_status_t status;
+
+ status = apreq_decodev(dest, &dest_len, iovec1, 3);
+ AT_int_eq(status, APR_SUCCESS);
+ AT_int_eq(dest_len, sizeof(expect1) - 1);
+ AT_mem_eq(dest, expect1, sizeof(expect1) - 1);
+
+ status = apreq_decodev(dest, &dest_len, iovec2, 2);
+ AT_int_eq(status, APR_INCOMPLETE);
+ AT_int_eq(dest_len, sizeof(expect2) - 1);
+ AT_mem_eq(dest, expect2, sizeof(expect2) - 1);
+}
+
+
+static void test_encode(dAT)
+{
+
+}
+
+static void test_cp1252_to_utf8(dAT)
+{
+ char src1[] = "%C3%80%E3%82%a2"; /* A_GRAVE KATAKANA_A as utf8 */
+ char src2[5];
+ unsigned char expect[16];
+ apr_size_t slen;
+
+ AT_int_eq(apreq_decode((char *)src2, &slen, src1, sizeof(src1) -1),
+ APR_SUCCESS);
+ AT_int_eq(apreq_cp1252_to_utf8((char *)expect, src2, 5),
+ 12);
+
+ /* 0xC3 */
+ AT_int_eq(expect[0], 0xC0 | (0xC3 >> 6));
+ AT_int_eq(expect[1], 0xC3 - 0x40);
+
+ /* 0x20AC */
+ AT_int_eq(expect[2], 0xE0 | (0x20AC >> 12));
+ AT_int_eq(expect[3], 0x80 | ((0x20AC >> 6) & 0x3F));
+ AT_int_eq(expect[4], 0x80 | (0x20AC & 0x3F));
+
+ /* 0xE3 */
+ AT_int_eq(expect[5], 0xC3);
+ AT_int_eq(expect[6], 0xE3 - 0x40);
+
+ /* 0x201A */
+ AT_int_eq(expect[7], 0xE0 | (0x201A >> 12));
+ AT_int_eq(expect[8], 0x80 | ((0x201A >> 6) & 0x3F));
+ AT_int_eq(expect[9], 0x80 | (0x201A & 0x3F));
+
+
+ /* 0xA2 */
+ AT_int_eq(expect[10], 0xC0 | (0xA2 >> 6));
+ AT_int_eq(expect[11], 0xA2);
+
+}
+
+static void test_quote(dAT)
+{
+ size_t len;
+ char dst[64];
+
+ len = apreq_quote(dst, "foo", 3);
+ AT_int_eq(len, 5);
+ AT_str_eq(dst, "\"foo\"");
+
+ len = apreq_quote(dst, "\"foo", 4);
+ AT_int_eq(len, 7);
+ AT_str_eq(dst, "\"\\\"foo\"");
+
+ len = apreq_quote(dst, "foo\\bar", 7);
+ AT_int_eq(len, 10);
+ AT_str_eq(dst, "\"foo\\\\bar\"");
+
+ len = apreq_quote(dst, "foo\0bar", 7);
+ AT_int_eq(len, 10);
+ AT_str_eq(dst, "\"foo\\0bar\"");
+}
+
+static void test_quote_once(dAT)
+{
+ size_t len;
+ char dst[64];
+
+ len = apreq_quote_once(dst, "foo", 3);
+ AT_int_eq(len, 5);
+ AT_str_eq(dst, "\"foo\"");
+
+ len = apreq_quote_once(dst, "\"foo", 4);
+ AT_int_eq(len, 7);
+ AT_str_eq(dst, "\"\\\"foo\"");
+
+ len = apreq_quote_once(dst, "foo\"", 4);
+ AT_int_eq(len, 7);
+ AT_str_eq(dst, "\"foo\\\"\"");
+
+ len = apreq_quote_once(dst, "foo\0bar", 7);
+ AT_int_eq(len, 10);
+ AT_str_eq(dst, "\"foo\\0bar\"");
+
+ /* null byte must be escaped, even when there are already double
+ quotes */
+ len = apreq_quote_once(dst, "\"foo\0bar\"", 9);
+ AT_int_eq(len, 14);
+ AT_str_eq(dst, "\"\\\"foo\\0bar\\\"\"");
+
+ len = apreq_quote_once(dst, "\"foo\"", 5);
+ AT_int_eq(len, 5);
+ AT_str_eq(dst, "\"foo\"");
+
+ len = apreq_quote_once(dst, "'foo'", 5);
+ AT_int_eq(len, 7);
+ AT_str_eq(dst, "\"'foo'\"");
+
+ len = apreq_quote_once(dst, "\"fo\\o\"", 6);
+ AT_int_eq(len, 6);
+ AT_str_eq(dst, "\"fo\\o\"");
+
+ len = apreq_quote_once(dst, "\"foo\"bar\"", 9);
+ AT_int_eq(len, 14);
+ AT_str_eq(dst, "\"\\\"foo\\\"bar\\\"\"");
+}
+
+static void test_join(dAT)
+{
+
+}
+
+static void test_brigade_fwrite(dAT)
+{
+
+}
+
+static void test_file_mktemp(dAT)
+{
+
+
+}
+
+static void test_header_attribute(dAT)
+{
+ const char hdr[] = "filename=\"filename=foo\" filename=\"quux.txt\"";
+ const char *val;
+ apr_size_t vlen;
+
+ AT_int_eq(apreq_header_attribute(hdr+4, "name", 4, &val, &vlen),
+ APR_SUCCESS);
+ AT_int_eq(vlen, 12);
+ AT_mem_eq("filename=foo", val, 12);
+
+ AT_int_eq(apreq_header_attribute(hdr+4, "filename", 8, &val, &vlen),
+ APR_SUCCESS);
+ AT_int_eq(vlen, 8);
+ AT_mem_eq("quux.txt", val, 8);
+
+}
+
+static void test_brigade_concat(dAT)
+{
+
+}
+
+
+
+#define dT(func, plan) #func, func, plan
+
+
+int main(int argc, char *argv[])
+{
+ unsigned i, plan = 0;
+ apr_pool_t *p;
+ dAT;
+ at_test_t test_list [] = {
+ { dT(test_atoi64f, 9) },
+ { dT(test_atoi64t, 9) },
+ { dT(test_index, 6) },
+ { dT(test_decode, 7) },
+ { dT(test_charset_divine, 6) },
+ { dT(test_decodev, 6) },
+ { dT(test_encode, 0) },
+ { dT(test_cp1252_to_utf8, 14) },
+ { dT(test_quote, 8) },
+ { dT(test_quote_once, 18), },
+ { dT(test_join, 0) },
+ { dT(test_brigade_fwrite, 0) },
+ { dT(test_file_mktemp, 0) },
+ { dT(test_header_attribute, 6) },
+ { dT(test_brigade_concat, 0) },
+ };
+
+ apr_initialize();
+ atexit(apr_terminate);
+
+ apr_pool_create(&p, NULL);
+
+ AT = at_create(p, 0, at_report_stdout_make(p));
+
+ for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i)
+ plan += test_list[i].plan;
+
+ AT_begin(plan);
+
+ for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i)
+ AT_run(&test_list[i]);
+
+ AT_end();
+
+ return 0;
+}
+/*
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
@@ -692,6 +1033,10 @@
return rv;
}
+/*
+ * This is intentionally not apr_file_writev()
+ * note, this is iterative and not recursive
+ */
APR_INLINE
static apr_status_t apreq_fwritev(apr_file_t *f, struct iovec *v,
int *nelts, apr_size_t *bytes_written)
@@ -713,7 +1058,30 @@
/* see how far we've come */
n = 0;
+
+#ifdef SOLARIS2
+# ifdef __GNUC__
+ /*
+ * iovec.iov_len is a long here
+ * which causes a comparison between
+ * signed(long) and unsigned(apr_size_t)
+ *
+ */
+ while (n < *nelts && len >= (apr_size_t)v[n].iov_len)
+# else
+ /*
+ * Sun C however defines this as size_t which is unsigned
+ *
+ */
+ while (n < *nelts && len >= v[n].iov_len)
+# endif /* !__GNUC__ */
+#else
+ /*
+ * Hopefully everything else does this
+ * (this was the default for years)
+ */
while (n < *nelts && len >= v[n].iov_len)
+#endif
len -= v[n++].iov_len;
if (n == *nelts) {
@@ -743,43 +1111,6 @@
}
-APREQ_DECLARE(apr_status_t) apreq_brigade_fwrite(apr_file_t *f,
- apr_off_t *wlen,
- apr_bucket_brigade *bb)
-{
- struct iovec v[APREQ_DEFAULT_NELTS];
- apr_status_t s;
- apr_bucket *e;
- int n = 0;
- *wlen = 0;
-
- for (e = APR_BRIGADE_FIRST(bb); e != APR_BRIGADE_SENTINEL(bb);
- e = APR_BUCKET_NEXT(e))
- {
- apr_size_t len;
- if (n == APREQ_DEFAULT_NELTS) {
- s = apreq_fwritev(f, v, &n, &len);
- if (s != APR_SUCCESS)
- return s;
- *wlen += len;
- }
- s = apr_bucket_read(e, (const char **)&(v[n].iov_base),
- &len, APR_BLOCK_READ);
- if (s != APR_SUCCESS)
- return s;
-
- v[n++].iov_len = len;
- }
-
- while (n > 0) {
- apr_size_t len;
- s = apreq_fwritev(f, v, &n, &len);
- if (s != APR_SUCCESS)
- return s;
- *wlen += len;
- }
- return APR_SUCCESS;
-}
struct cleanup_data {
@@ -811,6 +1142,7 @@
apr_status_t rc;
char *tmpl;
struct cleanup_data *data;
+ apr_int32_t flag;
if (path == NULL) {
rc = apr_temp_dir_get(&path, pool);
@@ -829,9 +1161,10 @@
apr_pool_cleanup_register(pool, data,
apreq_file_cleanup, apreq_file_cleanup);
- rc = apr_file_mktemp(fp, tmpl, /* NO APR_DELONCLOSE! see comment above */
- APR_CREATE | APR_READ | APR_WRITE
- | APR_EXCL | APR_BINARY, pool);
+ /* NO APR_DELONCLOSE! see comment above */
+ flag = APR_CREATE | APR_READ | APR_WRITE | APR_EXCL | APR_BINARY;
+
+ rc = apr_file_mktemp(fp, tmpl, flag, pool);
if (rc == APR_SUCCESS) {
apr_file_name_get(&data->fname, *fp);
@@ -1116,3 +1449,60 @@
return s;
}
+APREQ_DECLARE(apr_status_t) apreq_brigade_fwrite(apr_file_t *f,
+ apr_off_t *wlen,
+ apr_bucket_brigade *bb)
+{
+ struct iovec v[APREQ_DEFAULT_NELTS];
+ apr_status_t s;
+ apr_bucket *e, *first;
+ int n = 0;
+ apr_bucket_brigade *tmp = bb;
+ *wlen = 0;
+
+ if (BUCKET_IS_SPOOL(APR_BRIGADE_LAST(bb))) {
+ tmp = apr_brigade_create(bb->p, bb->bucket_alloc);
+
+ s = apreq_brigade_copy(tmp, bb);
+ if (s != APR_SUCCESS)
+ return s;
+ }
+
+ for (e = APR_BRIGADE_FIRST(tmp); e != APR_BRIGADE_SENTINEL(tmp);
+ e = APR_BUCKET_NEXT(e))
+ {
+ apr_size_t len;
+ if (n == APREQ_DEFAULT_NELTS) {
+ s = apreq_fwritev(f, v, &n, &len);
+ if (s != APR_SUCCESS)
+ return s;
+
+ if (tmp != bb) {
+ while ((first = APR_BRIGADE_FIRST(tmp)) != e)
+ apr_bucket_delete(first);
+ }
+
+ *wlen += len;
+ }
+ s = apr_bucket_read(e, (const char **)&(v[n].iov_base),
+ &len, APR_BLOCK_READ);
+ if (s != APR_SUCCESS)
+ return s;
+
+ v[n++].iov_len = len;
+ }
+
+ while (n > 0) {
+ apr_size_t len;
+ s = apreq_fwritev(f, v, &n, &len);
+ if (s != APR_SUCCESS)
+ return s;
+ *wlen += len;
+
+ if (tmp != bb) {
+ while ((first = APR_BRIGADE_FIRST(tmp)) != e)
+ apr_bucket_delete(first);
+ }
+ }
+ return APR_SUCCESS;
+}
Modified: httpd/apreq/branches/apr-build-system/libapreq/library/version.c
URL: http://svn.apache.org/viewvc/httpd/apreq/branches/apr-build-system/libapreq/library/version.c?rev=724901&r1=724900&r2=724901&view=diff
==============================================================================
--- httpd/apreq/branches/apr-build-system/libapreq/library/version.c (original)
+++ httpd/apreq/branches/apr-build-system/libapreq/library/version.c Tue Dec 9 13:33:21 2008
@@ -1,9 +1,79 @@
/*
-** Copyright 2003-2006 The Apache Software Foundation
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+#include "apreq_version.h"
+#include "at.h"
+
+static void version_string(dAT)
+{
+ const char *vstring = apreq_version_string();
+ AT_not_null(vstring);
+ AT_str_eq(vstring, APREQ_VERSION_STRING);
+}
+static void version_type(dAT)
+{
+ apr_version_t v;
+ apreq_version(&v);
+ AT_int_eq(v.major, APREQ_MAJOR_VERSION);
+ AT_int_eq(v.minor, APREQ_MINOR_VERSION);
+ AT_int_eq(v.patch, APREQ_PATCH_VERSION);
+#ifdef APREQ_IS_DEV_VERSION
+ AT_int_eq(v.is_dev, 1);
+#else
+ AT_int_eq(v.is_dev, 0);
+#endif
+}
+
+int main(int argc, char *argv[])
+{
+ apr_pool_t *p;
+ unsigned i, plan = 0;
+ dAT;
+ at_test_t test_list [] = {
+ {"version_string", version_string, 2, "1"},
+ {"version_type", version_type, 4}
+ };
+
+ apr_initialize();
+ atexit(apr_terminate);
+
+ apr_pool_create(&p, NULL);
+
+ AT = at_create(p, 0, at_report_stdout_make(p));
+
+ for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i)
+ plan += test_list[i].plan;
+
+ AT_begin(plan);
+
+ for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i)
+ AT_run(&test_list[i]);
+
+ AT_end();
+
+ return 0;
+}
+/*
+** Licensed to the Apache Software Foundation (ASF) under one or more
+** contributor license agreements. See the NOTICE file distributed with
+** this work for additional information regarding copyright ownership.
+** The ASF licenses this file to You under the Apache License, Version 2.0
+** (the "License"); you may not use this file except in compliance with
+** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**