Commit Diff


commit - 6d0918263815f42917efe14158e8f1c21b1aae22
commit + d2d73a094eb58f7ecf091d401f4d33ca905e17cd
blob - 752936b447d350244418b89e47c9861bf9797ef1
blob + 3ef5adffb4966a3003b993abc2656429566e5baf
--- iri.c
+++ iri.c
@@ -507,13 +507,11 @@ cpfields(struct iri *dest, const struct iri *src, int 
 }
 
 static inline int
-remove_dot_segments(struct iri *i)
+remove_dot_segments(char *buf, ptrdiff_t bufsize)
 {
-	char		*p, *q, *buf;
-	ptrdiff_t	 bufsize;
+	char		*p, *q;
 
-	buf = p = q = i->iri_path;
-	bufsize = sizeof(i->iri_path);
+	p = q = buf;
 	while (*p && (q - buf < bufsize)) {
 		if (p[0] == '/' && p[1] == '.' &&
 		    (p[2] == '/' || p[2] == '\0')) {
@@ -598,7 +596,7 @@ iri_parse(const char *base, const char *str, struct ir
 
 	if (iparsed.iri_flags & IH_SCHEME) {
 		cpfields(iri, &iparsed, iparsed.iri_flags);
-		remove_dot_segments(iri);
+		remove_dot_segments(iri->iri_path, sizeof(iri->iri_path));
 		return (0);
 	}
 
@@ -606,7 +604,7 @@ iri_parse(const char *base, const char *str, struct ir
 
 	if (iparsed.iri_flags & IH_HOST) {
 		cpfields(iri, &iparsed, IH_AUTHORITY|IH_PATH|IH_QUERY);
-		remove_dot_segments(iri);
+		remove_dot_segments(iri->iri_path, sizeof(iri->iri_path));
 		return (0);
 	}
 
@@ -632,7 +630,7 @@ iri_parse(const char *base, const char *str, struct ir
 		if (mergepath(iri, &ibase, &iparsed) == -1)
 			return (-1);
 	}
-	if (remove_dot_segments(iri) == -1)
+	if (remove_dot_segments(iri->iri_path, sizeof(iri->iri_path)) == -1)
 		return (-1);
 	return (0);
 }