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