2015-01-13 Version 4.0.1 Vincent Rogier vince.rogier@ocilib.net * C API - Fixed OCI_ObjectGetXXX() and OCI_ObjectSetXXX() : internal access to some field members could cause segfaults with complex object types having deep nested objects - Fixed possible segfaults in OCI_Execute() when string input binds are used in Unicode build on Unix platforms if the bind direction is not explicitly set - Added error type OCI_ERR_ARG_INVALID_VALUE - Input arguments handled as unsigned int value that correspond to a set of possible value are now checked. - If the provided value does not fit within the set of expected values, an error is raised - Factorised some internal code using new methods OCI_ExternalSubTypeToSQLType() and OCI_ExternalSubTypeToSQLType() - Replaced some TAB occurrences with spaces - Internal code cleanup and refactoring - Internal minor code changes to remove GCC warnings with all possible paranoid options activated. - Fixed internal macro OCI_CHECK_STMT_STATUS that had been wrongly modified in previous some refactoring * C++ API - Some Enum<> definitions where promoted to Flags<> - Fixed possible race condition in internal smart pointer members access in multithreaded applications - Fixed Statement::Bind() : inadequate memory allocation parameter in BindAdaptor class constructor initialization - Fixed access violation in Pool object destructor when a global Pool object is not explicitly closed and destructor called after Environment::Cleanup() - Code refactoring and enhancements * Miscellaneous - Update Copyright to 2015 - Fixed some typos in some files