fvogt requested changes to this revision. fvogt added a comment. This revision now requires changes to proceed.
On neon it won't work as the kernel everything is built against (so the minimum API/ABI) is too old. You'll either have to hack around that by messing with include paths or use something more recent. statx does not have a glibc wrapper, which means there is no `statx(...)` function. So HAVE_STATX is rightfully false. What Qt does is different: If `SYS_statx` is defined, it determines during runtime whether the kernel supports it. `QT_STATBUF` is in any case a `struct stat`/`stat64`, so if your code calls statx, it'll corrupt memory. The only reason your code even compiled is that stx_btime is not a macro, so that code wasn't compiled in. There is a bigger design issue with this approach even: There are either "stx_" members or "st_" members available. So every access to "buff" needs to be guarded by both an #if HAVE_STATX and an if(statx_available). You also need to note that the kernel syscall interface is different from glibc wrappers/posix functions: There is no errno, the error is directly in the return value. So `stat(...) == -1` is not equal to `syscall(SYS_statx, ...) == -1`. The latter is equivalent to `stat(...) == -1 && errno == EPERM` (EPERM is 1). I suggest rewriting this to make use of a wrapper function instead of macros, like Qt does. You can find that in `src/corelib/io/qfilesystemengine_unix.cpp`. REPOSITORY R241 KIO REVISION DETAIL https://phabricator.kde.org/D7423 To: ngraham, dfaure, broulik, elvisangelaccio, #frameworks, #dolphin, fvogt Cc: fvogt, kde-frameworks-devel, bruns, meven, ltoscano, #frameworks, michaelh, ngraham