Added support for three levels of nesting of the 'pragma pack'
directives.
diff --git a/include/pshpack4.h b/include/pshpack4.h
index bc66f9f..eb0a805 100644
--- a/include/pshpack4.h
+++ b/include/pshpack4.h
@@ -1,15 +1,29 @@
-#ifndef __WINE_PSHPACK_H
-#define __WINE_PSHPACK_H 4
+#if defined(__WINE_PSHPACK_H3)
-#if defined(__GNUC__) || defined(__SUNPRO_CC)
-#pragma pack(4)
-#elif defined(__SUNPRO_C)
-#pragma pack()
-#elif !defined(RC_INVOKED)
-#error "4 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 4
+ /* Depth == 1 */
+# elif !defined(__WINE_PSHPACK_H2)
+# define __WINE_PSHPACK_H2 4
+ /* Depth == 2 */
+# define __WINE_INTERNAL_POPPACK
+# include "poppack.h"
+# elif !defined(__WINE_PSHPACK_H3)
+# define __WINE_PSHPACK_H3 4
+ /* Depth == 3 */
+# define __WINE_INTERNAL_POPPACK
+# include "poppack.h"
+# endif
+
+# if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+# pragma pack(4)
+# elif !defined(RC_INVOKED)
+# error "Adjusting the alignment is not supported with this compiler"
+# endif
+
+#endif