compat/fsmonitor/fsm-*-win32: support long paths

Update wchar_t buffers to use MAX_LONG_PATH instead of MAX_PATH in
the Win32 backend source files.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
This commit is contained in:
Johannes Schindelin
2021-08-05 21:28:15 +02:00
committed by Lessley Dennington
parent 5a9521c026
commit 4a3ad211e9
3 changed files with 19 additions and 19 deletions

View File

@@ -51,7 +51,7 @@ struct fsm_health_data
struct wt_moved
{
wchar_t wpath[MAX_PATH + 1];
wchar_t wpath[MAX_LONG_PATH + 1];
BY_HANDLE_FILE_INFORMATION bhfi;
} wt_moved;
};
@@ -178,8 +178,8 @@ static int has_worktree_moved(struct fsmonitor_daemon_state *state,
return 0;
case CTX_INIT:
if (xutftowcs_path(data->wt_moved.wpath,
state->path_worktree_watch.buf) < 0) {
if (xutftowcs_long_path(data->wt_moved.wpath,
state->path_worktree_watch.buf) < 0) {
error(_("could not convert to wide characters: '%s'"),
state->path_worktree_watch.buf);
return -1;

View File

@@ -25,7 +25,7 @@ struct one_watch
DWORD count;
struct strbuf path;
wchar_t wpath_longname[MAX_PATH + 1];
wchar_t wpath_longname[MAX_LONG_PATH + 1];
DWORD wpath_longname_len;
HANDLE hDir;
@@ -128,8 +128,8 @@ normalize:
*/
static void check_for_shortnames(struct one_watch *watch)
{
wchar_t buf_in[MAX_PATH + 1];
wchar_t buf_out[MAX_PATH + 1];
wchar_t buf_in[MAX_LONG_PATH + 1];
wchar_t buf_out[MAX_LONG_PATH + 1];
wchar_t *last_slash = NULL;
wchar_t *last_bslash = NULL;
wchar_t *last;
@@ -138,7 +138,7 @@ static void check_for_shortnames(struct one_watch *watch)
wcscpy(buf_in, watch->wpath_longname);
wcscpy(buf_in + watch->wpath_longname_len, L".git");
if (!GetShortPathNameW(buf_in, buf_out, MAX_PATH))
if (!GetShortPathNameW(buf_in, buf_out, MAX_LONG_PATH))
return;
last_slash = wcsrchr(buf_out, L'/');
@@ -196,8 +196,8 @@ static enum get_relative_result get_relative_longname(
const wchar_t *wpath, DWORD wpath_len,
wchar_t *wpath_longname)
{
wchar_t buf_in[2 * MAX_PATH + 1];
wchar_t buf_out[MAX_PATH + 1];
wchar_t buf_in[2 * MAX_LONG_PATH + 1];
wchar_t buf_out[MAX_LONG_PATH + 1];
DWORD root_len;
/* Build L"<wt-root-path>/<event-rel-path>" */
@@ -211,7 +211,7 @@ static enum get_relative_result get_relative_longname(
* shortname or a longname. This routine allows either to be
* given as input.
*/
if (!GetLongPathNameW(buf_in, buf_out, MAX_PATH)) {
if (!GetLongPathNameW(buf_in, buf_out, MAX_LONG_PATH)) {
/*
* The shortname to longname conversion can fail for
* various reasons, for example if the file has been
@@ -271,10 +271,10 @@ static struct one_watch *create_watch(struct fsmonitor_daemon_state *state,
FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE;
HANDLE hDir;
DWORD len_longname;
wchar_t wpath[MAX_PATH + 1];
wchar_t wpath_longname[MAX_PATH + 1];
wchar_t wpath[MAX_LONG_PATH + 1];
wchar_t wpath_longname[MAX_LONG_PATH + 1];
if (xutftowcs_path(wpath, path) < 0) {
if (xutftowcs_long_path(wpath, path) < 0) {
error(_("could not convert to wide characters: '%s'"), path);
return NULL;
}
@@ -289,7 +289,7 @@ static struct one_watch *create_watch(struct fsmonitor_daemon_state *state,
return NULL;
}
if (!GetLongPathNameW(wpath, wpath_longname, MAX_PATH)) {
if (!GetLongPathNameW(wpath, wpath_longname, MAX_LONG_PATH)) {
error(_("[GLE %ld] could not get longname of '%s'"),
GetLastError(), path);
CloseHandle(hDir);
@@ -518,7 +518,7 @@ static int process_worktree_events(struct fsmonitor_daemon_state *state)
struct string_list cookie_list = STRING_LIST_INIT_DUP;
struct fsmonitor_batch *batch = NULL;
const char *p = watch->buffer;
wchar_t wpath_longname[MAX_PATH + 1];
wchar_t wpath_longname[MAX_LONG_PATH + 1];
/*
* If the kernel gets more events than will fit in the kernel

View File

@@ -76,8 +76,8 @@ static enum fsmonitor_reason is_virtual(struct repository *r)
*/
static enum fsmonitor_reason is_remote(struct repository *r)
{
wchar_t wpath[MAX_PATH];
wchar_t wfullpath[MAX_PATH];
wchar_t wpath[MAX_LONG_PATH];
wchar_t wfullpath[MAX_LONG_PATH];
size_t wlen;
UINT driveType;
@@ -85,7 +85,7 @@ static enum fsmonitor_reason is_remote(struct repository *r)
* Do everything in wide chars because the drive letter might be
* a multi-byte sequence. See win32_has_dos_drive_prefix().
*/
if (xutftowcs_path(wpath, r->worktree) < 0)
if (xutftowcs_long_path(wpath, r->worktree) < 0)
return FSMONITOR_REASON_ZERO;
/*
@@ -103,7 +103,7 @@ static enum fsmonitor_reason is_remote(struct repository *r)
* slashes to backslashes. This is essential to get GetDriveTypeW()
* correctly handle some UNC "\\server\share\..." paths.
*/
if (!GetFullPathNameW(wpath, MAX_PATH, wfullpath, NULL))
if (!GetFullPathNameW(wpath, MAX_LONG_PATH, wfullpath, NULL))
return FSMONITOR_REASON_ZERO;
driveType = GetDriveTypeW(wfullpath);