diff --git a/Modules/syslogmodule.c b/Modules/syslogmodule.c
index c6a3b36..5532d03 100644
--- a/Modules/syslogmodule.c
+++ b/Modules/syslogmodule.c
@@ -4,20 +4,20 @@
 
                         All Rights Reserved
 
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
 provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
+both that copyright notice and this permission notice appear in
 supporting documentation, and that the name of Lance Ellinghouse
-not be used in advertising or publicity pertaining to distribution 
+not be used in advertising or publicity pertaining to distribution
 of the software without specific, written prior permission.
 
 LANCE ELLINGHOUSE DISCLAIMS ALL WARRANTIES WITH REGARD TO
 THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS, IN NO EVENT SHALL LANCE ELLINGHOUSE BE LIABLE FOR ANY SPECIAL, 
-INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING 
-FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 
-NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 
+FITNESS, IN NO EVENT SHALL LANCE ELLINGHOUSE BE LIABLE FOR ANY SPECIAL,
+INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 ******************************************************************/
@@ -49,198 +49,198 @@
 #include <syslog.h>
 
 /*  only one instance, only one syslog, so globals should be ok  */
-static PyObject *S_ident_o = NULL;			/*  identifier, held by openlog()  */
+static PyObject *S_ident_o = NULL;                      /*  identifier, held by openlog()  */
 
 
-static PyObject * 
+static PyObject *
 syslog_openlog(PyObject * self, PyObject * args)
 {
-	long logopt = 0;
-	long facility = LOG_USER;
-	PyObject *new_S_ident_o;
-	const char *ident;
+    long logopt = 0;
+    long facility = LOG_USER;
+    PyObject *new_S_ident_o;
+    const char *ident;
 
-	if (!PyArg_ParseTuple(args,
-			      "U|ll;ident string [, logoption [, facility]]",
-			      &new_S_ident_o, &logopt, &facility))
-		return NULL;
+    if (!PyArg_ParseTuple(args,
+                          "U|ll;ident string [, logoption [, facility]]",
+                          &new_S_ident_o, &logopt, &facility))
+        return NULL;
 
-	/* This is needed because openlog() does NOT make a copy
-	 * and syslog() later uses it.. cannot trash it.
-	 */
-	Py_XDECREF(S_ident_o);
-	S_ident_o = new_S_ident_o;
-	Py_INCREF(S_ident_o);
+    /* This is needed because openlog() does NOT make a copy
+     * and syslog() later uses it.. cannot trash it.
+     */
+    Py_XDECREF(S_ident_o);
+    S_ident_o = new_S_ident_o;
+    Py_INCREF(S_ident_o);
 
-	ident = _PyUnicode_AsString(S_ident_o);
-	if (ident == NULL)
-		return NULL;
-	openlog(ident, logopt, facility);
+    ident = _PyUnicode_AsString(S_ident_o);
+    if (ident == NULL)
+        return NULL;
+    openlog(ident, logopt, facility);
 
-	Py_INCREF(Py_None);
-	return Py_None;
+    Py_INCREF(Py_None);
+    return Py_None;
 }
 
 
-static PyObject * 
+static PyObject *
 syslog_syslog(PyObject * self, PyObject * args)
 {
-	PyObject *message_object;
-	const char *message;
-	int   priority = LOG_INFO;
+    PyObject *message_object;
+    const char *message;
+    int   priority = LOG_INFO;
 
-	if (!PyArg_ParseTuple(args, "iU;[priority,] message string",
-			      &priority, &message_object)) {
-		PyErr_Clear();
-		if (!PyArg_ParseTuple(args, "U;[priority,] message string",
-				      &message_object))
-			return NULL;
-	}
+    if (!PyArg_ParseTuple(args, "iU;[priority,] message string",
+                          &priority, &message_object)) {
+        PyErr_Clear();
+        if (!PyArg_ParseTuple(args, "U;[priority,] message string",
+                              &message_object))
+            return NULL;
+    }
 
-	message = _PyUnicode_AsString(message_object);
-	if (message == NULL)
-		return NULL;
-	Py_BEGIN_ALLOW_THREADS;
-	syslog(priority, "%s", message);
-	Py_END_ALLOW_THREADS;
-	Py_RETURN_NONE;
+    message = _PyUnicode_AsString(message_object);
+    if (message == NULL)
+        return NULL;
+    Py_BEGIN_ALLOW_THREADS;
+    syslog(priority, "%s", message);
+    Py_END_ALLOW_THREADS;
+    Py_RETURN_NONE;
 }
 
