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

Reply via email to