diff options
| author | Jörg Frings-Fürst <debian@jff-webhsoting.net> | 2018-11-21 08:50:59 +0100 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff-webhsoting.net> | 2018-11-21 08:50:59 +0100 | 
| commit | 4525c4951ed4d49ceb65525cea14b9aa35f1d3fc (patch) | |
| tree | 8ed4dc2c3fbbfdad043d8ea8b6bc6e35e574606b /src/UriShorten.c | |
| parent | cc175e2048d967ddb8f3e54587938072150bbc7c (diff) | |
| parent | 294cef1daeb0b72062e6b01436d7bc95e87fcaa1 (diff) | |
Merge branch 'release/debian/0.9.0-1'debian/0.9.0-1
Diffstat (limited to 'src/UriShorten.c')
| -rw-r--r-- | src/UriShorten.c | 48 | 
1 files changed, 32 insertions, 16 deletions
| diff --git a/src/UriShorten.c b/src/UriShorten.c index e7f6df4..7b0bc97 100644 --- a/src/UriShorten.c +++ b/src/UriShorten.c @@ -64,14 +64,16 @@  #ifndef URI_DOXYGEN  # include <uriparser/Uri.h>  # include "UriCommon.h" +# include "UriMemory.h"  #endif  static URI_INLINE UriBool URI_FUNC(AppendSegment)(URI_TYPE(Uri) * uri, -		const URI_CHAR * first, const URI_CHAR * afterLast) { +		const URI_CHAR * first, const URI_CHAR * afterLast, +		UriMemoryManager * memory) {  	/* Create segment */ -	URI_TYPE(PathSegment) * segment = malloc(1 * sizeof(URI_TYPE(PathSegment))); +	URI_TYPE(PathSegment) * segment = memory->malloc(memory, 1 * sizeof(URI_TYPE(PathSegment)));  	if (segment == NULL) {  		return URI_FALSE; /* Raises malloc error */  	} @@ -124,7 +126,7 @@ static URI_INLINE UriBool URI_FUNC(EqualsAuthority)(const URI_TYPE(Uri) * first,  static int URI_FUNC(RemoveBaseUriImpl)(URI_TYPE(Uri) * dest,  		const URI_TYPE(Uri) * absSource,  		const URI_TYPE(Uri) * absBase, -		UriBool domainRootMode) { +		UriBool domainRootMode, UriMemoryManager * memory) {  	if (dest == NULL) {  		return URI_ERROR_NULL;  	} @@ -149,11 +151,11 @@ static int URI_FUNC(RemoveBaseUriImpl)(URI_TYPE(Uri) * dest,  	/* [02/50]	   T.scheme    = A.scheme; */  					dest->scheme = absSource->scheme;  	/* [03/50]	   T.authority = A.authority; */ -					if (!URI_FUNC(CopyAuthority)(dest, absSource)) { +					if (!URI_FUNC(CopyAuthority)(dest, absSource, memory)) {  						return URI_ERROR_MALLOC;  					}  	/* [04/50]	   T.path      = A.path; */ -					if (!URI_FUNC(CopyPath)(dest, absSource)) { +					if (!URI_FUNC(CopyPath)(dest, absSource, memory)) {  						return URI_ERROR_MALLOC;  					}  	/* [05/50]	else */ @@ -163,11 +165,11 @@ static int URI_FUNC(RemoveBaseUriImpl)(URI_TYPE(Uri) * dest,  	/* [07/50]	   if (A.authority != Base.authority) then */  					if (!URI_FUNC(EqualsAuthority)(absSource, absBase)) {  	/* [08/50]	      T.authority = A.authority; */ -						if (!URI_FUNC(CopyAuthority)(dest, absSource)) { +						if (!URI_FUNC(CopyAuthority)(dest, absSource, memory)) {  							return URI_ERROR_MALLOC;  						}  	/* [09/50]	      T.path      = A.path; */ -						if (!URI_FUNC(CopyPath)(dest, absSource)) { +						if (!URI_FUNC(CopyPath)(dest, absSource, memory)) {  							return URI_ERROR_MALLOC;  						}  	/* [10/50]	   else */ @@ -185,12 +187,12 @@ static int URI_FUNC(RemoveBaseUriImpl)(URI_TYPE(Uri) * dest,  	/* [16/50]	            T.path   = A.path; */  								/* GROUPED */  	/* [17/50]	         endif; */ -							if (!URI_FUNC(CopyPath)(dest, absSource)) { +							if (!URI_FUNC(CopyPath)(dest, absSource, memory)) {  								return URI_ERROR_MALLOC;  							}  							dest->absolutePath = URI_TRUE; -							if (!URI_FUNC(FixAmbiguity)(dest)) { +							if (!URI_FUNC(FixAmbiguity)(dest, memory)) {  								return URI_ERROR_MALLOC;  							}  	/* [18/50]	      else */ @@ -220,7 +222,7 @@ static int URI_FUNC(RemoveBaseUriImpl)(URI_TYPE(Uri) * dest,  								baseSeg = baseSeg->next;  	/* [28/50]	            T.path += "../"; */  								if (!URI_FUNC(AppendSegment)(dest, URI_FUNC(ConstParent), -										URI_FUNC(ConstParent) + 2)) { +										URI_FUNC(ConstParent) + 2, memory)) {  									return URI_ERROR_MALLOC;  								}  	/* [29/50]	            pathNaked = false; */ @@ -244,14 +246,14 @@ static int URI_FUNC(RemoveBaseUriImpl)(URI_TYPE(Uri) * dest,  									if (containsColon) {  	/* [34/50]	                  T.path += "./"; */  										if (!URI_FUNC(AppendSegment)(dest, URI_FUNC(ConstPwd), -												URI_FUNC(ConstPwd) + 1)) { +												URI_FUNC(ConstPwd) + 1, memory)) {  											return URI_ERROR_MALLOC;  										}  	/* [35/50]	               elseif (first(A.path) == "") then */  									} else if (sourceSeg->text.first == sourceSeg->text.afterLast) {  	/* [36/50]	                  T.path += "/."; */  										if (!URI_FUNC(AppendSegment)(dest, URI_FUNC(ConstPwd), -												URI_FUNC(ConstPwd) + 1)) { +												URI_FUNC(ConstPwd) + 1, memory)) {  											return URI_ERROR_MALLOC;  										}  	/* [37/50]	               endif; */ @@ -260,7 +262,7 @@ static int URI_FUNC(RemoveBaseUriImpl)(URI_TYPE(Uri) * dest,  								}  	/* [39/50]	            T.path += first(A.path); */  								if (!URI_FUNC(AppendSegment)(dest, sourceSeg->text.first, -										sourceSeg->text.afterLast)) { +										sourceSeg->text.afterLast, memory)) {  									return URI_ERROR_MALLOC;  								}  	/* [40/50]	            pathNaked = false; */ @@ -295,10 +297,24 @@ int URI_FUNC(RemoveBaseUri)(URI_TYPE(Uri) * dest,  		const URI_TYPE(Uri) * absSource,  		const URI_TYPE(Uri) * absBase,  		UriBool domainRootMode) { -	const int res = URI_FUNC(RemoveBaseUriImpl)(dest, absSource, -			absBase, domainRootMode); +	return URI_FUNC(RemoveBaseUriMm)(dest, absSource, absBase, +			domainRootMode, NULL); +} + + + +int URI_FUNC(RemoveBaseUriMm)(URI_TYPE(Uri) * dest, +		const URI_TYPE(Uri) * absSource, +		const URI_TYPE(Uri) * absBase, +		UriBool domainRootMode, UriMemoryManager * memory) { +	int res; + +	URI_CHECK_MEMORY_MANAGER(memory);  /* may return */ + +	res = URI_FUNC(RemoveBaseUriImpl)(dest, absSource, +			absBase, domainRootMode, memory);  	if ((res != URI_SUCCESS) && (dest != NULL)) { -		URI_FUNC(FreeUriMembers)(dest); +		URI_FUNC(FreeUriMembersMm)(dest, memory);  	}  	return res;  } | 
