Karsten Blees wrote:
> (Besides, __attribute__((aligned)) / __declspec(align) can only
> _increase_ the alignment, so aligned(1) would have no effect).
Good catch.
> Googling some more, I believe the most protable way to achieve this
> via 'compiler settings' is
>
> #pragma pack(push)
> #pragma pack(4)
> struct hashmap_entry {
> struct hashmap_entry *next;
> unsigned int hash;
> };
> #pragma pack(pop)
>
> This is supported by at least GCC, MSVC and HP (see your link). The
> downside is that we cannot use macros (in git-compat-util.h) to emit
> #pragmas. But we wouldn't have to, as compilers aren't supposed to
> barf on unknown #pragmas.
Technically this can be done using macros:
#if (gcc)
# define BEGIN_PACKED _Pragma("pack(push,4)")
# define END_PACKED _Pragma("pack(pop)")
#elif (msvc)
# define BEGIN_PACKED __pragma(pack(push,4))
# define END_PACKED __pragma(pack(pop))
#else
/* Just tolerate a little padding. */
# define BEGIN_PACKED
# define END_PACKED
#end
Then you can do:
BEGIN_PACKED
struct hashmap_entry {
...
};
END_PACKED
Whether that's nicer or uglier than the alternatives I leave to you.
;-)
Thanks,
Jonathan
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html