Unsigned 1 and 2 byte sized formats shouldn't result in long integer values!
diff --git a/Modules/structmodule.c b/Modules/structmodule.c
index d837e02..af8f1e5 100644
--- a/Modules/structmodule.c
+++ b/Modules/structmodule.c
@@ -694,7 +694,10 @@
 	do {
 		x = (x<<8) | (*p++ & 0xFF);
 	} while (--i > 0);
-	return PyLong_FromUnsignedLong(x);
+	if (f->size >= 4)
+		return PyLong_FromUnsignedLong(x);
+	else
+		return PyInt_FromLong((long)x);
 }
 
 static PyObject *
@@ -825,7 +828,10 @@
 	do {
 		x = (x<<8) | (p[--i] & 0xFF);
 	} while (i > 0);
-	return PyLong_FromUnsignedLong(x);
+	if (f->size >= 4)
+		return PyLong_FromUnsignedLong(x);
+	else
+		return PyInt_FromLong((long)x);
 }
 
 static PyObject *