diff --git a/Modules/bz2module.c b/Modules/bz2module.c
index 62e550d..51d07e6 100644
--- a/Modules/bz2module.c
+++ b/Modules/bz2module.c
@@ -36,7 +36,7 @@
 	(((long)bzs->total_out_hi32 << 32) + bzs->total_out_lo32)
 #elif SIZEOF_LONG_LONG >= 8
 #define BZS_TOTAL_OUT(bzs) \
-	(((long long)bzs->total_out_hi32 << 32) + bzs->total_out_lo32)
+	(((LONG_LONG)bzs->total_out_hi32 << 32) + bzs->total_out_lo32)
 #else
 #define BZS_TOTAL_OUT(bzs) \
 	bzs->total_out_lo32;
@@ -109,14 +109,14 @@
 					"correctly");
 			ret = 1;
 			break;
-			
+
 		case BZ_PARAM_ERROR:
 			PyErr_SetString(PyExc_ValueError,
 					"the bz2 library has received wrong "
 					"parameters");
 			ret = 1;
 			break;
-			
+
 		case BZ_MEM_ERROR:
 			PyErr_NoMemory();
 			ret = 1;
@@ -214,8 +214,8 @@
 				if (skipnextlf) {
 					skipnextlf = 0;
 					if (c == '\n') {
-						/* Seeing a \n here with 
-						 * skipnextlf true means we 
+						/* Seeing a \n here with
+						 * skipnextlf true means we
 						 * saw a \r before.
 						 */
 						newlinetypes |= NEWLINE_CRLF;
@@ -377,7 +377,7 @@
 	PyFileObject *f = (PyFileObject*)self;
 
 	if (f->f_buf != NULL) {
-		if((f->f_bufend - f->f_bufptr) >= 1) 
+		if((f->f_bufend - f->f_bufptr) >= 1)
 			return 0;
 		else
 			Util_DropReadAhead(self);
@@ -418,11 +418,11 @@
 	int len;
 
 	if (f->f_buf == NULL)
-		if (Util_ReadAhead(bf, bufsize) < 0) 
+		if (Util_ReadAhead(bf, bufsize) < 0)
 			return NULL;
 
 	len = f->f_bufend - f->f_bufptr;
-	if (len == 0) 
+	if (len == 0)
 		return (PyStringObject *)
 			PyString_FromStringAndSize(NULL, skip);
 	bufptr = memchr(f->f_bufptr, '\n', len);
@@ -431,7 +431,7 @@
 		len = bufptr - f->f_bufptr;
 		s = (PyStringObject *)
 			PyString_FromStringAndSize(NULL, skip+len);
-		if (s == NULL) 
+		if (s == NULL)
 			return NULL;
 		memcpy(PyString_AS_STRING(s)+skip, f->f_bufptr, len);
 		f->f_bufptr = bufptr;
@@ -471,10 +471,10 @@
 	size_t bytesread, buffersize, chunksize;
 	int bzerror;
 	PyObject *ret = NULL;
-	
+
 	if (!PyArg_ParseTuple(args, "|l:read", &bytesrequested))
 		return NULL;
-	
+
 	ACQUIRE_LOCK(self);
 	switch (self->mode) {
 		case MODE_READ:
@@ -761,17 +761,17 @@
 
 	if (!PyArg_ParseTuple(args, "s#", &buf, &len))
 		return NULL;
-	
+
 	ACQUIRE_LOCK(self);
 	switch (self->mode) {
 		case MODE_WRITE:
 			break;
-	
+
 		case MODE_CLOSED:
 			PyErr_SetString(PyExc_ValueError,
 					"I/O operation on closed file");
 			goto cleanup;;
-		
+
 		default:
 			PyErr_SetString(PyExc_IOError,
 					"file is not ready for writing");
@@ -784,12 +784,12 @@
 	BZ2_bzWrite (&bzerror, self->fp, buf, len);
 	self->pos += len;
 	Py_END_ALLOW_THREADS
-	
+
 	if (bzerror != BZ_OK) {
 		Util_CatchBZ2Error(bzerror);
 		goto cleanup;
 	}
-	
+
 	Py_INCREF(Py_None);
 	ret = Py_None;
 
@@ -945,7 +945,7 @@
 	int rewind = 0;
 	PyObject *func;
 	PyObject *ret = NULL;
-	
+
 	if (!PyArg_ParseTuple(args, "l|i:seek", &offset, &where))
 		return NULL;
 
@@ -955,12 +955,12 @@
 		case MODE_READ:
 		case MODE_READ_EOF:
 			break;
-	
+
 		case MODE_CLOSED:
 			PyErr_SetString(PyExc_ValueError,
 					"I/O operation on closed file");
 			goto cleanup;;
-		
+
 		default:
 			PyErr_SetString(PyExc_IOError,
 					"seek works only while reading");
@@ -1192,7 +1192,7 @@
 	int univ_newline = 0;
 
 	self->size = -1;
-	
+
 	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "et|sii:BZ2File",
 					 kwlist, Py_FileSystemDefaultEncoding,
 					 &name, &mode, &buffering,
@@ -1240,7 +1240,7 @@
 		mode = univ_newline ? "rbU" : "rb";
 	else
 		mode = univ_newline ? "wbU" : "wb";
-	
+
 	file_args = Py_BuildValue("(ssi)", name, mode, buffering);
 	if (!file_args)
 		return -1;
@@ -1952,7 +1952,7 @@
 		Py_DECREF(ret);
 		return NULL;
 	}
-	
+
 	for (;;) {
 		Py_BEGIN_ALLOW_THREADS
 		bzerror = BZ2_bzCompress(bzs, BZ_FINISH);
@@ -2025,7 +2025,7 @@
 		Py_DECREF(ret);
 		return NULL;
 	}
-	
+
 	for (;;) {
 		Py_BEGIN_ALLOW_THREADS
 		bzerror = BZ2_bzDecompress(bzs);
