EAIO Changes
Version 3.01.13
Changes:
- EAIO Framework 8 compatibility. https://jira.frostbite.ea.com/browse/SUP-1073
- Fixing android test driver.
Version 3.01.12
Changes:
- Added missing include to fix compile warning.
Version 3.01.11
Changes:
- Added Unix implementation to IsFilePathStringValid.
- Added unit test for IsFilePathStringValid.
- Fixed parsing issue causing directory paths to always fail in IsFilePathStringValid.
- Windows filename restrictions are now enforced on all File Systems.
- Fixed bug in GetSpecialDirectory to also check if HOME and TMPDIR are empty and not just null.
Version 3.01.10
Changes:
- Fix for UnixFileStream IsValidHandle()
Version 3.01.09
Changes:
- Added asynchronous I/O support for Linux.
- Removed the dependency on job_manager
- Updated to support April GDK.
Version 3.01.08
Changes:
- Removed the usage of job_manager/atomic_allocator. Only one dependency left.
- Replaced AsyncExecutor notification system to use a semaphore. Improved performance by about 2-3%.
- Added support for polled asynchronous I/O. This is required for some console platforms.
- Added ability to set the polling delta. Older platforms using 1ms while newer platforms using 0ms.
- Added API support for Direct Storage. This includes the ability to create multiple read request I/Os.
- Fixed issue where error code from OS wasn't being returned.
- Changed I/O request dispatch algorithm to more agressively queue I/O prior to checking for more requests or performing I/O completion waits.
- Fixed an assortment of spelling errors and typos.
Version 3.01.07
Changes:
- Fixed PS5 command buffer allocation to use the allocator supplied to the async executor init call.
- Fixed the completed command buffer execution count.
- Fixed lockup issue when PS4 receives a very large number of requests at one time. Unit test was locking up.
- Fixed memory leak issue on shutdown for PS4/PS5
Version 3.01.06
Changes:
- Made the command buffer allocator not associated with an executor.
- Made available a AMPR request builder class that can be used outside of EAIO internals.
- Modified the base AMPR request class to provide a default implementation and only requires the notification to be implemented.
Version 3.01.05
Changes:
- Fixed support for Async Ampr requests.
Version 3.01.04
Changes:
- Changed job_manager to a build dependency, to prevent it from being transtively propagated to other packages.
Version 3.01.03
Changes:
- Updated to support PS5 0.9 SDK.
- Updated test module to compile with bulkbuild files.
- Added PS5 special directory paths that differ from the PS4.
Version 3.01.02
Changes:
- Fixed drive separators for NX and Sony platforms.
Version 3.01.01
Changes:
- VS solution now has docs, scripts and build files.
- Gitlab CI addition.
Version 3.01.00
Changes:
- Built in support for Balin I/O and Memory Mapping.
Version 3.00.02
Changes:
- Fixed compile issue when using EAIO with the core IO systems.
Version 3.00.01
Changes:
- Fixed a mutex problem in AsyncExecutorStdC.
Version 3.00.00
Changes:
- AsyncExecutor system added to support the managing of asyncronous notification of blocking and non-blocking I/O.
- Extended IStream to support doing asyncronous notification of I/O.
- Added platform specific support of non-blocking I/O for Windows systems (including XB1) and Sony platforms.
Version 2.24.03
Changes:
- Updated GetSpecialDirectory for kSpecialDirectoryCurrentApplication for NX to return "host" to match the behavior of other platforms.
Version 2.24.02
Changes:
- Removed the mounting of the cache storage from the NX InitializeFileSystem because the name of the mount could be anything. It is up to the user to mount the drive manually.
Version 2.24.01 (May 30, 2019)
Changes:
- Added support for EA_WINAPI_FAMILY_GAMES.
- Removed the EA_WINAPI_FAMILY, EA_WINAPI_PARTITION and EA_WINAPI_FAMILY_PARTITION backward compatible defines from Config.h.
- Stripped ps3, psp2, xenon, Wii, WiiU, and 3DS support.
Version 2.24.00 (Apr 23, 2019)
Changes:
- Resolving a crash when initializing filesystem on NX in a production environment.
Version 2.23.05 (Apr 19, 2019)
Changes:
- Reposting the release version due to package server issues.
Version 2.23.04 (March 15, 2019)
Changes:
- Removed more deprecated platform code.
- Updated the GetTime function for NX to return 0 instead of asserting. Getting the file time is not supported on NX.
- Added method to expose a FileStream's file descriptor.
Version 2.23.03 (December 13th, 2018)
Changes:
- Removed PSP2, Xbox360 and PS3 support.
- Updated code to use EA_PLATFORM_SONY where possible.
- Cleaned up some defines that were added to EABase. This requires you to use a more recent version of EABase.
Version 2.23.02 (December 13th, 2018)
Changes:
- Rewrote several areas of the code to use the nn filesystem API for the Nintendo Switch. This gave better results when querying for file and directory information.
Version 2.23.01 (July 30th, 2018)
Changes:
- Disabled support for readdir_r on unix unless you are using an glibc 2.23 or earlier as the function is now deprecated. Users should consider switching EAIO to always use the alternative 'readdir' instead as readdir_r is considered harmful https://womble.decadent.org.uk/readdir_r-advisory.html. You can do so by defining EAIO_READDIR_R_PRESENT=0 globally.
- Allows Nintendo Switch Temporary, and Download (Cache Storage) mount sizes to be configured via EAIO.NXMETA_CONFIG.ENABLED, EAIO.NXMETA_CONFIG.TEMP_SIZE, EAIO.NXMETA_CONFIG.CACHE_SIZE, and EAIO.NXMETA_CONFIG.CACHE_JOURNAL_SIZE properties. Note that if EAIO.NXMETA_CONFIG.ENABLED is not equal to 1 all other EAIO.NXMETA_CONFIG.xxxx properties will be ignored.
- EAIO will now return the proper mount/directory when querying EA::IO::GetSpecialDirectory() on the Nintendo Switch, whereas previously it was returning Unix system paths which did not map to anything valid.
- EAIO will now return the proper directory when querying EA::IO::GetSpecialDirectory() on iPhone for kSpecialDirectoryUserApplicationData and kSpecialDirectoryTemp which map the the application Resource and device tmp directory respectively.
Version 2.23.00 (June 20th, 2018)
Changes:
- Added support for the NX platform.
- Avoids a VS2017 linker error where empty string literals may have mismatched alignment causing a warning.
Version 2.22.13 (February 16th, 2018)
Changes:
- Corrects EAIO's EntryFindDataKettle from allocating internally using an alignment of 0, since 0 alignment is not a requirement of EAIO.
Version 2.22.12 (January 12th, 2018)
Changes:
- Adds support for getting the file root for android via the GetSpecialDirectory() function with 'kSpecialDirectoryUserApplicationData'. This is useful since the default asset root, appbundle:/, on android is read only. The file directory is a directory which exists only as long as your application is installed and is writeable.
Version 2.22.11 (September 22nd, 2017)
Changes:
- Added char16_t support to EAIni which previously only worked with wchar_t.
- Fixes potential build issue when using EAIO in Capilano SharedOS applications.
Version 2.22.10 (March 17th, 2017)
Changes:
- Updated public dependencies in the initialize.xml to make the package work with Framework's automatic outsourcing tools.
Version 2.22.09 (October 21st, 2016)
Changes:
- Updated Build and Initialize scripts to remove warnings generated by Framework 3.
Version 2.22.08 (August 10th, 2016)
Changes:
- Fixes Android compilation error when building under Visual Studio due to a duplicate source file include.
Version 2.22.07 (July 8, 2016)
Changes:
- Fixes warnings found by Xbox One XDK March QFE 2.
- Adds the ability to set the release allocator for the FileStream class. This is specifically the allocator that will be used to free the object itself when its ref count hits 0.
Version 2.22.06 (February 23, 2016)
Changes:
- Fix for the includedirs from the dependency on CoreStream.
- Fix VS 2015 warnings.
Version 2.22.05 (November 9th, 2015)
Changes:
- Fixed a bug with Kettle Directory Interation which would present itself if the size of the directory returned by fstat was 0.
Version 2.22.04 (September 25th, 2015)
Changes:
- Fixed export of includedirectories for CoreStream dependency.
- Fixed an error in Kettle Directory Iteration where if there were plenty of directory entries, not all of them would be reported.
- Converted initialize.xml to structured-XML which fixes warnings generated by Framework.
Version 2.22.03 (June 15, 2015)
Changes:
- Fixed an issue where EAIO failed to compile if EAIO.EAIO_FILEPATH_ENABLED was set to 1 and EAIO was being built with VS2015.
Version 2.22.02 (April 30th, 2015)
Changes:
- Fixed max file name and directory name length setting for Xbox One.
Version 2.22.01 (May 4th, 2015)
Changes:
- Added char overloads for IsFileNameStringValid(), IsDirectoryNameStringValid(), IsFilePathStringValid().
- Fixed additional warnings encountered when compiling with VS2015.
- Fixed additional warnings encountered when compiling with VS2015.
Version 2.22.01 (March 16th, 2015)
Changes:
- Altered code style to align more closely to Frostbite coding style.
Version 2.22.00 (February 9th, 2015)
Changes:
- Fixed a bug in FilePath::RemoveLastDirectory() that would not handle alternate file path separators in some cases.
- Introduced several wchar_t variations of API's to support PS3SDK 460.001.
- Default to using EAIO_DIRECTORY_ITERATOR_USE_PATHSTRING=1. This has been in since 2009, but is a potentially breaking change for integrators. Pass in eaio.EAIO_DIRECTORY_ITERATOR_USE_PATHSTRING=0 build property to restore deprecated behavior
- Fixed compilation issues for VS2015 and added some API's that accept wchar_t parameters.
- Fixed a compile error when using mkstemp to ensure we are using the proper glibc version rather than simply checking for compiler version
Version 2.21.00 (July 4th, 2014)
Changes:
- Fixed a JNI error that is known to occur on Android Samsung Galaxy Note 3's (but could occur on other Android devices as well). Game teams shipping on Android
should update to this release to avoid potential crashes on Android devices.
- Added a generic string version of ReadLine to complement the basic char buffer version and make usage safer and easier.
/// Reads line of text from a file. The returned line will not have a trailing \r or \n character.
/// In case of returning kSizeTypeError or kSizeTypeDone, the returned string will be empty.
/// Requires a stream which supports rewinding to at least the starting position at the time of this call.
/// Upon error (return of kSizeTypeError), the string will be cleared, but not necessarily freed of capacity.
///
/// Example usage:
/// eastl::string8 s8;
/// while(EA::IO::ReadLine(&fileStream, s8) < kSizeTypeDone) // While there were more lines and there was no error...
/// ; // do something
///
template <typename String>
size_type ReadLine(IStream* pIS, String& s, Endian endianSource = kEndianBig);
- Added a public version.h header.
Version 2.20.02 (May 12th, 2014)
Changes:
- Fixed a bug in EntryFindFirst under Unix whereby if no files matched a user-supplied filter the function would mistakenly return a non-NULL value.
- Made EntryFindFirst and EntryFindNext handle the case whereby found files aren't UTF8-encoded, which we found could happen when mounting a Windows share, and which theoretically could happen even without such as share because Unix file systems don't have any defined encoding.
- Fixed the definition of EAIO_MKSTEMPS_AVAILABLE to handle older GCC/GLIBC versions.
Version 2.20.01 (February 11, 2014)
Changes:
- Fixed a bug in the directory iteration functionality (e.g. EntryFindFirst, DirectoryIterator) on Apple platforms whereby it was not searching case-insensitively like it should be.
- Removed support for the following platforms due to their deprecation:
- Bada
- Freebox
- GameCube
- Marmalade / Airplay
- Nintendo 3DS / CTR
- Palm
- Playbook / BB10
- Playstation 2
- Playstation Portable
- Wii U / Cafe
- Wii / Revolution
- WinCE
- Fixed some potential compile problems in <EAIO/compat/EAFilePath.h>
- Added kSpecialDirectoryUserPictures and kSpecialDirectoryUserMovies support to some platforms.
Version 2.20.00 (December 13, 2013)
Changes:
- Added formal support for PS4 and XBox One platforms.
- Modified the initialize script to ensure that defines are consistent for the EAIO library and packages including its headers.
- Removed Microsoft stat/_wstat usage, as Microsoft's implementation of these functions is broken due to returning local time instead of universal time. Reported by Laurent Benes.
- Fixed a bug in Directory::Create whereby it wouldn't create a directory if the path included a single directory. Submitted by Jason Beardsley.
- Fixed a bug in File::SetAttributes for Unix platforms where it would mistakenly return false. Submitted by Jason Beardsley.
Version 2.19.01 (November 15th, 2013)
Changes:
- Fixed an issue where the define for EAIO_64_BIT_SIZE_ENABLED could differ between
user code including EAIO's headers and the code compiled into the EAIO library.
- Fixed the definition of EA_FILE_SYSTEM_CASE_SENSITIVE mistakenly being set to 0 for some platforms in which it should be 1.
- Moved a call to EntryFindFinish to the bottom of DirectoryIterator::Read. This doesn't fix a bug and the original code was correct (though it may look like it); rather it is simply better form and it stops analysis tools like Coverity from thinking it's a bug.
Version 2.19.00 (Oct 3, 2013)
Changes:
- Support for relative paths in application bundles (.apk)
- Fix file descriptor resource leak on Android.
- Modified the default current working directory for PS4. Instead of /hostapp/ EAIO now defaults to /app0/. Users relying
on the value of the CWD may need to modify their code. This change was made because retail applications should not read from /hostapp/.
Version 2.18.01 (July 29, 2013)
Changes:
- Updates to test harness to work with EAMain 2.00.00
Version 2.18.00 (July 12, 2013)
Changes:
- Removed unnecessary boolean syntax from FnMatch(). Reported by Luc Isaak.
- Made StreamBuffer::SetPosition return false for any case where the resulting position would be negative.
- Added kSpecialDirectoryDevScratch and kSpecialDirectoryDownloadData to enum SpecialDirectory, plus support for them in GetSpecialDirectory.
- On Linux, MakeTempPathName now uses mkstemps when possible.
- Added support for relative paths in application bundles (.apk)
Version 2.17.04 (April 3rd, 2013)
Changes:
- Added statvfs usage for the Playbook family of platforms. Suggested by Michael Martel.
- Changed EAIOZoneObject to have an allocation offset of 16 instead of (2 * sizeof(void*)). This fixes runtime assertions you can get in PPMalloc on some platforms.
- Implemented fix for Android "JNI ERROR (app bug): local reference table overflow (max=512)"
Version 2.17.03 (March 04, 2013)
Changes:
- Made InitializeFileSystem have a 0 second timeout instead of a 2 second timeout. For media builds it just caused startup delays. Suggested by Ning Tang.
- Implemented fix for PS3 GetTempDirectory for the case that EA::IO::SetPS3GameDataNames was not called on startup. There's a bug in the PS3 itself that causes one of its functions to misbehave and this change works around that bug.
Version 2.17.02 (February 4th, 2013)
Additions:
- Added two new PS3 functions, which allow somewhat seamless use of PS3 Game Data (hard drive storage):
- void SetPS3GameDataNames(const char* pTitle, const char* pTitleId, const char* pVersion, const char* pDirName);
- void GetPS3GameDataNames(char* pTitle, char* pTitleId, char* pVersion, char* pDirName);
Changes:
- Worked around some potential strict-aliasing problems in EAStreamAdapter's ReadFloat, etc.
- Revised FindFileFirst and FindFileNext to use less stack memory for Unix-like platforms, especially for the case of 32 bit wchar_t. Previously the stack usage could cause stack overflow on platforms with small default stack sizes, such as OS X.
Bug Fixes
- Fixed bug in FileChangeNotification for non-Windows platforms, where it would stop iterating subdirectories after the first one.
- Fixed a bug in DirectoryIterator whereby it's possible the parent directory ".." wouldn't be enumerated.
- Worked around a couple spurious compiler warnings that VS2012 generates.
Version 2.17.01 (December 10th, 2012)
Bug Fixes
- Corrects wchar issues on Android when using Framework 2.
Version 2.17.00 (December 7th, 2012)
Changes
- Added workaround for S_ISWHT file types on Apple OSs.
- Added MemoryStream::SetReleaseAllocator.
- Added WiiU support.
Bug Fixes
- Fixed EAIniFile's support for .iniFiles using text that's not 8 bit, and added a unit test to exercise it. The tested support now includes UCS2 big endian, UCS2 little endian, UCS4 bit endian, UCS4 little endian.
- Fixed bug in definition of kMaxDirectoryLength, kMaxFileNameLength, kMaxDirectoryNameLength, kMaxExtensionLength for Unix file systems. Previously they were set to 256 while kMaxPathLength was 1024, whereas they should all be set to whatever kMaxPathLength is. This could result in too short a path being specified in some cases. Reported by Alex Zvenigorodsky.
Version 2.16.03 (Novemeber 5th, 2012)
Changes
- Supressed warning 4574 ('_SECURE_SCL' is defined to be '0': did you mean to use '#if _SECURE_SCL'?) occuring in Windows 8 release configurations.
- Revised size_type casting code slightly to extend an earlier fix by Derek Sibelle to include a couple additional functions.
- Fixed a bug in DirectoryIterator::Read which would cause a it to effectively ignore a user request to report a "." dir when the user also requested a ".." dir. It is unlikely that anybody has been affected by this, as it's an unusual pathway that's not normally used.
- Fixed FileStream::operator= to check for assignment to itself.
Bug Fixes
- Fix for File::SetTime() for WinPRT
Version 2.16.02 (October 1, 2012)
Changes
- Fixed a problem with GetDriveInfo returning drives that Windows later decides are invalid. GetDriveInfo now tests the drives returned by Windows before returning them to the user. This appears to be a weakness or bug in Windows' implementation of GetLogicalDriveStrings.
- Added EA_HAVE_SYS_STAT_H and usage, for portability of support under Unix and Unix-like OSs.
- Fixed 32 bit overflow on Unix-based platforms in GetDriveFreeSpace.
Version 2.16.01 (August, 2012)
Changes
- Added proper GetTempDirectory implementation for WinRT targets.
- Added testing for DLL builds
- Removed WinSock2.h dependency since it cause Windows Phone builds to fail
Version 2.16.00 (July 3, 2012)
Changes
- Added WinRT (Windows Metro) support.
- Added FreeBSD support (32 and 64 bit).
- Added char, char16_t and char32_t overloads for DirectoryIterator::ReadRecursive and EntryFindFirst.
- Removed support for the PS2 and GameCube platforms.
- Removed directory size sanity checks from EAFileDirectory, as the files we are now using can be huge.
- Made it so FileStream on Unix and Appls OSs fails to open directory paths. Unix sometimes allows you to use fopen on a directory, though not consistently nor with standardized behavior.
- Cleaned up the PathString8/16/32 implementations.
- Fixed a build error for the case of non-bulk builds (i.e. building each .cpp individually).
- Fixed build errors on platforms where wchar_t is a type distinct from char16_t and char32_t in order to support stricter C++11 compilers.
Version 2.15.01 (May 7, 2012)
Changes
- Implemented Android Fix in FileChangeNotification ensure that the path comparaison is done between pointers.
- Implemented Marmalade fix where closedir() should have been called before returning NULL. Thanks to Martin Benoit who reported this issue.
- Fixed EAIOTime() for PSVita to return values in seconds as per the specification.
- Updated EAIO to be EA_WCHAR_NATIVE aware.
- Enabled Windows API emulation for non-Windows platforms.
- Moved EAStreamAdapter assertion enforcement code to EAStreamAdapter.cpp
- Made small change to FileStream::GetSize() function for Microsoft platforms
- Fixed an issue for older Windows versions.
Version 2.15.00 (March 6th, 2012)
Additions
- Added PSVita platform support (EA_PLATFORM_PSP2).
- Fixed dirEntryData memory leaks in EAFileDirectory under QNX (e.g. Playbook gaming platform).
Bug Fixes
- Fixed memory leaks in PSVita EAFileDirectory.
- Fixed temp paths on OS X.
- Changed temp directory for the playbook to now explicitly return "./tmp/" rather than "/tmp/". OS2.0 has removed privileges for users to write to the system root, and instead using "./" will refer to the application's root directory.
Version 2.14.01 (February 10, 2012)
Changes
- Fixed GetDriveFreeSpace under Unix. Previously it could return incorrect values. The solution was to use f_frsize instead of f_bsize.
- Changed GetDriveFreeSpace under Marmalade (Airplay) to not use EA_FAIL, as it's a case of "cannot be supported" as opposed to "not yet supported."
- Changed FileChangeNotification temp buffer initialization to be more efficient.
- Fixed a mistaken pragma warning pop location in EAIniFile.h. Reported by Alexandre Ouimet.
- Fixed a bug in PS3 EAFileDirectory which neglected to release a directory handle in some cases.
Version 2.14.00 (February 3, 2012)
Changes
- Added EntryFindData::mbReadFileStat, which allows users to avoid collecting file stat information while iterating.
- Fixed some warnings generated by VC++ /analyze.
- Changed file checking code from
(S_ISDIR == 0) to (S_ISREG != 0). Suggested by Arpit Baldeva.
Version 2.13.03 (December 21, 2011)
Changes
- Made directory iteration and file notification more efficient by coalescing the calls to get file modification time, creation time, and size into a single 'stat' call on Unix platforms.
- Added a File::Stat function, which acts like Unix stat but in a cross-platform way.
- File::GetTime now works better for Android 'appbundle' files.
- Fixed a bug in the (deprecated) EAFilePath.h/cpp's FullPath and ResolvePath functions for Unix-like file systems.
- IniFile: Added char path constructor.
- Made the (deprecated) EAFilePath module support DLL builds.
- Made it so EntryFindFirst accepts a NULL filter spec to mean the same as *.
- Fixed a potential memory leak on Android. Submitted by Martin Benoit.
- Fixed a compile error in EAFileStreamStdC.cpp. Most users wouldn't see this error because it doesn't affect any major EA platforms.
Version 2.13.02 (October 19, 2011)
Changes
- Fixed File::SetTime(char16_t*, ...) for iOS. char version didn't need any fixing.
- Fixed ComputeRelative function and added unit test and documentation for it.
- Added EAIO_APPLE_USE_UNIX_IO config define (defaults to 0), which if enabled (1) uses Unix file system calls instead of Apple framework calls.
- Added char32_t support. This includes support for wchar_t as 32 bit instead of 16 bit.
- Fixed a couple OSX bugs and the unit tests how succeed on OSX.
- Added support for the clang compiler, which is new for the iPhone iOS5 SDK. This amounted simply to avoiding a couple compiler warnings.
Version 2.13.01 (August 31, 2011)
Changes
- Fixed File::Exists and Directory::Exists for Android 8 bit paths. This was mistakenly broken in the 2.13.00 release.
- Fixed the XBox 360 definition of kMaxFileNameLength/kMaxDirectoryNameLength/kMaxExtensionLength to be 40.
- Fixed the Unix defintion of kMaxFileNameLength/kMaxDirectoryNameLength/kMaxExtensionLength to be 255.
Version 2.13.00 (August 21, 2011)
Additions
- Added Android support for the GetDriveFreeSpace. This works for both the regular file system and the appbundle file system.
- Added Directory::Move.
- Added StreamBuffer ctor that lets the user provide buffer memory. There was already a member function that did this. Also added ability to allow the user to switch between user-provided memory and dynamic memory with the same StreamBuffer object, whereas previously that wasn't explicitly supported.
Bug Fixes
- Fixed StreamChild::SetPosition infinite loop. Reported by Soleil Lapierre.
- Fixed a compile error for the Airplay platform (mobile middleware) due to undefined S_IRUSR, etc.
- Fixed Directory::IsDirectoryEmpty linker failure due to the Directory:: prefix being missing. Reported by Thomas Bruckschlegel.
- Fixed File::Exists for Unix-like platforms. Previously it returned true if you passed in the name of an existing directory.
- Fixed a DirectoryIterator bug under QNX/Playbook which would result in the first directory entry mistakenly being labeled a file.
Changes
- Implemented File::SetTime for PS3 and 360 platforms. It was previously not implemented for those platforms.
- The Java EAIO.Startup method now expects to be passed an Activity instance instead of an AssetManager. Users will need to modify their initialization code to pass the expected type. This change simplifies the requirements for initializing the library.
- Revised all L"" usage to EA_CHAR16("").
Version 2.12.01 (May 4, 2011)
Additions
- Added codestripper support
- Added Playbook support
Bug Fixes
- Revised MakeTempPathName to be more reliable. Previously it could fail if you called it many times quickly in succession. Reported by Andrew Willmott.
- Fixed a bug in the File::Copy function which would result in it mistakenly returning success when the source file didn't exist.
Changes
- Added support for Android appbundle data to the File::Copy, File::Move, and File::GetSize functions.
Version 2.12.00 (January 19, 2011)
Additions
- Implemented File::Exists for Android application bundles.
- Implemented mostly complete EntryFindFirst/Next/Last for Android appbundles (some things like filtering are not implemented). Due to limitations in the Android API, we can't tell directories from files and assume entries are directories based on whether the name has an extension or not.
- Added a SplitPath function based on pointers instead of PathString objects.
- Added support for Directory::Exists on Android.
Bug Fixes
- Fixed the Vsscanf methods in EAIniFile.cpp on xenon, by adding a call to '_set_printf_count_output'. This enables the use of %n format in scanf calls (which is neccessary for that method to work). This should only be a temporary fix; eventually, this library should be modified to use EAStdC in order to avoid platform irregularities when using the printf/scanf methods.
- Fixed a PathString bug. There is another that needs to be fixed yet. These are old bugs in uncommonly used functions.
Changes
- Added a default char8 temp directory for PS3 (previously, it would only give you a default only if you called the char16 version).
- Added a call to _set_printf_count_output( 1 ) on xenon in the surrogate vsscanf method in EAIniFile, as the xenon crt library by default disables use of the %n for counting on both printf and scanf commands (due to a supposed security risk, however it is improperly applied on this platform, since the security risk technically only exists for printf, and it is being used only for scanf).
- Made File::GetTime() return 0 on Wii. Getting a file's timestamp is not supported through the DVD API but, as this EAIO method is used when iterating over directories, it should not fail as was the previous behavior.
- Added documentation and unit tests to the PathString FindComponentFwd and FindComponentRvs functions.
Version 2.11.00 (November 5, 2010)
Additions
- Added new fields to the returned directory iterator information (file size, creation date, modification date).
Bug Fixes
- Fixed bugs related to working with directories that have (invalid) empty names. Reported by Sam Umbach.
- Fixed EAIniFile bug regardin reading 16 bit text files.
- Fixed bug in Win32 FileStream where 64 bit file reads on Win64 would be truncated to 32 bit results. Reported by Stephen Kiazyk.
Version 2.10.00 (July 20, 2010)
Additions
- Added support for reading from Android .apk packages.
Version 2.09.02 (May 31, 2010)
Release notes
- This version has been updated to be compatible with PS3 SN 330, CodeWarrior 1.3, and Android platform.
Additions
- Added 8 bit API support to EAIniFile.
Bug Fixes
- Fixed bug in File::CreateAlias. Submitted by Andrew Willmott.
- Fixed bug in Directory::SetAttributes for recursive usage. Submitted by Andrew Willmott.
- Fixed bug in File::Exists, File::Create, and Directory::Exists whereby an overly long file or directory name would be truncated to a valid length before using it. That's a bug because the overly long file name is not the same as the truncated version.
Changes
- Latest compiler compatibility.
Version 2.09.01 (April 5, 2010)
Additions
- Added Mobile support: iPhone, Palm Pre, and Android. More mobile platforms to follow.
- Added to PathString: GetDirectoryString, GetFileNameString, GetFileExtensionString. Suggested by Terrence Guo.
- Added compat/EAFilePath.h/cpp, which provides optional backwards compatibility with the older UTFFoundation
Bug Fixes
- Replaced some usage of double_t with double.
- Fixed bug in StrlcpyUTF8ToUTF16 which could cause it to mistakenly fail if the user passed the source strlen instead of -1. Reported by Arpit Baldeva.
- A couple PathString functions didn't use kEndAuto8/kEndAuto16 when the user explicitly passed it. All PathString functions do so now.
- Fixed PathStringNormalize so that leading relative path specifiers aren't stripped. Implemented by Tom Bui.
- Fixed PathString Append so that it doesn't put a path separator at the front of empty destination paths.
- Fixed EA::IO::Directory::Copy to not return false when the copied directory is empty. Reported by Tom Bui.
- Removed some GCC 4.4 Linux warnings related to strict aliasing.
Changes
- Added PS3 SN compiler v320 and later compatibility. The new compiler was generating some new warnings.
- Added IStream() call to FileStream ctor to remove a warning that can occur with GCC.
- Modified EA_XBDM_ENABLED slightly. Now it keys off of being equal to 0 or 1 instead of being undefined or defined. A result of this is that you may need to globally define EA_XBDM_ENABLED to 1 in a release build if you want it to work there. For Framework2/Nant users, the EAIO.build file supports using EA_XBDM_ENABLED=[0|1] in the masterconfig.xml file. Suggested by Kevin Perry.
- Brought in the UTFFoundation EAFilePath.h/cpp files into EAIO in a "compat" directory. These are for backwards compatibility with older uses of UTFFoundation. You can enable the compiling of EAFilePath.cpp in EAIO.build via the EAIO.EAIO_FILEPATH_ENABLED nant build property.
Version 2.09.00 (September 9, 2009)
Additions
- Added bool IsDirectoryEmpty(const char_t* pDirectory, int nDirectoryEntryFlags = kDirectoryEntryFile, bool bRecursive = true).
- Added the StreamAdapter class, which is an ease of use wrapper around portable endian-savvy read/write functionality. For example, you could read base data types from a file by creating a StreamAdapter, specifying the endian-ness they were stored with, then just call adapter.ReadUint32(), adapter.ReadFloat(), etc.
- Added IsFileNameValid, IsFilePathValid, IsFileNameCharValid, IsDirectoryNameValid.
- Added EAIO_DEFAULT_ALLOCATOR_IMPL_ENABLED option, which causes DLL builds to not define ICoreAllocator::GetDefaultAllocator.
Bug Fixes
- Fixed bug in char version of Directory::Rename.
- Fixed PathString::TruncateComponent function to take a string by reference instead of value. Reported by Cyril Saint Girons.
- Fixed bug in Wii McsFileSystem ctor whereby mbInitialized was not initialized. Reported by Dave Cope.
- Fixed some Linux64 / GCC 4.3 compiler warnings / errors. Implemented some to-do items for Linux in general. All unit tests now pass on Linux32 and Linux64.
Changes
- Added .build file options to control config parameters without modifying code or environment variables.
- Added support for GCC strict aliasing.
- Added option for disabling thread safety and use of EAThread.
- UpRevised StreamBuffer::Realloc to not call the user's allocator if the alloc size is zero. This makes it easier for users whose allocators don't want to accept an allocation size of zero, though the C Standard malloc and realloc require that it be supported.
- Implemented EA::IO::GetDriveFreeSpace for PS3.
- Worked around Wii removal of dvdeth.h from SDK.
Version 2.08.03 (February 25, 2009)
Additions
- Added EAIniFile, which was moved from the (deprecated) UTFFoundation package. Currently it is controlled by EAIO_INIFILE_ENABLED until UTFFoundation completely goes away.
Bug Fixes
- Fixed bug in Wii hfinit (HIO2 support). Reported by Bob Flanagan.
- Fixed bug in InitializeFileSystem whereby it wouldn't specify a return value. Reported by Bob Flanagan.
- Worked around a bug in the XBox 360 XDK which caused MakeTempPathName to fail when XFileEnableTransparentDecompression was used by the application. The bug has been reported to Microsoft.
- Added " = kPositionTypeBegin" to GetPosition and SetPosition in EAStreamBuffer and EAStreamNull to match other stream class default arguments.
Changes
- Made it so DirectoryIterator::ReadRecursive supports a base directory that is relative.
- Changed DirectoryIterator::EntryString from eastl::string16 to EAIO PathString. This is so it can use the EAIO allocator as opposed to the EASTL global allocator. This changed behaviour is controllable via the EAIO_DIRECTORY_ITERATOR_USE_PATHSTRING define.
- StreamBuffer Free calls now specify a non-zero value for the ICoreAllocator::Free size argument. This may help a little with memory tracking for some users.
Version 2.08.02 (June 6, 2008)
Additions
- FnMatch() now supports Windows file path conventions but adds flags (kFNMUnixPath, kFNMDosPath) to override the file path type.
Bug Fixes
- Fixed bug in CreateDirectory whereby it would return false if the directory previously existed, whereas it meant to return true.
- Removed a little (harmless) junk code that got into EAFileNotification.cpp.
- Fixed bug in FileChangeNotification on console platforms whereby the polling would become disabled if the root directory ever became completely empty
- Fixed bug in Wii FileStreamWiiNand whereby Read and Write would mistakenly fail. Reported by Antonio Maiorano.
Changes
- Revised Directory::Exists on PS3 to work with access-limited directories.
Version 2.08.01 (May 19, 2008)
Additions
- Added SetAllocator to MemoryStream. Previously there wasn't a manual way to default-initialize or explicitly set a MemoryStream with a custom allocator. Suggested by Wayne Huang and Tom Van Dijck.
Bug Fixes
- Fixed missing implementation of the PathString::Append function.
- Fixed FileNotification bug that was introduced in 2.06.00 whereby an incorrect change path would be reported. Submitted by Avery Lee.
- Fixed bogus assert in EAStreamMemory related to setting the stream position beyond the stream end on a resizable stream. Reported by Tom Van Dijck.
Changes
Version 2.08.00 (March 24, 2008)
Release Notes
- This release primarily targets Wii functionality. In particular, new Wii file stream functionality has been added. This includes a nearly full implementation of the C FILE API to the host PC as well as the EAIO FileStream API to the host PC. Note that in order to use the Hio2 functionality you need to run the MCS server that Nintendo provides in the C:\NintendoWare\Revolution\McsServer directory of NintendoWare. You can get NintendoWare at https://www.warioworld.com/wii/downloads/default.asp#nintendoware.
Additions
- Added Wii FileStreamNand, which implements file IO to the Nand (flash) file system. See Wii/EAFileStreamWiiNand.h/cpp
- Added Wii FileStreamHio2, which implements file IO with the host PC over the Wii USB cable. See Wii/EAFileStreamWiiHio2.h/cpp
- Added an implementation of the C FILE API (e.g. fopen, fread, fwrite) with the host PC over the Wii USB cable (Hio2). In order to not collide with the C standard library, these are implemented as hfopen, hfread, etc. in the EA::IO namespace. See Wii/MCSFile.h/cpp
Bug Fixes
- Fixed Wii EntryFindFirst/EntryFindNext bug which would cause failure or a crash.
- Fixed Wii unit test crashes that were introduced in a previous release. The Wii unit tests now complete successfully.
Changes
Version 2.07.03 (March 12, 2008)
Additions
- Added GameDataPS3.h/cpp, which allows for easy use the PS3 GameData file system.
Bug Fixes
- Fixed XBox 360/Windows FileStream::GetPosition, SetPosition, GetSize, SetSize for the case whereby EAIO_64_BIT_SIZE_ENABLED is enabled and file sizes greater than 4GB were involved. Reported by Kevin O'Brien.
- Fixed StreamBuffer compile error for case of EAIO_64_BIT_SIZE_ENABLED that was introduced in v2.07.00.
- Fixed bug in Wii FileStream::SetPosition. Reported by Antonio Maiorano.
Changes
- GetAllocator/SetAllocator moved to Allocator.h/cpp.
- FileStream::SetSize now guarantees that the previous file position is preserved. Previously it was modified on some platforms.
- GetState now consistently returns kStateNotOpen when the file is not open.
- EAStreamAdapter WriteString now takes size_t instead of EA::IO::size_type. This is for consistency with the rest of EAIO and allows 64 bit file IO to work as expected.
- Added additional unit testing of FileStream.
- The IOResultCode system has been revised to have values that map directly to platform-specific error codes instead of trying to maintain an independent mapped set of values. User code shouldn't be aversely affected, but things are now better because the error code values are unified.
Version 2.07.02 (February 28, 2008)
Release Notes
- Users will need to call EA::IO::SetAllocator on startup in many cases, as EAIO is migrating away from using EA::Allocator::ICoreAllocator::GetDefaultAllocator on startup. If you get a NULL pCoreAllocator crash, this is probably the reason.
Additions
- Added FileStream::SetWindowSize to the Wii version of FileStream in order to allow efficient use of the Wii file reading APIs on large files, but also allow it to be small and efficient for small files. Suggested by Vincent Chu.
- Added PS2 compatibility. Provided by Philip Dunstan.
- Filled out a few more 8 bit functions that previously had only 16 bit support.
- Added EAIO_VERSION / EAIO_VERSION_N to the definition set. This allows for determining the version at compile time.
- Added EAIO_DEFAULT_ALLOCATOR_ENABLED option in order to disable use of ICoreAllocator::GetDefaultAllocator. Prompted by Tom Van Dijck.
Bug Fixes
- Fixed bug in UTF8 to UTF16 Strlcpy whereby a bogus failure detection was occurring if the last char in the string was a 2+ byte UTF8 sequence. This bug was also present in the EAStdC package and is fixed in EAStdC 1.03.03.
- Fixed a memory overwrite bug in the char versions of GetCurrentWorkingDirectory and ResolveAlias. Reported by Soleil Lapierre.
- Fixed bug in File::PatternExists() on PS3 whereby it would mistakenly return false.
- Fixed bug in File::Move() on PS3 whereby it wouldn't do the move.
- Fixed warning on Wii in EAStreamBuffer.h. Reported by Jaap Suter.
Changes
- Added printf("\32") to end of unit test under PS3 and PS2. This indicates to the SN tools that the app is done.
- Updated file error handling code on PS3 to deal with SDK versions >= 210. According to Sony, applications don't need to spin on file errors; Sony will do that itself internally. So file EAFileStream Open and Read opertions now return right away with an error by default. The previous user-installable error handling mechanism is still in place however.
- FileChangeNotification now calls IO::GetAllocator in its Start function if it's allocator is NULL.
Version 2.07.01 (December 5, 2007)
Additions
Bug Fixes
Changes
- MemoryStream now has an (inline) GetSharedPointer accessor function.
- Removed most usage of temporary PathStrings from EAFileUtil and replaced with char buffers. This was done because very long paths can cause a path string memory allocation.
- Made it so EAIO doesn't normally attempt to query for the default allocator before main() (i.e. in static startup code).
- The PS3 sets the default temp directory to be off the home directory instead of the root directory.
Version 2.07.00 (November 30, 2007)
Release Notes
- Note that Wii SDK 2.4-patch6-070518 removes the dvdeth library. Thus
Nintendo has removed support for DVDOpen, DVDClose, etc. The Wii debugger
provides an implementation of fopen, fclose, etc. which can be used place of
dvdeth, but only works when a debugger is active and cannot work with a
standalone debug build app. We are lobbying for Nintendo to retain support
of dvdeth, but if that fails then this will likely be the last revision of
EAIO which uses dvdeth on Wii for FileStream functionality.
Additions
- Added support for the SN PS3 compiler.
- EAStreamBuffer now lets the user specify buffers manually (char*/size) and via an ICoreAllocator and defaults to the ICoreAllocator::GetDefaultAllocator().
- Added GetAllocator/SetAllocator to EAIO in order to provide default
EAIO-wide allocator. EAIO doesn't normally allocate memory except in the
case of long path strings that go beyond the fixed_string default length of
PathString. Suggested by Rashin Arab.
- Added a Directory version of GetTime/SetTime to complement the File version. The Directory version simply uses the File version for all current platforms.
- Added additional Unix support to EAFileUtil. Most of the primary functions are now supported.
Bug Fixes
- Fixed PathString Compare(PathString16::const_iterator a, PathString16::const_iterator a_end, PathString16::const_iterator b, PathString16::const_iterator b_end) to allow a_end and b_end to be NULL (kEndAuto16). This is considered a bug fix because a rational user would expect such to be allowed if it is allowed for other functions.
- Fixed bug in Wii FileStream::Open whereby mnLastError was not being set
for all case of error. Reported by Albert Ho.
- Fixed bug in Wii EntryFindFirst. Submitted by Albert Ho.
Changes
- Implemented the GetPosition and Write functions for StreamChild. Previously these were unsupported functionality, and now they are.
- Enhanced the unit tests for StreamChild, StreamFixedMemory, and StreamBuffer.
- The StreamBuffer mpAllocator->Alloc() has been switched to use the unaligned allocation version.
Version 2.06.00 (September 5, 2007)
Additions
- Added endian awareness to EAStreamAdapter::ReadString, WriteString. Submitted by Alec Miller.
- Added support for 64 bit file IO via the EAIO_64_BIT_SIZE_ENABLED configuration parameter.
- Added DLL export functionality to EAStreamAdapter. Submitted by Max Burke. After this was integrated, additional components of EAIO were made DLL-capable. At this point, virtually all the public EAIO functionality is accessible in a DLL build.
- Added ability for the user to override/control debug memory allocation names. See EAIO/internal/Config.h.
Bug Fixes
- Fixed potential crash in Xenon and PS3 version of FileNotification::PollInternal whereby the addition of a file might invalidate an iterator. Bug found and fix suggested by Henry Goffin.
- Fixed bug in Win32 version of FileStream whereby mpPath16 could be unintialized.
Changes
- Made PathString more const-friendly.
- Removed UTFFoundation as a dependency of the EAIO unit tests. The EAIO runtime was never dependent on it.
Version 2.05.02 (June 1, 2007)
Additions
Bug Fixes
- Fixed the Wii code/build to be based on the work of Tom Van Dijck.
Changes
Version 2.05.01 (May 16, 2007)
Additions
Bug Fixes
- Fixed compiler errors that could result if building with bulk-build functionality disabled.
- Fixed some Win64 compiler warnings.
Changes
- Revised .build file to enable -Wp64 under VC++/Win32.
Version 2.05.00 (May 4, 2007)
Release Notes
- This release completes the migration of IO functionality from UTFFoundation to EAIO. This change will allow for the simplification of package dependencies by making it so packages can remove dependencies on UTFFoundation, MemoryMan, and/or EACOM. This version of EAIO should be compatible with any version of UTFFoundation, though use UTFFoundation 2.11.00 or later will require this version or later of EAIO.
Additions
- EAIO now supports building as a DLL.
- FileStreamWii.cpp added. The existing FileSystemGameCube.cpp still works on Wii though.
Bug Fixes
- EAStream.cpp error handling fixed to act more like a user would expect.
- Fixed bug whereby EA_FILE_SYSTEM_CASE_SENSITIVE was misdefined for some platforms.
- Unit test failures fixed on PS3.
- Opening a FileStream with kCDCreateNew (create only if new) flag now works correctly on PS3 and Linux.
- Avoid leaking memory in EAStreamMemory::SetData() if the shared pointer can't be allocated and allow the use of a NULL pData value to indicate that the stream's memory buffer should be allocated at construction. Submitted by Jon Parise.
- Fixed incorrect #elif declaration which resulted in third party preprocessors choking.
Changes
- StreamFixedMemory: Removing an EA_FAIL_MESSAGE from a valid failure case. This allows the caller to test for the failure and determine its severity without the attempt resulting in an assertion failure. Submitted by Jon Parise.
- MemoryStream::Close now returns a meaningful value.
- EAIO now supports building on Linux and Cygwin (Unix emulation under Windows).
Version 2.04.00 (Mar 19, 2007)
Additions
- Added EAStreamCpp, which is an IStream interface that wraps C++ iostreams.
- Added Framework2 support for the CodeWarrior/Wii compiler/platform.
- Added the char16_t version of FnMatch.
- Added unit tests for FnMatch, EAStreamCpp, and EAFileBase.
Bug Fixes
Changes
- Updated the masterconfig.xml and EAIO.build files to be up to date with dependent packages.
Version 2.03.01 (Feb 8, 2007)
Additions
- Added a couple definitions that Foundation/FileUtils wants.
Bug Fixes
Changes
Version 2.03.00 (Feb 7, 2007)
Additions
- Moved EAStream.h from Foundation/EAStream.h while allowing backward compatibility.
Bug Fixes
Changes
- Modified EAFileBase.h to allow it to mix with Foundation/EAFileBase.h
Version 2.02.00 (Nov 30, 2006)
Additions
- Added PathString8 and associated utility functions, a char version of PathString16.
- Added VS2005 support and associated fixes for new warnings invented by this compiler.
Bug Fixes
Changes
Version 2.01.00 (Oct. 23, 2006)
Release Notes
- This version represents the first formally published version of this package.
- EAIO is currently a very small package, but it is intended to subsume all the stream functionality from the UTFFoundation package. This would include all files in UTFFoundation that begin with EAStream* and EAFile*.
Additions
- Added Framework 2 / EAConfig / NAnt build files to this package.
- Added ability to switch between the lightweight EAAssert package and the heavier EATrace package.
- Added this Changes.html document.
Bug Fixes
Changes
Earlier versions
Version 2.01.00 (above) is the first version of this package which contained this document. A list of previous changes is not available and is not likely worthwhile, as 2.01.00 is the version published as a formal package.
End of document