jnr.posix.windows.WindowsFindData Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cassandra-driver Show documentation
Show all versions of cassandra-driver Show documentation
Shaded version of DataStax Java Driver for Apache Cassandra
package jnr.posix.windows;
import jnr.ffi.*;
/**
* WIN32_FIND_DATA. For use with FindFirstFileW and friends (since this is for W methods
* the filename fields are wchar_t (or on windows usigned short) in width - TCHAR is an ambiguously
* sized type depending on which variant of method calls it).
*/
public class WindowsFindData extends CommonFileInformation {
public static final int MAX_PATH = 260;
final UnsignedLong dwFileAttributes;
// FIXME: I have no idea why I could not include FileTime here but having it do its own layout seems to change
// something.
final UnsignedLong chigh;
final UnsignedLong clow;
final UnsignedLong ahigh;
final UnsignedLong alow;
final UnsignedLong uhigh;
final UnsignedLong ulow;
final UnsignedLong nFileSizeHigh;
final UnsignedLong nFileSizeLow;
final UnsignedLong dwReserved0;
final UnsignedLong dwReserved1;
final Padding cFileName;
final Padding cAlternateFileName;
public WindowsFindData(jnr.ffi.Runtime runtime) {
super(runtime);
dwFileAttributes = new UnsignedLong();
clow = new UnsignedLong();
chigh = new UnsignedLong();
alow = new UnsignedLong();
ahigh = new UnsignedLong();
ulow = new UnsignedLong();
uhigh = new UnsignedLong();
nFileSizeHigh = new UnsignedLong();
nFileSizeLow = new UnsignedLong();
dwReserved0 = new UnsignedLong();
dwReserved1 = new UnsignedLong();
// This is epically large but any paths with //?/ can get a long name. Also even if you do not
// and depend on MAX_PATH (original constant this struct is supposedly defined on) then you can
// get overflows from FindFirstFileW on reparse points. So we will waste memory on allocation
// to avoid the potential for buffer overflows.
// This number specifically is the actual physical limit of a file size in NTFS. So although this
// the functions using this struct cannot handle something this long the internet seems to think
// it is possible to get these long values copied into this field.
cFileName = new Padding(NativeType.USHORT, 32767);
cAlternateFileName = new Padding(NativeType.USHORT, 14);
}
public HackyFileTime getCreationTime() {
return new HackyFileTime(chigh, clow);
}
public HackyFileTime getLastAccessTime() {
return new HackyFileTime(ahigh, alow);
}
public HackyFileTime getLastWriteTime() {
return new HackyFileTime(uhigh, ulow);
}
public int getFileAttributes() {
return dwFileAttributes.intValue();
}
public long getFileSizeHigh() {
return nFileSizeHigh.longValue();
}
public long getFileSizeLow() {
return nFileSizeLow.longValue();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy