Added support for three levels of nesting of the 'pragma pack'
directives.
diff --git a/include/pshpack2.h b/include/pshpack2.h
index 8b7e29e..603e581 100644
--- a/include/pshpack2.h
+++ b/include/pshpack2.h
@@ -1,12 +1,29 @@
-#ifndef __WINE_PSHPACK_H
-#define __WINE_PSHPACK_H 2
+#if defined(__WINE_PSHPACK_H3)
-#if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
-#pragma pack(2)
-#elif !defined(RC_INVOKED)
-#error "2 as alignment isn't supported by the compiler"
-#endif /* defined(__GNUC__) || defined(__SUNPRO_CC) ; !defined(RC_INVOKED) */
+ /* Depth > 3 */
+# error "Alignment nesting > 3 is not supported"
-#else /* !defined(__WINE_PSHPACK_H) */
-#error "Nested pushing of alignment isn't supported by the compiler"
-#endif /* !defined(__WINE_PSHPACK_H) */
+#else
+
+# if !defined(__WINE_PSHPACK_H)
+# define __WINE_PSHPACK_H 2
+ /* Depth == 1 */
+# elif !defined(__WINE_PSHPACK_H2)
+# define __WINE_PSHPACK_H2 2
+ /* Depth == 2 */
+# define __WINE_INTERNAL_POPPACK
+# include "poppack.h"
+# elif !defined(__WINE_PSHPACK_H3)
+# define __WINE_PSHPACK_H3 2
+ /* Depth == 3 */
+# define __WINE_INTERNAL_POPPACK
+# include "poppack.h"
+# endif
+
+# if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+# pragma pack(2)
+# elif !defined(RC_INVOKED)
+# error "Adjusting the alignment is not supported with this compiler"
+# endif
+
+#endif