Commit 8b3de0b6 by Sven Strickroth

Optimized win32_nextpath

Based on a suggestion by Russell Belfer.

Signed-off-by: Sven Strickroth <email@cs-ware.de>
Signed-off-by: Russell Belfer <rb@github.com>
parent 19aa8416
......@@ -418,55 +418,23 @@ static int win32_find_file(git_buf *path, const struct win32_path *root, const c
git__free(file_utf16);
return 0;
}
static wchar_t * win32_nextpath(wchar_t * src, wchar_t * dst, size_t maxlen)
static wchar_t* win32_nextpath(wchar_t *path, wchar_t *buf, size_t buflen)
{
wchar_t * orgsrc;
while (*src == L';')
src++;
wchar_t term, *base = path;
orgsrc = src;
assert(path && buf && buflen);
if (!--maxlen)
goto nullterm;
term = (*path == L'"') ? *path++ : L';';
while (*src && *src != L';')
{
if (*src != L'"')
{
*dst++ = *src++;
if (!--maxlen)
{
orgsrc = src;
goto nullterm;
}
}
else
{
src++;
while (*src && *src != L'"')
{
*dst++ = *src++;
if (!--maxlen)
{
orgsrc = src;
goto nullterm;
}
}
if (*src)
src++;
}
}
for (buflen--; *path && *path != term && buflen; buflen--)
*buf++ = *path++;
while (*src == L';')
src++;
*buf = L'\0'; /* reserved a byte via initial subtract */
nullterm:
*dst = 0;
while (*path == term || *path == L';')
path++;
return (orgsrc != src) ? (wchar_t *)src : NULL;
return (path != base) ? path : NULL;
}
static int win32_find_system_file_using_path(git_buf *path, const char *filename)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment