http: use strbuf API in quote_ref_url
PATCH v2 1/1 http: use strbuf API in quote_ref_url
In addition, ''quote_ref_url'' inserts a slash between the base URL and remote ref path only if needed. Previously, this insertion wasn't contingent on the lack of a separating slash.
Signed-off-by Tay Ray Chuan <[email protected]>
---
Differences from v1:
*use buf when checking for '/'
*remove for's braces
http.c | 30 ++++++++++-------------------- 1 files changed, 10 insertions(+), 20 deletions(-)
http.c +10 -20
@@ -577,31 +577,21 @@ static inline int hex(int v)static char *quote_ref_url (const char *base,const char *ref) { +struct strbuf buf =STRBUF_INIT ;const char *cp; -char *dp, *qref; -int len, baselen, ch; +int ch; - baselen =strlen (base); - len = baselen +2 ;/* '/' after base and terminating NUL */ -for (cp = ref; (ch = *cp) !=0 ; cp++, len++) +strbuf_addstr (&buf, base); +if (buf.len && buf.buf[buf.len -1 ] !='/' && *ref !='/' ) +strbuf_addstr (&buf,"/" ); + +for (cp = ref; (ch = *cp) !=0 ; cp++)if (needs_quote (ch)) - len +=2 ;/* extra two hex plus replacement % */ - qref =xmalloc (len); -memcpy (qref, base, baselen); - dp = qref + baselen; - *(dp++) ='/' ; -for (cp = ref; (ch = *cp) !=0 ; cp++) { -if (needs_quote (ch)) { - *dp++ ='%' ; - *dp++ =hex ((ch >>4 ) &0xF ); - *dp++ =hex (ch &0xF ); - } +strbuf_addf (&buf,"%%%02x" , ch);else - *dp++ = ch; - } - *dp =0 ; +strbuf_addch (&buf, *cp); -return qref; +return strbuf_detach (&buf,NULL ); }int http_fetch_ref (const char *base,struct ref *ref)
Signature · 1 line
1.6.2.rc1
Hi,
Quoted 5 lines · Tay Ray Chuan
In addition, ''
quote_ref_url'' inserts a slash between the base URL and remote ref path only if needed. Previously, this insertion wasn't contingent on the lack of a separating slash.Signed-off-by Tay Ray Chuan <[email protected]>
Thanks, and ACK ;-)
Ciao,
Dscho