Modified show_error() to allow sending of HTTP server response codes.

Added set_status_header() to the Common functions to allow use when the Output class is unavailable.

Fixed a bug where the 400 status header sent with the 'disallowed URI characters' was not compatible with CGI environments.
diff --git a/system/codeigniter/Common.php b/system/codeigniter/Common.php
index c7f9568..340be24 100644
--- a/system/codeigniter/Common.php
+++ b/system/codeigniter/Common.php
@@ -203,10 +203,10 @@
 * @access	public
 * @return	void
 */
-function show_error($message)
+function show_error($message, $status_code = 500)
 {
 	$error =& load_class('Exceptions');
-	echo $error->show_error('An Error Was Encountered', $message);
+	echo $error->show_error('An Error Was Encountered', $message, 'error_general', $status_code);
 	exit;
 }
 
@@ -252,6 +252,91 @@
 	$LOG->write_log($level, $message, $php_error);
 }
 
+
+/**
+ * Set HTTP Status Header
+ *
+ * @access	public
+ * @param	int 	the status code
+ * @param	string	
+ * @return	void
+ */
+function set_status_header($code = 200, $text = '')
+{
+	$stati = array(
+						200	=> 'OK',
+						201	=> 'Created',
+						202	=> 'Accepted',
+						203	=> 'Non-Authoritative Information',
+						204	=> 'No Content',
+						205	=> 'Reset Content',
+						206	=> 'Partial Content',
+
+						300	=> 'Multiple Choices',
+						301	=> 'Moved Permanently',
+						302	=> 'Found',
+						304	=> 'Not Modified',
+						305	=> 'Use Proxy',
+						307	=> 'Temporary Redirect',
+
+						400	=> 'Bad Request',
+						401	=> 'Unauthorized',
+						403	=> 'Forbidden',
+						404	=> 'Not Found',
+						405	=> 'Method Not Allowed',
+						406	=> 'Not Acceptable',
+						407	=> 'Proxy Authentication Required',
+						408	=> 'Request Timeout',
+						409	=> 'Conflict',
+						410	=> 'Gone',
+						411	=> 'Length Required',
+						412	=> 'Precondition Failed',
+						413	=> 'Request Entity Too Large',
+						414	=> 'Request-URI Too Long',
+						415	=> 'Unsupported Media Type',
+						416	=> 'Requested Range Not Satisfiable',
+						417	=> 'Expectation Failed',
+
+						500	=> 'Internal Server Error',
+						501	=> 'Not Implemented',
+						502	=> 'Bad Gateway',
+						503	=> 'Service Unavailable',
+						504	=> 'Gateway Timeout',
+						505	=> 'HTTP Version Not Supported'
+					);
+
+	if ($code == '' OR ! is_numeric($code))
+	{
+		show_error('Status codes must be numeric', 500);
+	}
+
+	if (isset($stati[$code]) AND $text == '')
+	{				
+		$text = $stati[$code];
+	}
+	
+	if ($text == '')
+	{
+		show_error('No status text available.  Please check your status code number or supply your own message text.', 500);
+	}
+	
+	$server_protocol = (isset($_SERVER['SERVER_PROTOCOL'])) ? $_SERVER['SERVER_PROTOCOL'] : FALSE;
+
+	if (substr(php_sapi_name(), 0, 3) == 'cgi')
+	{
+		header("Status: {$code} {$text}", TRUE);
+	}
+	elseif ($server_protocol == 'HTTP/1.1' OR $server_protocol == 'HTTP/1.0')
+	{
+		header($server_protocol." {$code} {$text}", TRUE, $code);
+	}
+	else
+	{
+		header("HTTP/1.1 {$code} {$text}", TRUE, $code);
+	}
+}
+
+
 /**
 * Exception Handler
 *