Skip to content

Commit

Permalink
fixup! mingw: optionally enable wsl compability file mode bits
Browse files Browse the repository at this point in the history
fix wsl mode bits bug in subdir

Support for wsl mode bits was previously added to git,
but there was a bug because the filenames provided by
fdata did not contain paths. Ex: fdata->FileName is only
foo.sh while we need path/to/foo.sh to open the file.

This commit fixes the issue.

Signed-off-by: lixungeng <xungeng@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
  • Loading branch information
swigger authored and dscho committed Aug 7, 2024
1 parent 2e6a859 commit 15bcde9
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions compat/win32/fscache.c
Original file line number Diff line number Diff line change
Expand Up @@ -238,9 +238,20 @@ static struct fsentry *fseentry_create_entry(struct fscache *cache,
&(fse->u.s.st_mtim));
filetime_to_timespec((FILETIME *)&(fdata->CreationTime),
&(fse->u.s.st_ctim));
if (fdata->EaSize > 0 && are_wsl_compatible_mode_bits_enabled()) {
copy_wsl_mode_bits_from_disk(fdata->FileName,
fdata->FileNameLength / sizeof(wchar_t), &fse->st_mode);
if (fdata->EaSize > 0 &&
sizeof(buf) >= (list ? list->len+1 : 0) + fse->len+1 &&
are_wsl_compatible_mode_bits_enabled()) {
size_t off = 0;
wchar_t wpath[MAX_LONG_PATH];
if (list && list->len) {
memcpy(buf, list->dirent.d_name, list->len);
buf[list->len] = '/';
off = list->len + 1;
}
memcpy(buf + off, fse->dirent.d_name, fse->len);
buf[off + fse->len] = '\0';
if (xutftowcs_long_path(wpath, buf) >= 0)
copy_wsl_mode_bits_from_disk(wpath, -1, &fse->st_mode);
}

return fse;
Expand Down

0 comments on commit 15bcde9

Please sign in to comment.