As a detailed look into STSW-STM8069 / STM8S_StdPeriph_Lib v2.2.0 : http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm8-embedded-software/stsw-stm8069.html, the Utilities/STM8S_EVAL/Common/stm8s_eval_i2c_ee.c file is quite confusing.
I can see there is a SAFE procedure implemented. in line 230
* Read data from first byte until byte N-3 */
if ((uint16_t)(*NumByteToRead)> 3)
I believe it should be a "while" instead of "if". "if" case only got one byte read. and there is no outer "while" to repeat this case.
in line 295
/* Reset the number of bytes to be read from the EEPROM */
NumByteToRead = 0;
In this function, NumByteToRead is a uint16_t pointer. setting the pointer to 0 / null, is it what the lib mean? Maybe doing it will also make (uint16_t)(*NumByteToRead) == 0.
Somehow I just do not know why a safe procedure is recommended.