Fix compilation issues on GCC 4.6.2

This commit is contained in:
romolo.manfredini@gmail.com
2012-03-15 18:05:07 +00:00
parent 3cb1ffc153
commit 9512053d69
+6 -7
View File
@@ -206,18 +206,17 @@ bool EFile::exists(uint8_t i_fileId)
*/
void EFile::swap(uint8_t i_fileId1, uint8_t i_fileId2)
{
/* This code causes horrible alignment problem with avr-gcc 4.7.0
*
* DirEnt tmp = eeFs.files[i_fileId1];
* eeFs.files[i_fileId1] = eeFs.files[i_fileId2];
* eeFs.files[i_fileId2] = tmp;
*/
#if ((__GNUC__ > 4 || __GNUC__ == 4) && (__GNUC_MINOR__ > 7 || __GNUC_MINOR__ == 7))
DirEnt tmp;
__builtin_memcpy(&tmp, __builtin_assume_aligned(&eeFs.files[i_fileId1], sizeof(DirEnt)), sizeof(DirEnt));
__builtin_memcpy(&eeFs.files[i_fileId1], __builtin_assume_aligned(&eeFs.files[i_fileId2], sizeof(DirEnt)), sizeof(DirEnt));
__builtin_memcpy(&eeFs.files[i_fileId2], __builtin_assume_aligned(&tmp, sizeof(DirEnt)), sizeof(DirEnt));
#else
DirEnt tmp = eeFs.files[i_fileId1];
eeFs.files[i_fileId1] = eeFs.files[i_fileId2];
eeFs.files[i_fileId2] = tmp;
#endif
s_sync_write = true;
EeFsFlushDirEnt(i_fileId1);
EeFsFlushDirEnt(i_fileId2);