Michael Hudson <mwh21@cam.ac.uk>:
Removed PyErr_BadArgument() calls and replaced them with more useful
error messages.
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 1ca3826..20efb0e 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1562,8 +1562,7 @@
 		getitem = PyTuple_GetItem;
 	}
 	else {
- badarg:
-		PyErr_BadArgument();
+		PyErr_SetString(PyExc_TypeError, "argv must be tuple or list");
 		return NULL;
 	}
 
@@ -1573,7 +1572,9 @@
 	for (i = 0; i < argc; i++) {
 		if (!PyArg_Parse((*getitem)(argv, i), "s", &argvlist[i])) {
 			PyMem_DEL(argvlist);
-			goto badarg;
+			PyErr_SetString(PyExc_TypeError, 
+					"all arguments must be strings");
+			return NULL;
 		}
 	}
 	argvlist[argc] = NULL;