Bug #1005737, #1007249: Fix several build problems and warnings
found on legacy C compilers of HP-UX, IRIX and Tru64.  (Reported
by roadkill, Richard Townsend, Maik Hertha and Minsik Kim)
diff --git a/Modules/cjkcodecs/README b/Modules/cjkcodecs/README
index a62aa70..0245629 100644
--- a/Modules/cjkcodecs/README
+++ b/Modules/cjkcodecs/README
@@ -2,7 +2,7 @@
 -------------------
 This directory contains source files for cjkcodecs extension modules.
 They are based on CJKCodecs (http://cjkpython.i18n.org/#CJKCodecs)
-as of Jul 18 2004 currently.
+as of Aug 20 2004 currently.
 
 
 
diff --git a/Modules/cjkcodecs/_codecs_hk.c b/Modules/cjkcodecs/_codecs_hk.c
index 9daa87f..8744167 100644
--- a/Modules/cjkcodecs/_codecs_hk.c
+++ b/Modules/cjkcodecs/_codecs_hk.c
@@ -2,7 +2,7 @@
  * _codecs_hk.c: Codecs collection for encodings from Hong Kong
  *
  * Written by Hye-Shik Chang <perky@FreeBSD.org>
- * $CJKCodecs: _codecs_hk.c,v 1.3 2004/07/07 14:59:26 perky Exp $
+ * $CJKCodecs: _codecs_hk.c,v 1.4 2004/07/18 04:44:27 perky Exp $
  */
 
 #define USING_IMPORTED_MAPS
diff --git a/Modules/cjkcodecs/_codecs_iso2022.c b/Modules/cjkcodecs/_codecs_iso2022.c
index bef11df..5cee8ce 100644
--- a/Modules/cjkcodecs/_codecs_iso2022.c
+++ b/Modules/cjkcodecs/_codecs_iso2022.c
@@ -2,7 +2,7 @@
  * _codecs_iso2022.c: Codecs collection for ISO-2022 encodings.
  *
  * Written by Hye-Shik Chang <perky@FreeBSD.org>
- * $CJKCodecs: _codecs_iso2022.c,v 1.18 2004/07/07 18:30:17 perky Exp $
+ * $CJKCodecs: _codecs_iso2022.c,v 1.22 2004/08/19 17:08:13 perky Exp $
  */
 
 #define USING_IMPORTED_MAPS
@@ -117,7 +117,7 @@
 
 struct iso2022_config {
 	int flags;
-	const struct iso2022_designation designations[]; /* non-ascii desigs */
+	const struct iso2022_designation *designations; /* non-ascii desigs */
 };
 
 /*-*- iso-2022 codec implementation -*-*/
@@ -197,7 +197,9 @@
 					length = 2;
 #if Py_UNICODE_SIZE == 2
 				if (length == 2) {
-					ucs4_t u4in[2] = {IN1, IN2};
+					ucs4_t u4in[2];
+					u4in[0] = (ucs4_t)IN1;
+					u4in[1] = (ucs4_t)IN2;
 					encoded = dsg->encoder(u4in, &length);
 				} else
 					encoded = dsg->encoder(&c, &length);
@@ -420,7 +422,7 @@
 DECODER(iso2022)
 {
 	const struct iso2022_designation *dsgcache = NULL;
-	
+
 	while (inleft > 0) {
 		unsigned char c = IN1;
 		int err;
@@ -1047,50 +1049,52 @@
 #define REGISTRY_ISO8859_7	{ CHARSET_ISO8859_7, 2, 1,		\
 				  NULL, dummy_decoder, dummy_encoder }
 #define REGISTRY_SENTINEL	{ 0, }
+#define CONFIGDEF(var, attrs)						\
+	static const struct iso2022_config iso2022_##var##_config = {	\
+		attrs, iso2022_##var##_designations			\
+	};
 
-static const struct iso2022_config iso2022_kr_config = {
-	0,
-	{ REGISTRY_KSX1001, REGISTRY_SENTINEL },
+static const struct iso2022_designation iso2022_kr_designations[] = {
+	REGISTRY_KSX1001, REGISTRY_SENTINEL
 };
+CONFIGDEF(kr, 0)
 
-static const struct iso2022_config iso2022_jp_config = {
-	NO_SHIFT | USE_JISX0208_EXT,
-	{ REGISTRY_JISX0208, REGISTRY_JISX0201_R, REGISTRY_JISX0208_O,
-	  REGISTRY_SENTINEL },
+static const struct iso2022_designation iso2022_jp_designations[] = {
+	REGISTRY_JISX0208, REGISTRY_JISX0201_R, REGISTRY_JISX0208_O,
+	REGISTRY_SENTINEL
 };
+CONFIGDEF(jp, NO_SHIFT | USE_JISX0208_EXT)
 
-static const struct iso2022_config iso2022_jp_1_config = {
-	NO_SHIFT | USE_JISX0208_EXT,
-	{ REGISTRY_JISX0208, REGISTRY_JISX0212, REGISTRY_JISX0201_R,
-	  REGISTRY_JISX0208_O, REGISTRY_SENTINEL },
+static const struct iso2022_designation iso2022_jp_1_designations[] = {
+	REGISTRY_JISX0208, REGISTRY_JISX0212, REGISTRY_JISX0201_R,
+	REGISTRY_JISX0208_O, REGISTRY_SENTINEL
 };
+CONFIGDEF(jp_1, NO_SHIFT | USE_JISX0208_EXT)
 
-static const struct iso2022_config iso2022_jp_2_config = {
-	NO_SHIFT | USE_G2 | USE_JISX0208_EXT,
-	{ REGISTRY_JISX0208, REGISTRY_JISX0212, REGISTRY_KSX1001,
-	  REGISTRY_GB2312, REGISTRY_JISX0201_R, REGISTRY_JISX0208_O,
-	  REGISTRY_ISO8859_1, REGISTRY_ISO8859_7, REGISTRY_SENTINEL },
+static const struct iso2022_designation iso2022_jp_2_designations[] = {
+	REGISTRY_JISX0208, REGISTRY_JISX0212, REGISTRY_KSX1001,
+	REGISTRY_GB2312, REGISTRY_JISX0201_R, REGISTRY_JISX0208_O,
+	REGISTRY_ISO8859_1, REGISTRY_ISO8859_7, REGISTRY_SENTINEL
 };
+CONFIGDEF(jp_2, NO_SHIFT | USE_G2 | USE_JISX0208_EXT)
 
-static const struct iso2022_config iso2022_jp_2004_config = {
-	NO_SHIFT | USE_G2 | USE_JISX0208_EXT,
-	{ REGISTRY_JISX0213_2004_1_PAIRONLY, REGISTRY_JISX0208,
-	  REGISTRY_JISX0213_2004_1, REGISTRY_JISX0213_2004_2,
-	  REGISTRY_SENTINEL },
+static const struct iso2022_designation iso2022_jp_2004_designations[] = {
+	REGISTRY_JISX0213_2004_1_PAIRONLY, REGISTRY_JISX0208,
+	REGISTRY_JISX0213_2004_1, REGISTRY_JISX0213_2004_2, REGISTRY_SENTINEL
 };
+CONFIGDEF(jp_2004, NO_SHIFT | USE_JISX0208_EXT)
 
-static const struct iso2022_config iso2022_jp_3_config = {
-	NO_SHIFT | USE_JISX0208_EXT,
-	{ REGISTRY_JISX0213_2000_1_PAIRONLY, REGISTRY_JISX0208,
-	  REGISTRY_JISX0213_2000_1, REGISTRY_JISX0213_2000_2,
-	  REGISTRY_SENTINEL },
+static const struct iso2022_designation iso2022_jp_3_designations[] = {
+	REGISTRY_JISX0213_2000_1_PAIRONLY, REGISTRY_JISX0208,
+	REGISTRY_JISX0213_2000_1, REGISTRY_JISX0213_2000_2, REGISTRY_SENTINEL
 };
+CONFIGDEF(jp_3, NO_SHIFT | USE_JISX0208_EXT)
 
-static const struct iso2022_config iso2022_jp_ext_config = {
-	NO_SHIFT | USE_JISX0208_EXT,
-	{ REGISTRY_JISX0208, REGISTRY_JISX0212, REGISTRY_JISX0201_R,
-	  REGISTRY_JISX0201_K, REGISTRY_JISX0208_O, REGISTRY_SENTINEL },
+static const struct iso2022_designation iso2022_jp_ext_designations[] = {
+	REGISTRY_JISX0208, REGISTRY_JISX0212, REGISTRY_JISX0201_R,
+	REGISTRY_JISX0201_K, REGISTRY_JISX0208_O, REGISTRY_SENTINEL
 };
+CONFIGDEF(jp_ext, NO_SHIFT | USE_JISX0208_EXT)
 
 
 BEGIN_MAPPINGS_LIST
diff --git a/Modules/cjkcodecs/cjkcodecs.h b/Modules/cjkcodecs/cjkcodecs.h
index 7d7ad81..32ac144 100644
--- a/Modules/cjkcodecs/cjkcodecs.h
+++ b/Modules/cjkcodecs/cjkcodecs.h
@@ -2,7 +2,7 @@
  * cjkcodecs.h: common header for cjkcodecs
  *
  * Written by Hye-Shik Chang <perky@FreeBSD.org>
- * $CJKCodecs: cjkcodecs.h,v 1.5 2004/07/06 17:05:24 perky Exp $
+ * $CJKCodecs: cjkcodecs.h,v 1.6 2004/07/18 15:22:31 perky Exp $
  */
 
 #ifndef _CJKCODECS_H_
@@ -230,7 +230,7 @@
 },
 #define END_CODECS_LIST					\
 	{"", NULL,} };					\
-	static const MultibyteCodec *codec_list = 	\
+	static const MultibyteCodec *codec_list =	\
 		(const MultibyteCodec *)_codec_list;
 
 static PyObject *
diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c
index 58b16a3..4444941 100644
--- a/Modules/cjkcodecs/multibytecodec.c
+++ b/Modules/cjkcodecs/multibytecodec.c
@@ -2,7 +2,7 @@
  * multibytecodec.c: Common Multibyte Codec Implementation
  *
  * Written by Hye-Shik Chang <perky@FreeBSD.org>
- * $CJKCodecs: multibytecodec.c,v 1.12 2004/06/27 19:24:13 perky Exp $
+ * $CJKCodecs: multibytecodec.c,v 1.13 2004/08/19 16:57:19 perky Exp $
  */
 
 #include "Python.h"
@@ -338,7 +338,7 @@
 	/* use cached exception object if available */
 	if (buf->excobj == NULL) {
 		buf->excobj = PyUnicodeDecodeError_Create(codec->encoding,
-				buf->inbuf_top,
+				(const char *)buf->inbuf_top,
 				(int)(buf->inbuf_end - buf->inbuf_top),
 				start, end, reason);
 		if (buf->excobj == NULL)
@@ -965,7 +965,7 @@
 		      PyObject *unistr)
 {
 	PyObject *wr, *ucvt, *r = NULL;
-	Py_UNICODE *inbuf, *inbuf_end, *data, *inbuf_tmp = NULL;
+	Py_UNICODE *inbuf, *inbuf_end, *inbuf_tmp = NULL;
 	int datalen;
 
 	if (PyUnicode_Check(unistr))
@@ -982,7 +982,6 @@
 		}
 	}
 
-	data = PyUnicode_AS_UNICODE(unistr);
 	datalen = PyUnicode_GET_SIZE(unistr);
 	if (datalen == 0) {
 		Py_XDECREF(ucvt);