-static PyObject * 
+static PyObject *
 syslog_closelog(PyObject *self, PyObject *unused)
 {
-	closelog();
-	Py_XDECREF(S_ident_o);
-	S_ident_o = NULL;
-	Py_INCREF(Py_None);
-	return Py_None;
+    closelog();
+    Py_XDECREF(S_ident_o);
+    S_ident_o = NULL;
+    Py_INCREF(Py_None);
+    return Py_None;
 }
 
-static PyObject * 
+static PyObject *
 syslog_setlogmask(PyObject *self, PyObject *args)
 {
-	long maskpri, omaskpri;
+    long maskpri, omaskpri;
 
-	if (!PyArg_ParseTuple(args, "l;mask for priority", &maskpri))
-		return NULL;
-	omaskpri = setlogmask(maskpri);
-	return PyLong_FromLong(omaskpri);
+    if (!PyArg_ParseTuple(args, "l;mask for priority", &maskpri))
+        return NULL;
+    omaskpri = setlogmask(maskpri);
+    return PyLong_FromLong(omaskpri);
 }
 
-static PyObject * 
+static PyObject *
 syslog_log_mask(PyObject *self, PyObject *args)
 {
-	long mask;
-	long pri;
-	if (!PyArg_ParseTuple(args, "l:LOG_MASK", &pri))
-		return NULL;
-	mask = LOG_MASK(pri);
-	return PyLong_FromLong(mask);
+    long mask;
+    long pri;
+    if (!PyArg_ParseTuple(args, "l:LOG_MASK", &pri))
+        return NULL;
+    mask = LOG_MASK(pri);
+    return PyLong_FromLong(mask);
 }
 
