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 ...@@ -418,55 +418,23 @@ static int win32_find_file(git_buf *path, const struct win32_path *root, const c
git__free(file_utf16); git__free(file_utf16);
return 0; return 0;
} }
static wchar_t* win32_nextpath(wchar_t *path, wchar_t *buf, size_t buflen)
static wchar_t * win32_nextpath(wchar_t * src, wchar_t * dst, size_t maxlen)
{ {
wchar_t * orgsrc; wchar_t term, *base = path;
while (*src == L';')
src++;
orgsrc = src; assert(path && buf && buflen);
if (!--maxlen) term = (*path == L'"') ? *path++ : L';';
goto nullterm;
while (*src && *src != L';') for (buflen--; *path && *path != term && buflen; buflen--)
{ *buf++ = *path++;
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++;
}
}
while (*src == L';') *buf = L'\0'; /* reserved a byte via initial subtract */
src++;
nullterm: while (*path == term || *path == L';')
*dst = 0; 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) 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