From 9512053d691900b7ef983a658b6b4c170b78c5ce Mon Sep 17 00:00:00 2001 From: "romolo.manfredini@gmail.com" Date: Thu, 15 Mar 2012 18:05:07 +0000 Subject: [PATCH] Fix compilation issues on GCC 4.6.2 --- src/file.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/file.cpp b/src/file.cpp index 48a1d19d4..d9ab57caf 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -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);