-static PyObject * 
+static PyObject *
 syslog_log_upto(PyObject *self, PyObject *args)
 {
-	long mask;
-	long pri;
-	if (!PyArg_ParseTuple(args, "l:LOG_UPTO", &pri))
-		return NULL;
-	mask = LOG_UPTO(pri);
-	return PyLong_FromLong(mask);
+    long mask;
+    long pri;
+    if (!PyArg_ParseTuple(args, "l:LOG_UPTO", &pri))
+        return NULL;
+    mask = LOG_UPTO(pri);
+    return PyLong_FromLong(mask);
 }
 
 /* List of functions defined in the module */
 
 static PyMethodDef syslog_methods[] = {
-	{"openlog",	syslog_openlog,		METH_VARARGS},
-	{"closelog",	syslog_closelog,	METH_NOARGS},
-	{"syslog",	syslog_syslog,		METH_VARARGS},
-	{"setlogmask",	syslog_setlogmask,	METH_VARARGS},
-	{"LOG_MASK",	syslog_log_mask,	METH_VARARGS},
-	{"LOG_UPTO",	syslog_log_upto,	METH_VARARGS},
-	{NULL,		NULL,			0}
+    {"openlog",         syslog_openlog,         METH_VARARGS},
+    {"closelog",        syslog_closelog,        METH_NOARGS},
+    {"syslog",          syslog_syslog,          METH_VARARGS},
+    {"setlogmask",      syslog_setlogmask,      METH_VARARGS},
+    {"LOG_MASK",        syslog_log_mask,        METH_VARARGS},
+    {"LOG_UPTO",        syslog_log_upto,        METH_VARARGS},
+    {NULL,              NULL,                   0}
 };
 
 /* Initialization function for the module */
 
 
 static struct PyModuleDef syslogmodule = {
-	PyModuleDef_HEAD_INIT,
-	"syslog",
-	NULL,
-	-1,
-	syslog_methods,
-	NULL,
-	NULL,
-	NULL,
-	NULL
+    PyModuleDef_HEAD_INIT,
+    "syslog",
+    NULL,
+    -1,
+    syslog_methods,
+    NULL,
+    NULL,
+    NULL,
+    NULL
 };
 
 PyMODINIT_FUNC
 PyInit_syslog(void)
 {
-	PyObject *m;
+    PyObject *m;
 
-	/* Create the module and add the functions */
-	m = PyModule_Create(&syslogmodule);
-	if (m == NULL)
-		return NULL;
+    /* Create the module and add the functions */
+    m = PyModule_Create(&syslogmodule);
+    if (m == NULL)
+        return NULL;
 
-	/* Add some symbolic constants to the module */
+    /* Add some symbolic constants to the module */
 
-	/* Priorities */
-	PyModule_AddIntConstant(m, "LOG_EMERG",	  LOG_EMERG);
-	PyModule_AddIntConstant(m, "LOG_ALERT",	  LOG_ALERT);
-	PyModule_AddIntConstant(m, "LOG_CRIT",	  LOG_CRIT);
-	PyModule_AddIntConstant(m, "LOG_ERR",	  LOG_ERR);
-	PyModule_AddIntConstant(m, "LOG_WARNING", LOG_WARNING);
-	PyModule_AddIntConstant(m, "LOG_NOTICE",  LOG_NOTICE);
-	PyModule_AddIntConstant(m, "LOG_INFO",	  LOG_INFO);
-	PyModule_AddIntConstant(m, "LOG_DEBUG",	  LOG_DEBUG);
+    /* Priorities */
+    PyModule_AddIntConstant(m, "LOG_EMERG",       LOG_EMERG);
+    PyModule_AddIntConstant(m, "LOG_ALERT",       LOG_ALERT);
+    PyModule_AddIntConstant(m, "LOG_CRIT",        LOG_CRIT);
+    PyModule_AddIntConstant(m, "LOG_ERR",         LOG_ERR);
+    PyModule_AddIntConstant(m, "LOG_WARNING", LOG_WARNING);
+    PyModule_AddIntConstant(m, "LOG_NOTICE",  LOG_NOTICE);
+    PyModule_AddIntConstant(m, "LOG_INFO",        LOG_INFO);
+    PyModule_AddIntConstant(m, "LOG_DEBUG",       LOG_DEBUG);
 
-	/* openlog() option flags */
-	PyModule_AddIntConstant(m, "LOG_PID",	  LOG_PID);
-	PyModule_AddIntConstant(m, "LOG_CONS",	  LOG_CONS);
-	PyModule_AddIntConstant(m, "LOG_NDELAY",  LOG_NDELAY);
+    /* openlog() option flags */
+    PyModule_AddIntConstant(m, "LOG_PID",         LOG_PID);
+    PyModule_AddIntConstant(m, "LOG_CONS",        LOG_CONS);
+    PyModule_AddIntConstant(m, "LOG_NDELAY",  LOG_NDELAY);
 #ifdef LOG_NOWAIT
-	PyModule_AddIntConstant(m, "LOG_NOWAIT",  LOG_NOWAIT);
+    PyModule_AddIntConstant(m, "LOG_NOWAIT",  LOG_NOWAIT);
 #endif
 #ifdef LOG_PERROR
-	PyModule_AddIntConstant(m, "LOG_PERROR",  LOG_PERROR);
+    PyModule_AddIntConstant(m, "LOG_PERROR",  LOG_PERROR);
 #endif
 
-	/* Facilities */
-	PyModule_AddIntConstant(m, "LOG_KERN",	  LOG_KERN);
-	PyModule_AddIntConstant(m, "LOG_USER",	  LOG_USER);
-	PyModule_AddIntConstant(m, "LOG_MAIL",	  LOG_MAIL);
-	PyModule_AddIntConstant(m, "LOG_DAEMON",  LOG_DAEMON);
-	PyModule_AddIntConstant(m, "LOG_AUTH",	  LOG_AUTH);
-	PyModule_AddIntConstant(m, "LOG_LPR",	  LOG_LPR);
-	PyModule_AddIntConstant(m, "LOG_LOCAL0",  LOG_LOCAL0);
-	PyModule_AddIntConstant(m, "LOG_LOCAL1",  LOG_LOCAL1);
-	PyModule_AddIntConstant(m, "LOG_LOCAL2",  LOG_LOCAL2);
-	PyModule_AddIntConstant(m, "LOG_LOCAL3",  LOG_LOCAL3);
-	PyModule_AddIntConstant(m, "LOG_LOCAL4",  LOG_LOCAL4);
-	PyModule_AddIntConstant(m, "LOG_LOCAL5",  LOG_LOCAL5);
-	PyModule_AddIntConstant(m, "LOG_LOCAL6",  LOG_LOCAL6);
-	PyModule_AddIntConstant(m, "LOG_LOCAL7",  LOG_LOCAL7);
+    /* Facilities */
+    PyModule_AddIntConstant(m, "LOG_KERN",        LOG_KERN);
+    PyModule_AddIntConstant(m, "LOG_USER",        LOG_USER);
+    PyModule_AddIntConstant(m, "LOG_MAIL",        LOG_MAIL);
+    PyModule_AddIntConstant(m, "LOG_DAEMON",  LOG_DAEMON);
+    PyModule_AddIntConstant(m, "LOG_AUTH",        LOG_AUTH);
+    PyModule_AddIntConstant(m, "LOG_LPR",         LOG_LPR);
+    PyModule_AddIntConstant(m, "LOG_LOCAL0",  LOG_LOCAL0);
+    PyModule_AddIntConstant(m, "LOG_LOCAL1",  LOG_LOCAL1);
+    PyModule_AddIntConstant(m, "LOG_LOCAL2",  LOG_LOCAL2);
+    PyModule_AddIntConstant(m, "LOG_LOCAL3",  LOG_LOCAL3);
+    PyModule_AddIntConstant(m, "LOG_LOCAL4",  LOG_LOCAL4);
+    PyModule_AddIntConstant(m, "LOG_LOCAL5",  LOG_LOCAL5);
+    PyModule_AddIntConstant(m, "LOG_LOCAL6",  LOG_LOCAL6);
+    PyModule_AddIntConstant(m, "LOG_LOCAL7",  LOG_LOCAL7);
 
 #ifndef LOG_SYSLOG
-#define LOG_SYSLOG		LOG_DAEMON
+#define LOG_SYSLOG              LOG_DAEMON
 #endif
 #ifndef LOG_NEWS
-#define LOG_NEWS		LOG_MAIL
+#define LOG_NEWS                LOG_MAIL
 #endif
 #ifndef LOG_UUCP
-#define LOG_UUCP		LOG_MAIL
+#define LOG_UUCP                LOG_MAIL
 #endif
 #ifndef LOG_CRON
-#define LOG_CRON		LOG_DAEMON
+#define LOG_CRON                LOG_DAEMON
 #endif
 
-	PyModule_AddIntConstant(m, "LOG_SYSLOG",  LOG_SYSLOG);
-	PyModule_AddIntConstant(m, "LOG_CRON",	  LOG_CRON);
-	PyModule_AddIntConstant(m, "LOG_UUCP",	  LOG_UUCP);
-	PyModule_AddIntConstant(m, "LOG_NEWS",	  LOG_NEWS);
-	return m;
+    PyModule_AddIntConstant(m, "LOG_SYSLOG",  LOG_SYSLOG);
+    PyModule_AddIntConstant(m, "LOG_CRON",        LOG_CRON);
+    PyModule_AddIntConstant(m, "LOG_UUCP",        LOG_UUCP);
+    PyModule_AddIntConstant(m, "LOG_NEWS",        LOG_NEWS);
+    return m;
 }
