annotate uriparser/src/UriResolve.c @ 63:b3c185090dc2

cmake: use BUILD_INTERFACE, closes #881 @10m
author David Demelier <markand@malikania.fr>
date Fri, 13 Jul 2018 12:32:37 +0200
parents a2be1eba7adb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
60
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * uriparser - RFC 3986 URI parsing library
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (C) 2007, Weijia Song <songweijia@gmail.com>
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 * Copyright (C) 2007, Sebastian Pipping <sebastian@pipping.org>
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * All rights reserved.
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 *
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * Redistribution and use in source and binary forms, with or without
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 * modification, are permitted provided that the following conditions
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * are met:
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 *
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * * Redistributions of source code must retain the above
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * copyright notice, this list of conditions and the following
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * disclaimer.
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 *
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * * Redistributions in binary form must reproduce the above
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 * copyright notice, this list of conditions and the following
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
18 * disclaimer in the documentation and/or other materials
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 * provided with the distribution.
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 *
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 * * Neither the name of the <ORGANIZATION> nor the names of its
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 * contributors may be used to endorse or promote products
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * derived from this software without specific prior written
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * permission.
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 *
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 * OF THE POSSIBILITY OF SUCH DAMAGE.
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
39
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 /* What encodings are enabled? */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 #include <uriparser/UriDefsConfig.h>
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 #if (!defined(URI_PASS_ANSI) && !defined(URI_PASS_UNICODE))
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 /* Include SELF twice */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 # ifdef URI_ENABLE_ANSI
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 # define URI_PASS_ANSI 1
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 # include "UriResolve.c"
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 # undef URI_PASS_ANSI
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 # endif
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 # ifdef URI_ENABLE_UNICODE
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 # define URI_PASS_UNICODE 1
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 # include "UriResolve.c"
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 # undef URI_PASS_UNICODE
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 # endif
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 #else
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 # ifdef URI_PASS_ANSI
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 # include <uriparser/UriDefsAnsi.h>
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 # else
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 # include <uriparser/UriDefsUnicode.h>
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 # include <wchar.h>
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 # endif
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
62
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 #ifndef URI_DOXYGEN
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 # include <uriparser/Uri.h>
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 # include "UriCommon.h"
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 #endif
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
68
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
69
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
70
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 /* Appends a relative URI to an absolute. The last path segment of
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 * the absolute URI is replaced. */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 static URI_INLINE UriBool URI_FUNC(MergePath)(URI_TYPE(Uri) * absWork,
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 const URI_TYPE(Uri) * relAppend) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 URI_TYPE(PathSegment) * sourceWalker;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 URI_TYPE(PathSegment) * destPrev;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 if (relAppend->pathHead == NULL) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 return URI_TRUE;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
80
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 /* Replace last segment ("" if trailing slash) with first of append chain */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 if (absWork->pathHead == NULL) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 URI_TYPE(PathSegment) * const dup = malloc(sizeof(URI_TYPE(PathSegment)));
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 if (dup == NULL) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 return URI_FALSE; /* Raises malloc error */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 dup->next = NULL;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 absWork->pathHead = dup;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 absWork->pathTail = dup;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 absWork->pathTail->text.first = relAppend->pathHead->text.first;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 absWork->pathTail->text.afterLast = relAppend->pathHead->text.afterLast;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
93
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 /* Append all the others */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 sourceWalker = relAppend->pathHead->next;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 if (sourceWalker == NULL) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 return URI_TRUE;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 destPrev = absWork->pathTail;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
100
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 for (;;) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 URI_TYPE(PathSegment) * const dup = malloc(sizeof(URI_TYPE(PathSegment)));
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 if (dup == NULL) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 destPrev->next = NULL;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 absWork->pathTail = destPrev;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 return URI_FALSE; /* Raises malloc error */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 dup->text = sourceWalker->text;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 destPrev->next = dup;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
110
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 if (sourceWalker->next == NULL) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 absWork->pathTail = dup;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 absWork->pathTail->next = NULL;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 break;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 destPrev = dup;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 sourceWalker = sourceWalker->next;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
119
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 return URI_TRUE;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
122
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
123
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 static int URI_FUNC(ResolveAbsolutePathFlag)(URI_TYPE(Uri) * absWork) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 if (absWork == NULL) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 return URI_ERROR_NULL;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
128
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 if (URI_FUNC(IsHostSet)(absWork) && absWork->absolutePath) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 /* Empty segment needed, instead? */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 if (absWork->pathHead == NULL) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 URI_TYPE(PathSegment) * const segment = malloc(sizeof(URI_TYPE(PathSegment)));
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 if (segment == NULL) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 segment->text.first = URI_FUNC(SafeToPointTo);
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 segment->text.afterLast = URI_FUNC(SafeToPointTo);
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 segment->next = NULL;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
139
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 absWork->pathHead = segment;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 absWork->pathTail = segment;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
143
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 absWork->absolutePath = URI_FALSE;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
146
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 return URI_SUCCESS;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
149
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
150
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 static int URI_FUNC(AddBaseUriImpl)(URI_TYPE(Uri) * absDest,
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 const URI_TYPE(Uri) * relSource,
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 const URI_TYPE(Uri) * absBase,
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 UriResolutionOptions options) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 UriBool relSourceHasScheme;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
156
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 if (absDest == NULL) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 return URI_ERROR_NULL;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 URI_FUNC(ResetUri)(absDest);
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
161
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 if ((relSource == NULL) || (absBase == NULL)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 return URI_ERROR_NULL;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
165
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 /* absBase absolute? */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 if (absBase->scheme.first == NULL) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 return URI_ERROR_ADDBASE_REL_BASE;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
170
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 /* [00/32] -- A non-strict parser may ignore a scheme in the reference */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 /* [00/32] -- if it is identical to the base URI's scheme. */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 /* [00/32] if ((not strict) and (R.scheme == Base.scheme)) then */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 relSourceHasScheme = (relSource->scheme.first != NULL) ? URI_TRUE : URI_FALSE;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 if ((options & URI_RESOLVE_IDENTICAL_SCHEME_COMPAT)
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 && (absBase->scheme.first != NULL)
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 && (relSource->scheme.first != NULL)
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 && (0 == URI_FUNC(CompareRange)(&(absBase->scheme), &(relSource->scheme)))) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 /* [00/32] undefine(R.scheme); */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 relSourceHasScheme = URI_FALSE;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 /* [00/32] endif; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
183
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 /* [01/32] if defined(R.scheme) then */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 if (relSourceHasScheme) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 /* [02/32] T.scheme = R.scheme; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 absDest->scheme = relSource->scheme;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 /* [03/32] T.authority = R.authority; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 if (!URI_FUNC(CopyAuthority)(absDest, relSource)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 /* [04/32] T.path = remove_dot_segments(R.path); */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 if (!URI_FUNC(CopyPath)(absDest, relSource)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 if (!URI_FUNC(RemoveDotSegmentsAbsolute)(absDest)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 /* [05/32] T.query = R.query; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 absDest->query = relSource->query;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 /* [06/32] else */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 } else {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 /* [07/32] if defined(R.authority) then */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 if (URI_FUNC(IsHostSet)(relSource)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 /* [08/32] T.authority = R.authority; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 if (!URI_FUNC(CopyAuthority)(absDest, relSource)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 /* [09/32] T.path = remove_dot_segments(R.path); */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 if (!URI_FUNC(CopyPath)(absDest, relSource)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 if (!URI_FUNC(RemoveDotSegmentsAbsolute)(absDest)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 /* [10/32] T.query = R.query; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 absDest->query = relSource->query;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 /* [11/32] else */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 } else {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 /* [28/32] T.authority = Base.authority; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 if (!URI_FUNC(CopyAuthority)(absDest, absBase)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 /* [12/32] if (R.path == "") then */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
225 if (relSource->pathHead == NULL && !relSource->absolutePath) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 /* [13/32] T.path = Base.path; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 if (!URI_FUNC(CopyPath)(absDest, absBase)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 /* [14/32] if defined(R.query) then */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 if (relSource->query.first != NULL) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 /* [15/32] T.query = R.query; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 absDest->query = relSource->query;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 /* [16/32] else */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 } else {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
236 /* [17/32] T.query = Base.query; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 absDest->query = absBase->query;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
238 /* [18/32] endif; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 /* [19/32] else */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 } else {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 /* [20/32] if (R.path starts-with "/") then */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 if (relSource->absolutePath) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
244 int res;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 /* [21/32] T.path = remove_dot_segments(R.path); */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
246 if (!URI_FUNC(CopyPath)(absDest, relSource)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 res = URI_FUNC(ResolveAbsolutePathFlag)(absDest);
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 if (res != URI_SUCCESS) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
251 return res;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 if (!URI_FUNC(RemoveDotSegmentsAbsolute)(absDest)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 /* [22/32] else */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 } else {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
258 /* [23/32] T.path = merge(Base.path, R.path); */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 if (!URI_FUNC(CopyPath)(absDest, absBase)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
260 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
261 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 if (!URI_FUNC(MergePath)(absDest, relSource)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
263 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
265 /* [24/32] T.path = remove_dot_segments(T.path); */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 if (!URI_FUNC(RemoveDotSegmentsAbsolute)(absDest)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
269
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 if (!URI_FUNC(FixAmbiguity)(absDest)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
271 return URI_ERROR_MALLOC;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
272 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
273 /* [25/32] endif; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
274 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
275 /* [26/32] T.query = R.query; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
276 absDest->query = relSource->query;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
277 /* [27/32] endif; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
278 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
279 URI_FUNC(FixEmptyTrailSegment)(absDest);
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
280 /* [29/32] endif; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
282 /* [30/32] T.scheme = Base.scheme; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
283 absDest->scheme = absBase->scheme;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
284 /* [31/32] endif; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
286 /* [32/32] T.fragment = R.fragment; */
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
287 absDest->fragment = relSource->fragment;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
288
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 return URI_SUCCESS;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
290
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
291 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
292
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
293
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
294
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
295 int URI_FUNC(AddBaseUri)(URI_TYPE(Uri) * absDest,
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
296 const URI_TYPE(Uri) * relSource, const URI_TYPE(Uri) * absBase) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
297 const int res = URI_FUNC(AddBaseUriImpl)(absDest, relSource, absBase, URI_RESOLVE_STRICTLY);
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
298 if ((res != URI_SUCCESS) && (absDest != NULL)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 URI_FUNC(FreeUriMembers)(absDest);
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
300 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
301 return res;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
302 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
303
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
304
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
305
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
306 int URI_FUNC(AddBaseUriEx)(URI_TYPE(Uri) * absDest,
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
307 const URI_TYPE(Uri) * relSource, const URI_TYPE(Uri) * absBase,
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
308 UriResolutionOptions options) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
309 const int res = URI_FUNC(AddBaseUriImpl)(absDest, relSource, absBase, options);
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
310 if ((res != URI_SUCCESS) && (absDest != NULL)) {
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
311 URI_FUNC(FreeUriMembers)(absDest);
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
313 return res;
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
314 }
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
315
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
316
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
317
a2be1eba7adb uriparser: import 0.8.5, close #878 @10m
David Demelier <markand@malikania.fr>
parents:
diff changeset
318 #endif