A workaround is in place if you use "read" and "write" Posix functions as these break up large transfers into multiple smaller transfers before they eventually invoke DosRead (DosWrite). The native OS/2 API call "DosRead" continues to suffer from JFS quirks and limitations. It's the IFS driver that is broken, not the DosRead API function.

EAs: DosQueryFileInfo, DosQueryPathInfo, DosSetFileInfo, DosSetPathInfo, "pInfo" pointing to EAOP2 structure:

- Getting all EAS at once is done with info level = FIL_QUERYALLEAS = 4.
  fpFEA2LIST pointer will point to list of all EAs queried, including their values. You will need to hop from one entry to the next following the oNextEntryOffset field (the individual FEA2s are varying in length). Provide a sufficiently large buffer in fpFEA2List (> 64k, better twice that size) so that it can be filled.

- Setting all EAS at once is done with info level = FIL_SETEASFROMLIST = 2.
  fpFEA2LIST pointer points to list of all EAS to set, including the values to set. Need to set the oNextEntryOffset to point to the next element (the individual FEA2s are varying in length). Provide a sufficiently large buffer in fpFEA2List (holding all your EAs). You have to ensure that you do not exceed maximum EA overall size.

These info levels are undocumented in the CPS.

You should be able to feed the result of FIL_QUERYALLEAS (read EAs with DosQueryXXXXInfo) into FIL_SETEASFROMLIST (write EAs with DosSetXXXXInfo).

DosEnumAttribute will give you a list of EAs (names) that exist. It's not really needed if you just make the EA buffer large enough (we know the maximum but take into account EA structure and EA name lengths, not only values).

-> https://www.os2world.com/forum/index.php/topic,3349.msg47376.html#msg47376


