EAStdC Changes
Version 1.26.07
Changes:
- EAStdC: fixing winsock.h include for timeval struct used in tests
- Gemini to Xbsx
- Fixing codegen bug on pc64-vc-dev-opt which was mixing up the register parameters to a string function which caused test code to strcpy a string onto stack memory. In an effort to change the code pattern I added a memclear in hopes it would bypass the compiler bug being triggered here. This appears to have worked at the time of writing of this.
Version 1.26.07
Changes:
- Updated to support PS5 0.9 SDK.
- Updated test module to compile with bulkbuild files.
Version 1.26.06 (Oct 10, 2019)
Changes
- Added GetTimeMilliseconds as a convenient helper for GetTime() / 1000000.
- Added docs, scripts and build files to VS project.
Version 1.26.05 (Oct 01, 2019)
Changes
- NX unit test memory fixes.
Version 1.26.04 (Sep 20, 2019)
Changes
- Fixing user reported regression for bit-shifting our EAFixedPoint type.
- Merging lots of repeated code in the Sprintf implementation.
- char8_t C++20 fixes.
Version 1.26.03 (Jul 10, 2019)
Changes
- Backwards compatible changes preparing for char8_t keyword promotion for UTF-8 strings.
Version 1.26.02 (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.
- Removing EAArrayCount implementation as its available via EABase.
- Forwarding implementation of EAOffsetOf to EABase implementation.
Version 1.26.01 (March 13, 2019)
Changes
- Updated code to use EA_PLATFORM_SONY where possible.
Version 1.26.00 (Sep 07, 2018)
Changes
- Adding UTF8ReplaceInvalidChar which allows users to replace invalidate UTF8 characters with a specific character.
Version 1.25.01 (Feb 20, 2019)
Changes
- Converting PS4/Kettle platform macros to use the new Sony platform macro.
Version 1.25.00 (Sep 07, 2018)
Changes
- Renaming 'PoissonTransform' to 'RandomInt32Poisson' to align with the existing EAStdC API.
Version 1.24.00 (August 14th, 2018)
Changes
- Add Code Coverage to EAStdC Package.
Version 1.23.00 (April 30th, 2018)
Changes
- Added a new overload to Strlcpy that returns the number of consumed source code units and the number of writen code points. This allows applications to process large input in batches.
- Modified the string format in the printf family of routines to handle input strings larger than EASPRINTF_FIELD_MAX setting.
- Fixed an issue where random number generators could return a value outside the valid range. Made it additionally robust due to reducing the range to ensure double to float conversion doesn't generate a value outside the valid range.
Version 1.22.00 (January 12th, 2018)
Changes
- Retroactively incrementing the minor version number as the hash generated in CRC24 will now fill the upper 8 bits with zeros, whereas implementations prior to 1.21.01 would fill the upper bits with ones.
Version 1.21.05 (Oct 17, 2017)
Changes
- Removed Xenon and PS3 code paths.
- Moving GetNanoseconds and GetMilliseconds implementations into EADateTime.cpp to ensure warning suppressions are applied.
- Extended the Stopwatch POSIX implementation code path to take into account customized error codes on the NX platform.
- Fixed issue with not getting proper time zone name on the NX platform.
Version 1.21.04 (September 15th, 2017)
Changes
- Fixing bugs in Scanf and Printf with the support of 'j' (maxint), 't' (ptrdiff), and 'z' (size) modifiers on integer and count fields.
- Removed custom atomics and mutex implementation and forwarded the EAStdC API to use the EAThread API.
- Added GetMilliseconds & SetMilliseconds to EA::StdC::DateTime.
- Disabled EASTDC_MEMCHR16_ENABLED by default so we can remove the deprecated function in a future release.
Version 1.21.03 (August 10th, 2017)
Changes
- Resolving macro re-definition error reported by a user trying to enable the valgrind aware strlen functions.
- Resolving Clang UBSan (undefined behavior sanitizer) warnings related to signed integer overflow, shifts by negative numbers, and integral promotion.
- EAStopwatch::GetStopwatchCycle on PS4 update to call sceKernelGetProcessTimeCounter instead of using rdtsc.
Version 1.21.02 (December 7th, 2016)
Changes
- Stopwatch::GetCPUCycle() PS4 implementation changed to use 'sceKernelGetProcessTimeCounter' to account for PLM events. Note 'sceKernelGetProcessTimeCounter' incurs addition overhead that our measurements calculate at ~6 cycles.
Version 1.21.01 (October 21st, 2016)
Changes
- Made the OSGlobal implementation on Kettle, search for a free memory location starting from the top of virtual memory, since it is faster to do.
- Updated Build and Initialize scripts to remove warnings generated by Framework 3.
Version 1.21.00 (August 10th, 2016)
Changes
- Removed EATrace support as it was not being tested and the mechanism to switch between the two has rotted.
- Implemented EA::StdC::Memfill8 which reroutes to EA::StdC::MemSet8 for convienience.
- EA::StdC::Strlen calls __builtin_strlen when the Clang builtin is available.
- Added config macro to disable EAStdC GlobalPtr via EASTDC_GLOBALPTR_SUPPORT_ENABLED.
- Added support for EASTDC_STATIC_ANALYSIS_ENABLED to determine if static analysis should flag certain code paths or not.
This is important because specific string optimizations are disabled which are correctly flagged as errors but in practice do not cause any harm.
- Removed the internal definitions of IsNaN and IsInf, which are duplicates of IsNAN and IsInfinite, and switched to use the latter in Sprintf code. This was initiated because std::isnan doesn't seem to work on Android.
Version 1.20.05 (May 19, 2016)
Changes
- Resolving ps4 sdk 3.5 warning.
Version 1.20.04 (Apr 08, 2016)
Changes
- Resolved an issue with 'long double' causing an incorrect output in Sprintf.
- Performace improvements for endian swapping by use of bswap instruction. (integration request)
Version 1.20.03 (January 22, 2016)
Changes
- Resolved an issue in RandomLinearCongruential::RandomDoubleUniform(). This method would sometimes reseed the PRNG with a non-deterministic value derived from the CPU clock. The method has been updated to no longer update the seed in a non-determinstic way. (Note: the issue could lead to network desyncs.)
- Minor fix for asymmetric warning push without a pop in a cpp.
Version 1.20.02 (October 23, 2015)
Changes
- Fix to the location and search space of the Global memory initialization technique used by kettle. Call to InitOSGlobalSystem.
- Reduce the 300ms EAStopwatch startup setup time to 5ms as it is contributing to a slow startup for all applications. This of course decreases the accuracy of value which is experimentally computed however this change is only implemented on platforms that consider __rdtsc to be inaccurate.
Version 1.20.01 (September 23, 2015)
Changes
- Converted initialize.xml to structured-XML which fixes warnings generated by Framework.
EAStdC Changes
Version 1.20.00 (July 13, 2015)
Bug Fixes
- Fixed a bug in seting nanoseconds field in DateTime::Set() method.
Changes
- CallbackManager: add ThreadParameters argument to Init() so that the thread may be started with non-default arguments (such as priority).
Version 1.19.04 (Apr 23, 2015)
Changes
- Resolved issue when switching to AndroidSDK-21-2 with Sprintf generating incorrect results for Infinite/Nan float values.
Version 1.19.03 (March 12th, 2015)
Changes
- Required changes for VS2015 support.
Version 1.19.02 (February 9th, 2014)
Changes
- We now use builtin offsetof() in combination with -Wno-invalid-offsetof to suppress warnings when offsetof is applied to non-POD types instead of custom implementstion.
offsetof() returns costexpr and can be used in static_assert
- Reverted a change to EAAlloca that was causing issues for users. Users should still consider using EAMalloca/EAFreea
as an alternative to EAAlloca.
Version 1.19.01 (Oct 13th, 2014)
Bug Fixes
- Fixed a warning that surfaced in the unit tests after a recent change to EASTL.
Changes
- Added support for compiling with VS2015.
Version 1.19.00 (Sept 5th, 2014)
Changes
- Added a public version.h header.
- Users may now call SetCurrentProcessPath to manually set a path on PS4 if they want to use GetCurrentProcessPath/GetCurrentProcessDirectory on test kits.
- SetCurrentProcessPath now takes a const char8_t* instead of a non-const pointer. This change makes it possible to pass string literals without generating warnings.
- Resolved compilation warnings on PS3SDK 460.001.
Version 1.18.00 (June 12th, 2014)
Changes
- Revised RandomUint32Uniform(limit) to provide unbiased output, at the cost of being about 3x slower for non-power-of-2 values. The RandomLimitFastBiased function provides the previous behavior of being fast but with some bias (tiny bias for small limits, higher bias for large limits).
- Implemented a faster version of Itoa32/Utoa32/Itoa64/UtoA64 for base 10 conversions. The new version averages 3x faster than before.
- Implemented a faster Strcmp implementation that works by reading machine word-sized values instead of bytes. On 64 bit platforms this results in a five-fold improvement in speed.
- Added ZeroPresent8 and ZeroPresent16 to EABitTricks, which provide a fast means to identify if the supplied word has any zero byte. These were added primarily to support the fast portable Strcmp implementation.
/// ZeroPresent8
/// Returns true if a 0 byte is present in x.
/// ZeroPresent8(0xffffffff) -> false
/// ZeroPresent8(0x00000000) -> true
/// ZeroPresent16
/// Returns true if an aligned uint16_t of 0 is present in x.
/// ZeroPresent16(0xffffffff) -> false
/// ZeroPresent16(0xff0000ff) -> false (There are 16 contiguous 0 bits, but they are not uint16_t aligned)
/// ZeroPresent16(0x0000ffff) -> true
- Added timing-safe variations of some functions, as commonly needed for security purposes:
/// Similar to Memcmp but returns simply true or false. Performs slightly faster
/// than TimingSafeMemcmp. Executes slower than regular Memcmp due to being timing-safe.
/// Executes in a constant time for any given n value. The primary use case for this is
/// for security in the presence of possible timing attacks.
EASTDC_API bool TimingSafeMemEqual(const void* p1, const void* p2, size_t n);
/// Behaves the same as Memcmp, but executes slower than regular Memcmp due to being timing-safe.
/// Executes in a constant time for any given n value. The primary use case for this is
/// for security in the presence of possible timing attacks.
EASTDC_API int TimingSafeMemcmp(const void* p1, const void* p2, size_t n);
/// Returns true if the given n bytes of memory are all zero in value, as would be the case
/// if the memory was cleared with Memclear.
/// Executes in a constant time for any given n value and regardless of whether the return
/// value is true or valse. The primary use case for this is for security in the presence of
/// possible timing attacks.
EASTDC_API bool TimingSafeMemIsClear(const void* p, size_t n);
- Added EAOffsetOfBase to EABitTricks
/// Returns the offset of the class Base within the subclass Class.
/// Fails to compile for cases where Base is multiply inherited by Class.
/// Example usage:
/// struct A{ int a; };
/// struct B{ int b; };
/// struct C : public A, public B{ int c; };
/// EAOffsetOfBase<C, B>() => 4
///
/// EAOffsetOfBase is not guaranteed to be a compile-time constant expression,
/// due to the use of reinterpret_cast of a pointer.
template <typename Class, typename Base>
size_t EAOffsetOfBase();
- Fixed a compilation error on PS3 that could occur if limits.h wasn't included prior to including EABitTricks.h.
Version 1.17.00 (May, 2014)
Changes
- Fixed a compile error for platforms where wchar_t is 16 bit but unique from char16_t.
- Added char_t* Strnchr(const char_t* pString, char_t c, size_t n), which is the same as strchr except it checks no more than n chars from the string.
- Avoided internally allocating memory using global new when printing to the log on Android.
- Fixed a bug in EcvtBuf and FcvtBuf whereby they used the wrong buffer size constant. Switched them to using the right constant from EAString.h. The result was that EcvtBuf, FcvtBuf, and the printf family of functions could crash with large floating point values (e.g. DBL_MAX).
Version 1.16.00 (April 15th, 2014)
Changes
- Added the Dprintf family of functions, which print to debug output for the given platform.
- Added Dprintf and Vdprintf, with currently only char8_t implementations (and no wchar_t implementations, for example).
- Made it so that Vprintf, Vfprintf(stdout/stderr), Printf, and Fprintf(stdout/stderr) redirect to Dprintf on platforms which no-op these otherwise.
- Updated the printf-related WriteFunction documentation to clarify behavior.
- Added Memchr16, Memchr32, and MemchrW.
- Fixed a bug in StrtoU32(const char32_t* pValue, char32_t** ppEnd, int nBase) and related functions for the case of char32_t and an nBase of 16.
- Implemented EA_CACHE_PREFETCH_128 for all x64 platforms.
Version 1.15.01 (March 10, 2014)
Changes
- Made the following two functions 0-terminate even in the case of returning -1 (error).
int Strlcpy(char32_t* pDest, const char8_t* pSource, size_t nDestCapacity, size_t nSourceLength);
int Strlcpy(char32_t* pDest, const char8_t* pSource, size_t nDestCapacity, size_t nSourceLength);
- Made the VC++ version of TruncateToInt32 on x86 use a C cast for recent compiler versions, as that results in faster code.
- Removed Registry keyword
- Fixed linking of debug sony kettle libs.
-
Worked around a Coverity warning in scanf about a negatively indexed pointer, though that pointer was actually never dereferenced when negatively indexed.
-
Made the Oprintf (ordered printf) family of functions safely handle input overflows of various types.
- Implemented EAMalloca in a way that's portable to all relevant platforms. Previously it was VC++-specific due to being mapped to the VC++ malloca function.
Version 1.15.00 (February 14, 2014)
Changes
- Fixed GetCurrentProcessPath on Apple Platforms so that when executable is in a bundle it will return the path to the bundle. Changes also fix similiar issue in GetCurrentProcessDirectory.
- Added wchar_t versions of functions in EATextUtil.h.
- Added Strend and Striend:
- bool Strend(const char_t* pString, const char_t* pSuffix, size_t stringLength = kSizeTypeUnset)
- bool Striend(const char_t* pString, const char_t* pSuffix, size_t stringLength = kSizeTypeUnset)
- Improved the flexibility of Strlcpy.
- Fixed a problem with EAGlobal.cpp causing crashes on PS4 which were probably due to initialization order of that module.
Version 1.14.00 (December 5th, 2013)
Changes
- Added Capilano and Kettle support.
- Improved the definition of CountBits. Reported by Jeff Duncan
Bug Fixes
Version 1.13.00 (November 15, 2013)
Release notes:
- Added clang-specific support for EAAlignOf. This fixes a couple cases of EAAlignOf not working with some types.
- A change to the behavior for EASTDC_USE_STANDARD_NEW was made which has the effect of making so that by default EAStdC users need to link with void* operator new[] (size_t size, const char* name, int flags, unsigned debugFlags, const char* file, int line). This is the same operator new that EASTL uses, and so we don't expect many users to notice any change. However, if you get a linker error regarding a missing operator new then it's because your app needs to supply this version. Example minimal implementation of this operator new:
void* operator new[](size_t size, const char* /*name*/, int /*flags*/, unsigned /*debugFlags*/, const char* /*file*/, int /*line*/)
{
return ::operator new[](size);
}
Changes:
- Added a 64 bit version of ReverseBits. It's not optimal but is rather a working placeholder for a future optimized version.
- Made it so EASTDC_USE_STANDARD_NEW isn't unilaterally defined to 1 in the build file. Reported by Patrick Laflamme.
- Fixed int128_t::GetPartUint8 for 64 bit platforms. Reported by
Jason Beardsley.
- Added the ability for StrToInt128 to read numbers specified in binary (e.g. 0b00100110101).
- Fixed a bug in StrToInt128 with respect to auto-detecting base 16 where it would fail to detect 0x... sequences as base 16.
- Made int128_t::StrToInt128 be a static function instead of a const member function.
- Added Strstrip, in EAString.h:
/// Removes leading and trailing space, defined by the Isspace function.
/// The trailing space is removed by potentially modifying the end position
/// of the string via writing '\0'. The leading space isn't removed, but rather
/// the first non-whitespace char in pString is returned. Thus beware that
/// this function may return a pointer >= pString, and you cannot free that
/// that pointer instead of pString.
/// This is similar to the sometimes seen strstrip C function.
- Added Strstart and Stristrart, in EAString.h:
/// Strstart
/// Returns true if pString begins with pPrefix.
/// Stristart
/// Returns true if pString begins with pPrefix, compared case-insensitively.
/// Supports ASCII case comparisons only.
- Added the ConvertEpochSeconds, in EADateTime.h
/// ConvertEpochSeconds
/// Converts seconds in an epoch to seconds in another epoch. You don't need to convert
/// the nanoseconds portion of a DateTime (e.g. dateTime.GetNanoseconds()), as that value
/// is a fractional second which is unchanged regardless of epoch. Recall that an epoch is
/// a starting timepoint, such as how the Unix Epoch (time_t == 0) starts at Jan 1, 1970.
/// This function extends and generalizes the functionality in DateTimeSecondsToTimeTSeconds and
/// TimeTSecondsSecondsToDateTime.
/// Returns seconds in the destination Epoch. Returns 0 if srcEpoch or destEpoch are invalid.
/// Example usage:
/// // Convert myDateTime to Unix time.
/// int64_t unixSeconds = ConvertEpochSeconds(kEpochDateTime, myDateTime.GetSeconds(), kEpoch1970);
Version 1.12.00 (July 22, 2013)
Changes:
- Added the Memmem function, in <EAStdC/EAMemory.h>. This is equivalent to the memmem function found in GCC's glibc on Unix systems.
- Implemented an improved workaround for Scanf handling of -0.0 under VC++ with /fp:fast specified on the compiler command line.
- Fixed a bug in UTF8CharSize for the case that the leading char is 0xc2. This matches a similar fix for the UTF8Increment function in v1.04.03. Reported by Arnie Misfeldt.
- Removed support in EAStopatch for the IA-64 (Itanium) platform.
Version 1.11.01 (May 6th, 2013)
Changes:
- Removed redundant 'if' statement from UTF8CharSize(). Reported by Luc Isaak.
- Made EAGlobal.cpp compatible with Windows phone TRCs. There was a function usage that Microsoft doesn't allow.
- Fixed Valgrind complaint
- Minor updates to EABitTricks.h and EAString.h documentation
Version 1.11.00 (April 3rd, 2013)
Changes
-
Extended all BitTricks functionality to 64 bit where 64 bit wasn't previously supported.
-
Added UTF8TrimPartialChar() to EATextUtil, where the other UTF8 functions are.
- Added support for additional Microsoft platforms to EAProcess.h/cpp.
- Fixed a mistaken assertion failure in Strlcat for the case that the destination buffer capacity was specified as zero.
Version 1.10.02 (March 4th, 2013)
Changes
- Updated GetCurrentProcessDirectory for PS3 to return app_home if the GameData API fails to tell where the home directory is. This in some sense reverts the behaviour to be like previous EAStdC versions (which used to unilaterally return app_home) for the case of the GameData API failing.
Version 1.10.01 (February 4th, 2013)
Changes
Bug Fixes
- WiiU Fixes
- Windows Phone 8 restart invalid semaphone fix
- Added template<> StaticMemory, which allows for generically declaring static memory.
- Made GetProcessDirectory and GetProcessPath work on PS3.
- Fixed some issues related to getting the current process's path/directory
- Fixed PS3 library stub linker bug
- Improved GetCurrentProcessPath for OS X and made it work for iOS.
- Fixing VC++ compiler warnings
- Made GetCurrentProcessPath work on new Microsoft platforms.
Version 1.10.00 (December 10th, 2012)
Changes
- Added a pathCapacity argument to GetCurrentProcessPath and GetCurrentProcessDirectory. This allows for safer use of these functions in the case of arbitrary path buffer sizes.
- Added support for defining EASTDC_VSNPRINTF8_ENABLED globally as a nant build property. Requested by Arpit Baldeva for EAWebKit.
- Added memcpy16 usage to EAMemory under PS3 compilers where appropriate. Updated some code documentation in EAMemory related to this.
- Added WiiU support.
Bug Fixes
-
Fixed Stopwatch::SetUnits for the case of kUnitsCPUCycles. Previously it was trying to do some smart thing related to custom frequency calculations, but it resulted in kUnitsCPUCycles always being of lower resolution by default. The new code is simple and doesn't support the custom frequency feature, which was never used anyway.
Version 1.09.00 (November 5, 2012)
Changes
- Added EA_FAIL statements to StrtoU32, etc. upon overflow or underflow. For compatibility with C99, this functionality is disabled by default. However, it can be controlled at runtime via GetAssertionsEnabled / SetAssertionsEnabled. Suggested by Corey Taylor.
- Stopwatch instances can now be declared as global objects which construct and possibly used before main(). Previously there were compiler/linker global init order issues that affected some platforms. Suggested by Brian Hixon.
- Added EAPrintf support for the ' format specifier, which causes numbers to display with a thousands separator. This is a non-standard but common extension to the C Standard Library printf function. See http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/printf.3.html. For example, a call to Printf(%'d", -123456789) would result in -123,456,789 being printed. Currently it's not possible to substitute the ',' char for one that's more correct for a given locale, as is the case for the '.' decimal separator. This feature can be added if requested, but the EALocale package has locale-correct number formatting of its own for a variety of locales, though it doesn't have the full printf formatting functionality of the EAStdC Printf family.
Bug Fixes
- Fixed a bug in the Printf family for %g format output precision for char8_t printf (but not char16_t or char32_t). The bug was that when printing in exponent mode, %g was printing one more significant digit than the C99 and C11 Standards specify regarding the user-specified precision. For example printf("%.3g", 65432.1) printed 6.543e+04 instead of the correct 6.54e+04. The user-specified field width was obeyed according to the Standard, however, and continues to be obeyed after this fix.
- Fixed the resolution of Stopwatch::kUnitsCycles for Microsoft x86 targets to be the full CPU tick resolution as opposed to the QueryPerformanceCounter resolution. The former was what is intended by the code and results in the user getting CPU ticks when asked for. Note that CPU tick frequency on x86 targets can change over runtime, but that was the case before this fix. All this fix does is not divide the CPU tick counts returned by rtdsc by some constant.
Version 1.08.06 (October 2nd, 2012)
Changes
- Upated Microsoft platform SDK support for various platforms.
Bug Fixes
- Fixed EAGlobal's handling of pointers on 64 bit platforms.
Version 1.08.05 (October 1st, 2012)
Changes
- Changed LimitStopwatch to use uint64_t limits instead of just uint32_t limits.
- Improved EADateTime Microsoft portability, as some Microsoft platforms don't support the GetLocalTime function.
Bug Fixes
Added Features
- Limit copying DLLs manually to fw2 builds.
- Added additional support for building for Windows Phone
- Added support for EAAssert on WinPRT ARM
Version 1.08.04 (August 7 , 2012)
Changes
- Fixes warnings for constant expressions in TestCallback on Android
- Made some function arguments in EADateTime.cpp consistent.
- Cleaned up EAStopwatch.h to make its platform-specific #include usage consistent.
- Added copylocal prop so DLL build can be tested.
- Simplifying the preprocessor conditional block that decides whether or not to use type traits to determine if a type has a trivial destructor.
- Modified HasTrivialDestructor to work properly with SSE intrinsic types under the Clang compiler.
- Reduce iterations (time spent) on a data-time test.
Version 1.08.03 (July 3, 2012)
Changes
- Updated the definition of EAAlloca to be more portable to different compilers.
- Added DateTimeSecondsToTimeTSeconds(), TimeTSecondsSecondsToDateTime(), and IsDSTDateTime().
- Added kTimeZoneNameCapacity, in order to create a constant describing the space required to hold time zone names.
- Added BSD Unix support for GetTimeZoneBias().
- Added char16_t to char32_t and char32_t to char16_t conversion orverloads for Strlcat.
- Improved EAGlobal for 64 bit Microsoft platforms that aren't Windows.
Version 1.08.02 (June 4, 2012)
Changes
- Added Log2Uint32 / Log2Int32 / Log2Uint64 / Log2Int64, which provide compile-time evaluations of base 2 log for constants.
- Fixed a bug in DateTime under Microsoft OSs for the case of initializing to the current time, where the resulting calculated month could be wrong.
- Added EA_INIT_PRIORITY(1000) to gAutoStopwatchSetup to cause it to init earlier on some platforms.
- Added support for WinRT.
- Added support for FreeBSD.
Version 1.08.01 (May 7, 2012)
Changes
- Updated CountLeading0Bits and CountTrailing0Bits to use compiler intrinsics under VC++ and GCC. They have been measured as performing better.
- Fixed a theoretical (though virtually impossible) HMUTEX leak in EAGlobal InitOSGlobalSystem. Found by Coverity.
- Fixed a mistake in Scanf string reader (which supports user-defined string sources) for when kReadActionUnread is executed. This didn't (and couldn't) result in unspecified behavior, but the break should be there for correctness. Found by Coverity.
- Fixed int128_t::SetPartUint32(int nIndex, uint32_t value), which was missing break statements and generating wrong results. Found by Coverity.
- Added nanosecond support to the DateTime class. Time can now be measured in nanoseconds since the date 1/1/0000.
- Added int128_t constructors for type long and unsigned long. This allows for more seamless use of built-in int types with int128_t.
- Made int128_t::Int128ToStr allow you specify whether leading zeroes are printed, a prefix (e.g 0x) is printed, or use the default.
- Significantly improved the performance of the StrtoXXX family of functions for 32 bit platforms, due to removing the usage of a 64 bit divide and modulus for most cases.
- Changed int128_t's INT128_MIN (etc.) to EASTDC_INT128_MIN (etc.). This was needed due to potential collisions with Standard libraries and their compilers, which may #define these values to something else. This is a potentially breaking change, though the fix is trivial.
- Fixed DateTime to now obey the timeFrame argument to the Set function and default constructor. Previously it always used only local time.
- Fixed bug in the return value of the Windows version of GetEnvironmentVar for some cases.
- Revised EAProcess.cpp to add support for OS X and to fix subtle uncommon string capacity/length bugs in the existing code.
- GetCurrentProcessPath and GetCurrentProcessDirectory now properly support OS X, Android, Palm, and other non-desktop Linux variants.
- Fixed a couple warnings in EABitTricks for using the Round template functions with unsigned types. Reported by Anish Dave.
- Fixed the return value of EABitTricks' RoundUpToEx to return T instead of int32_t.
- Added required overloads for platforms where wchar_t and char16_t are not the same type.
- Added support for the clang compiler in unix64 configurations.
Version 1.08.00 (February 28, 2012)
Additions
- Added PSVita platform support (EA_PLATFORM_PSP2).
- Added EAMalloc/EAFreea to provide a safer alternative to EAAlloca. Updated the documentation to EAAlloca to make its (lack of) safety more obvious.
- Added ARM support for EA_CACHE_PREFETCH_128, etc. in EAMemory.h.
Bug Fixes
- Fixed some additional bugs in Strftime/Strptime beyond the bug fixed in EAStdC v1.07.00. These functions now pass the unit tests.
- Fixed a bug in Scanf where any of [\]^_` would be mistakenly matched as hex digits for reading %x fields. Reported by Avery Lee.
- Fixed a 64 bit warning in EATextUtil in the templated SplitTokenDelimited and SplitTokenSeparated functions.
Changes
- LimitStopwatch::IsTimeUp, GetTimeRemaining, and GetTimeRemainingFloat were changed to be const.
- Added some code to EAAlignment.h to allow working around a bug in PS3 GCC for PowerPC with respect to vector types. In particular the EASTDC_DECLARE_TRIVIAL_DESTRUCTOR macro was added.
- Added documentation on RandomTaus and on how to generate or shuffule random ranges.
- Changed the optimized Strlen to use a union of pointers instead of having a bunch of hard-to-read casts.
- Changed Memset16 to use a union of pointers in order to avoid casting between pointer types and uintptr_t.
Version 1.07.00 (December 21, 2011)
Additions
- Added EA::StdC::Init and Shutdown functions, which should be called on app startup and shutdown. The purpose of these is to init data structures that are impossible to auto-initialize within EAStdC. As it currently stands, not calling these merely results in a rare potential Android Printf log race condition, and so most users don't need to drop what they are doing and change their code to call these.
Bug Fixes
- Fixed a bug in GetTimeZoneBias for non-Microsoft platforms which caused it to take up to a second to execute. Reported by Herbert Parkes.
- Fixed a bug in Strptime's handling of %Y. Reported by Changning Zhou.
- Made it so that EASPRINTF_FIELD_MAX doesn't apply to string fields that aren't having their format converted. This is less of a bug fix than a limitation relaxation, but some users might think of it as a bug fix.
- Fixed a compiler warning in EAFixedPoint.h regarding a cast from int. Reported by Alex Lindsay.
Changes
- Added code to Stopwatch to handle the case that the stopwatch was started before the global stopwatch init.
- Bumped up EASPRINTF_FIELD_MAX to 4096 for desktop platforms (e.g. Windows, Linux, OS X).
Version 1.06.01 (October 19, 2011)
Additions
- Added string class versions of Strlcpy and Strlcat. So now you can Strlcpy and Strlcat between strings. Previously you could do that with the ConvertString function, but that function has been deprecated and replaced with these more generic and complete functions.
- Added support for the clang compiler, which is new for the iPhone iOS5 SDK. This amounted simply to avoiding a couple compiler warnings.
Bug Fixes
- Fixed a bug in GetTimeOfDay on PS3 where the result could be off by a few microseconds.
- Fixed the DJB2 hash string function under x86 to pay attention to the nLength parameter instead of looking for a 0-terminated string. This was accomplished by simply deleting the asm version of this function. Reported by Andy Younger.
Changes
- The GetTime function has been revised to have a clarified set of specifications and a revised implementation for those specifications. Thanks to Michel Donais for his contributions on this.
- Improved the endian swapping code efficiency for some ARM targets, and added some clarifying documentation.
Version 1.06.00 (September 26, 2011)
Additions
- Added StringVcprintf and StringPrintf, which allow doing printf directly into a string object. The advantage over eastl::string::printf is that it doesn't need to call printf twice.
template <typename String>
int StringVcprintf(String& s, const String::value_type* pFormat, va_list arguments);
template <typename String>
int StringPrintf(String& s, const String::value_type* pFormat, ...);
- Added char32_t functionality to match char8_t and char16_t. The primary use is for platforms that necessarily have a 32 bit wchar_t. A result of this is that wchar_t is also supported, regardless of whether it matches char8_t, char16_t, or char32_t. Another outcome of this is that sized character field specifiers are now supported: %I8s %I16s %I32s %I8c %I16c %I32c. For highest code portability across platforms that have varying versions of wchar_t, use wchar_t consistently or use these sized types for wide strings. Currently char16_t and char32_t functionality is non-optional, though it mostly or entirely gets linked away when not used.
- Added GetTimePrecision, which returns the precision of the GetTime function.
Bug Fixes
Changes
- Revised EASTDC_MEMORY_INLINE_ENABLED to be more portable to users' builds. It was being tripped up by things like users mixing debug and release builds of code.
- Improved the precision of the GetTime function on PS3 from second-level precision to (theoretically) nanosecond-level precision.
Version 1.05.05 (August 18, 2011)
Additions
- EACallback has been completed and is unit tested. EACallback allows you to have a callback called at some time in the future, based on system time or based on ticks or user events. One-shot and repeat callbacks are supported.
- Added RandomTaus to the Random number generator set. RandomTaus optimizes randomness and to some degree size at the cost of speed and thus can be a useful alternative to the other two present generators.
Bug Fixes
- Fixed cases of va_start calls not being followed up by va_end calls. While in theory this omission was a bug, in practice it should not have been affecting users, as va_end is a no-op on all the platforms we use. Repored by Luc Isaak.
- The printf family of functions for Android to the Android log is now fixed with respect to newlines. Previously a single sprintf output could be spread across multiple log lines, whereas now it works as it should. A downside to this is that if you do a printf that doesn't have a newline in it and your app exits in some way before another printf is done with a newline then that last printf will never get flushed to the outout device.
Changes
- Added the concept of a WriteFunctionState to user-supplied write WriteFunction of the Printf function family. This doesn't affect most users, but makes the implementation of a user-defined custom printf back-end more flexible.
- Made FPrintf to stdout and stderr on Android act the same as Printf and use Android log output.
- EAGlobal now supports Linux and OS X. It might be able to support other Unix and Unix-like platforms, but this isn't yet tested.
Version 1.05.04 (May 5, 2011)
Additions
- Added Playbook platform support.
- Added a code stripper script, useful for removing platform-specific code as needed.
Bug Fixes
- Fixed a unit test bug which would result in DateTime testing to mistakenly report an error.
- Changed the static storage method of EAGlobal to use a raw buffer. On some platforms the previous aligned buffer wouldn't work due to an order-of-initialization problem.
Version 1.05.03 (March 14, 2011)
Additions
Bug Fixes
- Build script files were not exporting the location of the EAStdC SPU library.
- Fixed EASprintf's AndroidLogWriter to return the written count instead of returning 1.
- Fixed Airplay (mobile platform) compile error related to QueryPerformanceFrequency usage.
- Fixed bug in
SetElapsedTime and
SetElapsedTimeFloat for the case that the stopwatch is already running. Reported by Andrei Stanescu.
Changes
- Disabled bulk builds for the EAStdC SPU library to cut down on executable code size.
- Added assertions to Memcpy functions to verify the memory doesn't overlap. Suggested by Gareth Lewin's team.
- Added 'q' modifier (acts the same as 'll') support to EASprintf as extension functionality. This addition was necessary because iOS (e.g. iPhone) exposes it in its C99 headers (e.g. through the defintion of C99's PRId64).
Version 1.05.02 (January 3, 2010)
Additions
- Added EASTDC_STOPWATCH_DISABLE_CPU_CALIBRATION, which allows you to bypass the startup wait on Windows for Stopwatch calibration. Suggested by Avery Lee.
- Added SPU build support, which is enabled by default. It can be disabled via the EASTDC_PS3_SPU_ENABLED define or the nant EAStdC.EASTDC_PS3_SPU_ENABLED property.
- Added signed integer versions of all of the EAEndian functions (previously EAEndian only supported unsigned integer types).
- Added the following for compatibility with the Endian package and existing EA code:
- uint32_t ReadFromBigEndian(const void* pSource, int32_t nSourceBytes);
- void WriteToBigEndian(const void* pDest, uint32_t data, int32_t nSourceBytes);
Bug Fixes
- Revised Memcpy on PS3 SPU to work around a broken compiler-provided version of memcpy. Previously the SPU memcpy would fail to work properly when the source or destination were not 16 byte aligned. Provided by Joe Pribele.
Changes
Version 1.05.01 (November 5, 2010)
Additions
- Added string class-based versions of EATextUtil's GetTextLine, SplitTokenDelimited, and SplitTokenSeparated.
- Added an SPU memcpy to the examples directory, with the intention of making it part of the library in the future.
Bug Fixes
- Fixed bug in MemfillAny which would not fill all the memory. Reported by James Ding.
- Fixed a compiler warning stemming from a bug in the VC++ headers. Reported by Patrick McMorris.
- Changed a memcpy to memmove in EcvtBuf. Reported by James Fairweather.
- Fixed a bug in the length of the XBox 360 game directory in EAProcess.cpp.
- Fixed a Strlcpy bug for the case of an empty source string. Submitted by Yee Cheng Chin.
- Fixed a bug in AddTime where it was limited to 32 bits of time difference instead of 64. Reported by Alexei Koulikov
- Fixed a bug on Xenon due to a difference between float rounding for int32_t vs. uint32_t
- Fixed bug in GetCurrentProcessDirectory where it would return the wrong length. Submitted by Justin Russell.
Changes
- Updated the EADateTime function to enable more precise time information on PS3, though the use of librtc. This can be enabled via the EASTDC_PS3_LIBRTC_ENABLED config parameter. This parameter exists and is disabled by default because librtc requires the user to enable librtc on startup via cellSysmoduleLoadModule(CELL_SYSMODULE_RTC) and linking librtc_stub.a into the application.
- Added a print EXIT(n) at the end of the unit tests on wii to support EARunner_Wii; it will indicate to the runner that the test is completed.
- Changes some of the tests to have better float tolerance, specifically for wii
Version 1.05.00 (June 9, 2010)
Release notes
- This version has been updated to be compatible with PS3 SN 330, CodeWarrior 1.3, and Android platform.
Additions
- Added generic EASTL string 8 <--> 16 bit conversion functions:
template <typename Source, typename Dest>
bool ConvertString(const Source& s, Dest& d);
template <typename Source, typename Dest>
Dest ConvertString(const Source& s);
Bug Fixes
Changes
- Compiler compatibility work.
Version 1.04.05 (April 5, 2010)
Additions
- Added Mobile support: iPhone, Palm Pre, and Android. More mobile platforms to follow.
- Added encoding versions of strlcat, provided by Andrew Willmott:
size_t Strlcat(char16_t* pDestination, const char8_t* pSource, size_t nDestCapacity);
size_t Strlcat(char8_t* pDestination, const char16_t* pSource, size_t nDestCapacity);
Bug Fixes
- Worked around 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.
Version 1.04.04 (March 1, 2010)
Additions
Bug Fixes
Changes
- Worked around new Xenon XDK version compiler error in the unit tests.
Version 1.04.03 (November 18, 2009)
Additions
Bug Fixes
- Fixed bug in UTF8Increment. Reported by Nick Beatty.
- Fixed bug in Scanf for the case of Sscanf("0.1797734499", "%f", &someFloat). What was special about this case was that it represented an exponent of the power -10 (wouldn't happen with -9 or -11), and the code was mistakenly doing a test for >10 where it needed to do >=10. Submitted by Amelia Von Haden.
- Fixed bug in Scanf for the case of Sscanf(".750", "%f", &someFloat). Submitted by Amelia Von Haden.
- Fixed bug in Strlcpy(char16_t* pDestination, const char8_t* pSource, size_t nDestCapacity, size_t nSourceLength) which could cause it to mistakenly fail if the user passed the source strlen instead of -1. Reported by Arpit Baldeva.
- Fixed a potential EAOSGlobal leak of the OSGlobalManager singleton. A small problem arising out of this fix is that the application cannot Call InitOSGlobalSystem more than once and then pair it with ShutdownOSGlobalSystem more than once without causing the refcount to go negative. In practice the negative refcount should be harmless unless the application wants to subsequently re-use the OSGlobalSystem after it has been shut down. The solution is to call ShutdownOSGlobalSystem only once after its usage.
- Fixed a bug in Scanf reading an "INFINITY" string beyond its bounds.
Changes
- Implemented a workaround for a VS2005 SP1 bug related to Microsoft's <intrin.h>.
- Made OSGlobal clear the OS global environment variable in ShutdownOSGlobalSystem. This allows the OSGlobal system to be reused in a DLL that is multiply loaded and unloaded in a process. Requested by Cameron Dunn, for use in a Photoshop plugin.
- Updated char16_t support to use EA_CHAR16("") instead of L"". This allows for C++0x compatibility.
Version 1.04.02 (October 5, 2009)
Additions
- EAStdC: Added support for EAStopwatch on Linux64.
- Added AtoF32, which is identical to Atof but returns float instead of double. Also added StrtoF32.
Bug Fixes
- Fixed some Linux64 / GCC 4.3 compiler warnings.
- Fixed Wii printf support for the * format specifier (e.g. printf("%*s", "abc")), which previously was broken on Wii.
- EAStdC: Fixed DateTime conversion function for non-Windows platforms during daylight savings.
- Made FtoaEnglish respect the user-provided nPrecision argument, whereas previously it used a hard-coded value of 8. Reported by Jan Lotz.
- Fixed a use of EA_ASSERT_F to use EA_ASSERT_FORMATTED instead, as the former is supported by EATrace but not EAAssert. Reported by Darryl Gates.
- Fixed some compiler warnings newly generated by the latest Wii and SN PS3 compilers.
Changes
- Removed the EASTDC_MAX_FCVT_PRECISION config define, as it is no longer needed.
- Ftoa/FtoaEnglish output precision is slightly altered from how it was previously such that it is consistent with the API specification. Previously, when exponential output was requested it would interpret the precision argument to refer to all characters whereas the specification called for it to refer to the digits after the decimal point.
- 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 EAStdC.build file supports using EA_XBDM_ENABLED=[0|1] in the masterconfig.xml file. Suggested by Kevin Perry.
Version 1.04.01 (August 5, 2009)
- Fixed Wii compiler warnings that result with latest compiler.
Version 1.04.00 (June 24, 2009)
Additions
- Added UTF8 utility functions to EATextUtil.h/cpp.
Bug Fixes
- Fixed bug in Scanf for the case of %I64 whereby it would read the value as zero. Reported by Olivier Nallet.
- Fixed bug in Scanf for the case of %i whereby it was reading hex values (e.g. 0x1234) as zero. Reported by Scott Penso.
- Fixed a PS3 SN compiler warning in SprintfOrdered.
- Fixed a Wii compiler warning generated by the latest Wii compiler.
Changes
- Implemented workaround for SN PS3 compiler optimized code misgeneration of RandomLinearCongruential::RandonUint32Uniform(uint32_t nLimit).
- Implemented an optimized Strlen which executes 1.5x faster for smallish strings to 5x faster for longish (length >= 1024) strings.
- Added code to avoid using HUGE_VAL on VC++/Windows. This value is linked in from the C runtime library, and removing its usage allows the scanf code to be independent of the C runtime library.
- A seed of zero for RandomLinearCongruential no longer results in an auto-seed like with 0xffffffff. This makes it consistent with the documentation and consistent with RandomMersenneTwister and make the behaviour cleaner: there is exactly one way to auto-seed it, with 0xffffffff.
- Changed the .build file property EASTDC_USE_STANDARD_NEW = true|false to EAStdC.EASTDC_USE_STANDARD_NEW = 1|0. Any existing uses of this option will need to change, though it's anticipated that there aren't any existing uses since this feature was added only in the previously published version.
Version 1.03.10 (March 9, 2009)
Release Notes
- This version reverts the Memcpy/Memset/Memclear function changes made in v1.03.09. The problem is that the 1.03.09 functions were not compatible with uncached memory, and while they were documented as such, users felt that it shouldn't be this way.
Additions
- Added C (cached) versions of Memcpy, Memset, Memclear as MemcpyC, MemsetC, MemclearC. These implement fast versions of memory functions but which don't work with uncached memory, such as XBox 360 PAGE_NOCACHE or PAGE_WRITECOMBINE memory.
Bug Fixes
- Fixed a memory corruption bug in on PS3 with the tiny EAStdC Mutex class that EAGlobal uses.
- Fixed a bug in int128_t for the case of shifting by 0 or 32 whereby you could get the wrong result.
- Fixed #include problem for the timeval struct in DateTime.cpp which could result in a compile error if the user defines WIN32_LEAN_AND_MEAN globally.
Changes
- Converted a couple uses of EASTDC_NEW to new from the previous custom version of new being used. These are cases that should rarely, if ever, be called in practice. This change is due to the VC++ linker looking for EASTDC_NEW even when it wasn't used and thus causing link errors for users who should need to supply this function. An upcoming version of EAStdC is set to use ICoreAllocator for this instead. Added EASTDC_USE_STANDARD_NEW build property to control this.
Version 1.03.09 (January 19, 2009)
Additions
- The scanf family of functions is now ready for use. This includes the following functions in 8 and 16 bit versions:
int Cscanf(ReadFunction pReadFunction, void* pContext, const char_t* pFormat, ...);
int Fscanf(FILE* pFile, const char_t* pFormat, ...);
int Scanf(const char_t* pFormat, ...);
int Sscanf(const char_t* pTextBuffer, const char_t* pFormat, ...);
int Vcscanf(ReadFunction pReadFunction, void* pContext, const char_t* pFormat, va_list arguments);
int Vfscanf(FILE* pFile, const char_t* pFormat, va_list arguments);
int Vscanf(const char_t* pFormat, va_list arguments);
int Vsscanf(const char_t* pTextBuffer, const char_t* pFormat, va_list arguments);
These functions implement C99-standard scanf in a portable, efficient and consistent way across platforms. Performance should be both better than the built-in scanf and better-conforming than the compiler-supplied versions. Additionally, extensions such as %b (binary) and %I32/%I64 (int32_t/int64_t) are provided as well. Currently decimal points are hard-coded to '.', whereas decimal points are ',' for some locales. If you need locale-specific support, please notify the maintainers and this can be done.
- Added Strftime and Strptime, which are time string printing and scaning functions, respectively. These are similar to Posix strftime and strptime.
Bug Fixes
- Fixed bug in FtoaEnglish whereby an input of 0.0 with exponent == true resulted in a bad output. Submitted by Alex Bilyk.
- Fixed bug in DateTime whereby setting the year (with kParameterYear) would cause it to set it to year-1 in some cases. Reported by Bill Schnurr.
Changes
- Memcpy, Sprintf family function signatures changed to include EA_RESTRICT for theoretically improved performance.
Version 1.03.08 (December 2, 2008)
Additions
- Added Memcheck, Memset8_128, Memcpy128, Memclear.
- Moved EAStopwatch from UTFFoundation to here.
- Added Osprintf, etc. which implements ordered sprintf. This is whereby the format arguments specify their argument order and thus the format string can be rearranged. This is useful for localization of format strings.
Bug Fixes
- Fixed bug in Memset16 and Memset32 whereby it could mis-fill if the destination was not aligned.
- Worked around Wii standard C library time bug in EADateTime.
Changes
- Implemented faster versions of Memcpy functions for some platforms. Note that some platform memcpy implementations are nearly optimal as-is and don't benefit from custom implementations; at least not for general memory copying.
Version 1.03.07 (October 28, 2008)
Additions
- Added Vscprintf, which mimics Microsoft's _vscprintf .
- Added GetTimeOfDay, which is a portable version of the well-known Posix/Unix gettimeofday function.
Bug Fixes
- Corrected a problem in StringWriter8 which resulted in an overflow if it encountered a UTF8 cluster than extended beyond the end of the destination buffer. Submitted by Jon Parise.
- Fixed Strtok documentation error which could lead the user to writing an infinite loop if the user believed the documentation sample code instead of the documentation function specification. Reported by Daniel Brown.
- Fixed Sscanf and Vsscanf, which didn't work for many cases. Sscanf and Vsscanf now call the C standard library built-in vsscanf. This is an intermediate fix while the final custom implementation of these functions is implemented. This version will be a little slower and have some portability differences between compilers, but will work OK for most cases.
- Fixed crash bug in RandomMersenneTwister. Reported by Andrea Schiel.
Changes
- Fscanf and Scanf now are implemented, though they work by calling the std C implementation and not yet by calling our custom implementation.
- Added kInt32MinCapacity, etc. identifiers to EAString.h for use with the itoa family of functions. Suggested by Luc Isaak.
- Revised the GetSeed/SetSeed code so that using SetSeed on the results of GetSeed results in the same state as before GetSeed. Previously that was not guaranteed behavour, though most users would likely want it to be so.
Version 1.03.06 (August 18, 2008)
Additions
- Added VS2008 compatibility, which amounted to quelling a new compiler warning or two.
Bug Fixes
- Changed char16_t usage to char8_t usage in EAGlobal.cpp to be compatible with non-nant builds.
- Fixed pc64-vc-dll-dev-opt warning C2143 (syntax error : missing ';' before ''template...).
Changes
Version 1.03.05 (May 13, 2008)
Additions
- Added StrlenUTF8Decoded, which returns the character length of a UTF8 string, and StrlenUTF8Encoded, which returns the Strlen of a UTF8-encoded equivalent of a UTF16 string.
Bug Fixes
- Deprecated Memcpy(char16_t*) and Memmove(char16_t*). These functions were never intended to exist and can only cause silent problems.
- Fixed potential negative bounds read in EACType.h. Reported by Frank Barchard.
- Fixed decimal calculation bug in the the Fcvt and Ecvt functions for a particular numerical case. This also affects the Printf family of functions for %f, %e, %g. In particular, the bug resulted in Printf("%.1f", 0.952) printing "0.1" instead of "1.0".
Changes
Version 1.03.04 (April 3, 2008)
Additions
Bug Fixes
- Changed strcmp family of functions for char8_t to compare based on unsigned char values instead of signed char values. This is in line with the C89 and C99 standards.
Changes
Version 1.03.03 (March 20, 2008)
Additions
- Added PS2 compatibility. Provided by Philip Dunstan.
- Added EASTDC_VERSION / EASTDC_VERSION_N to the definition set. This allows for determining the version at compile time.
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 EAIO package and is fixed in EAIO 2.07.02.
- Fixed bug in Ftoa(double dValue, char8_t* pResult, int nInputLength, int nPrecision, bool bExponentEnabled) for certain kinds of numbers with fractions.
- Fixed bug in Strtod(const char16_t*pString, char16_t** ppStringEnd) whereby ppStringEnd wasn't assigned.
Changes
- Revised AlignUp and AlignDown for pointers such that they align based on byte alignments instead of object alignments. This is closer to what people want and is aligned with rwstdc.
- Added printf("\32") to end of unit test under PS3 and PS2. This indicates to the SN tools that the app is done.
- Changed a couple EADateTime functions to return uint32_t instead of uint8_t and uint16_t. The latter was tripping SNC code generation bugs and is less efficient anyway.
- Deprecated the following functions, as they are redundant with existing functions: AlignAddressUp, AlignObjectUp, AlignAddressDown, AlignObjectDown, IsAddressAligned, IsObjectAligned.
Version 1.03.02 (January 7, 2008)
Additions
Bug Fixes
- Fixed VS2003 DLL export bug in int128_t.cpp. Submitted by Scott Penso.
Changes
Version 1.03.01 (December 17, 2007)
Additions
- Added uint64_t version of GetHighestBitPowerOf2. Provided by Chris Hecker.
- Added support for the SN PS3 compiler.
Bug Fixes
Changes
Version 1.03.00 (November 5, 2007)
Additions
- HashCRC now supports reversed bit CRC via CRC32Reverse. Note that reverse
CRC does not refer to reversing the algorithm; it refers to reversed bit
order. It turns out that a number of existing standardized protocols use
reverse CRC instead of normal CRC. Proposed by Andrew Willmott.
- Alphanumeric string compare implemented: StrcmpAlnum / StricmpAlnum. Proposed by Frank Barchard.
Bug Fixes
Changes
Version 1.02.00 (September 10, 2007)
Additions
- Added FNV1 Calculator.html to the examples directory. It is a javascript page which calculates FNV1 string hashes. Created by Henry Goffin.
- Added clarifying documentation to EARandom.h.
- Started work on an EAScanf implementation. The intention is to have a full scanf implementation in EAScanf.cpp, whereas the current scanf implementation within EASprintf.cpp has weaknesses and limitations.
- Added a bunch of HTML documentation files to the /doc directory.
Bug Fixes
- Fixed potential symbol collision with the UTFFoundation package int128_t class. Note that the EAStdC int128_t comes directly from UTFFoundation and is the new home for that code.
- Fixed bug in Cprintf family of functions. These are the printf functions whereby the user specifies a write function callback instead of a FILE (fprintf) or char buffer (sprintf).
- Fixed unit test bug related to EADateTime.
Changes
- All the public functionality of EAStdC is now exported in the DLL build.
- The scanf function declarations have been moved from EASprintf.h to EAScanf.h. EASprintf.h now #includes EAScanf.h for backwards compatibility. The intention here is to have a full scanf implementation in EAScanf.cpp, whereas the current scanf implementation within EASprintf.cpp has weaknesses and limitations.
- Revised GetTimeZoneBias under Microsoft OSs to provide more reliable information based on the system's settings.
Version 1.01.00 (July 20, 2007)
Additions
- Added EAGlobal, which implements a global variable wrapper. In particular, this wrapper allows for cross-dll global variables that would otherwise be impossible with conventional built-in objects or pointers. EAGlobal has the same functionality as the previous UTFFoundation/EAGlobal and EAOSGlobal files and classes as well as some private functionality found in other EA packages that have needed this kind of functionality.
Bug Fixes
- Fixed bug in char16_t version of FtoaEnglish.
Changes
Version 1.00.00 (June 29, 2007)
This is the first version of EAStdC as a standalone package, but most of it derives from UTFFoundation 2.11.00 and rwstdc 1.03.00.
End of document