Brandon Williams <bmwill@xxxxxxxxxx> writes: > On 12/22, Johannes Sixt wrote: >> Am 21.12.2016 um 23:33 schrieb Brandon Williams: >> >On 12/21, Johannes Sixt wrote: >> >>+/* copies root part from remaining to resolved, canonicalizing it on the way */ >> >>+static void get_root_part(struct strbuf *resolved, struct strbuf *remaining) >> >>+{ >> >>+ int offset = offset_1st_component(remaining->buf); >> >>+ >> >>+ strbuf_reset(resolved); >> >>+ strbuf_add(resolved, remaining->buf, offset); >> >>+#ifdef GIT_WINDOWS_NATIVE >> >>+ convert_slashes(resolved->buf); >> >>+#endif >> > >> >So then the only extra cononicalization that is happening here is >> >converting '\\server\share' to '//server/share'? (or 'c:\' to 'c:/') >> >> Correct. All other directory separators are canonicalized by the >> primary function, strbuf_realpath. > > Sounds good. Logically everything looks good to me. And I like that > setting 'resolved' to the root of an abs path is pulled out into a > helper function. It took me a couple extra seconds to realize that > offset_1st_component returns 0 with a relative path, which makes causes > the call to get_root_part to essentially be a noop (ie nothing is > resolved). > > Thanks for helping get this to work on windows! Thanks, both. Let's move the topic with this patch to 'next'. Further micro-optimization can be done incrementally if desired.