when given a null for FILE_GET_EA_INFORMATION, use READDIR to construct one with
the full named attribute directory listing
new function read_entire_dir() allocates an initial buffer for readdir entries a
nd calls nfs41_readdir() repeatedly to fill it. the buffer is realloc()ed as mo
re space is required, allowing the function to return a complete listing in a si
ngle buffer
new function calculate_ea_list_length() calculates the exact length of the FILE_
GET_EA_INFORMATION buffer required to hold all of the names from the directory l
isting
once the FILE_GET_EA_INFORMATION buffer is allocated, it is filled by populate_e
a_list() and cached with nfs41_open_state
handle_getexattr() remains largely unchanged
Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
check_nfs41_queryea_args() will now accept EaList == NULL, unless EAs are unsupported
moved handling of cygwin EAs to new function QueryCygwinEA()
Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
when open is given an ea buffer, pass it to new function nfs41_ea_set() after successful file creation. matches NTFS behavior on all dispositions: sets EAs on FILE_CREATE, FILE_OVERWRITE, FILE_OVERWRITE_IF, FILE_SUPERSEDE. does not set EAs on FILE_OPEN. only sets EAs on FILE_OPEN_IF if file did not previously exist. see new function create_with_ea()
nfs41_ea_set() returns nfs error codes. uses NFS4ERR_FBIG when the EaValueLength exceeds NFS4_EASIZE (256). this gets mapped to windows error ERROR_FILE_TOO_LARGE, which the driver now converts to STATUS_EA_TOO_LARGE
Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>