Fix to bug #393 (UTF16 codec didn't like empty strings) and
corrected some usage of 'unsigned long' where Py_UNICODE
should have been used.
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 052a489b..e94cef2 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -953,14 +953,13 @@
 			sizeof(Py_UNICODE) * (size + (byteorder == 0)));
     if (v == NULL)
         return NULL;
-    if (size == 0)
-        goto done;
 
     q = PyString_AS_STRING(v);
     p = (Py_UNICODE *)q;
-    
     if (byteorder == 0)
 	*p++ = 0xFEFF;
+    if (size == 0)
+        goto done;
     if (byteorder == 0 ||
 #ifdef BYTEORDER_IS_LITTLE_ENDIAN	
 	byteorder == -1
@@ -994,7 +993,7 @@
 
 static
 int unicodeescape_decoding_error(const char **source,
-                                 unsigned long *x,
+                                 Py_UNICODE *x,
                                  const char *errors,
                                  const char *details) 
 {
@@ -1009,7 +1008,7 @@
         return 0;
     }
     else if (strcmp(errors,"replace") == 0) {
-        *x = (unsigned long)Py_UNICODE_REPLACEMENT_CHARACTER;
+        *x = Py_UNICODE_REPLACEMENT_CHARACTER;
         return 0;
     }
     else {
@@ -1063,7 +1062,7 @@
     end = s + size;
     while (s < end) {
         unsigned char c;
-        unsigned long x;
+        Py_UNICODE x;
         int i;
 
         /* Non-escape characters are interpreted as Unicode ordinals */
@@ -1372,7 +1371,7 @@
     end = s + size;
     while (s < end) {
 	unsigned char c;
-	unsigned long x;
+	Py_UNICODE x;
 	int i;
 
 	/* Non-escape characters are interpreted as Unicode ordinals */