[Linux] Implement DirAccess.is_case_sensitive for EXT4 and F2FS.

This commit is contained in:
bruvzg 2023-10-13 15:48:03 +03:00
parent 51f81e1c88
commit 54eae6221a
No known key found for this signature in database
GPG key ID: 7960FCF39844EC38
3 changed files with 26 additions and 1 deletions

View file

@ -38,9 +38,11 @@
#include "core/templates/list.h"
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/statvfs.h>
#ifdef HAVE_MNTENT
@ -488,6 +490,27 @@ bool DirAccessUnix::is_hidden(const String &p_name) {
return p_name != "." && p_name != ".." && p_name.begins_with(".");
}
bool DirAccessUnix::is_case_sensitive(const String &p_path) const {
#if defined(LINUXBSD_ENABLED)
String f = p_path;
if (!f.is_absolute_path()) {
f = get_current_dir().path_join(f);
}
f = fix_path(f);
int fd = ::open(f.utf8().get_data(), O_RDONLY | O_NONBLOCK);
if (fd) {
long flags = 0;
if (ioctl(fd, _IOR('f', 1, long), &flags) >= 0) {
::close(fd);
return !(flags & 0x40000000 /* FS_CASEFOLD_FL */);
}
::close(fd);
}
#endif
return true;
}
DirAccessUnix::DirAccessUnix() {
dir_stream = nullptr;
_cisdir = false;