Diff for /embedaddon/php/sapi/cli/php_cli_server.c between versions 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2013/07/22 01:32:13 version 1.1.1.3, 2013/10/14 08:02:45
Line 20 Line 20
 /* $Id$ */  /* $Id$ */
   
 #include <stdio.h>  #include <stdio.h>
   #include <stdlib.h>
 #include <fcntl.h>  #include <fcntl.h>
 #include <assert.h>  #include <assert.h>
   
Line 192  typedef struct php_cli_server { Line 193  typedef struct php_cli_server {
         HashTable clients;          HashTable clients;
 } php_cli_server;  } php_cli_server;
   
typedef struct php_cli_server_http_reponse_status_code_pair {typedef struct php_cli_server_http_response_status_code_pair {
         int code;          int code;
         const char *str;          const char *str;
} php_cli_server_http_reponse_status_code_pair;} php_cli_server_http_response_status_code_pair;
   
 typedef struct php_cli_server_ext_mime_type_pair {  typedef struct php_cli_server_ext_mime_type_pair {
         const char *ext;          const char *ext;
         const char *mime_type;          const char *mime_type;
 } php_cli_server_ext_mime_type_pair;  } php_cli_server_ext_mime_type_pair;
   
static php_cli_server_http_reponse_status_code_pair status_map[] = {static php_cli_server_http_response_status_code_pair status_map[] = {
         { 100, "Continue" },          { 100, "Continue" },
         { 101, "Switching Protocols" },          { 101, "Switching Protocols" },
         { 200, "OK" },          { 200, "OK" },
Line 249  static php_cli_server_http_reponse_status_code_pair st Line 250  static php_cli_server_http_reponse_status_code_pair st
         { 511, "Network Authentication Required" },          { 511, "Network Authentication Required" },
 };  };
   
static php_cli_server_http_reponse_status_code_pair template_map[] = {static php_cli_server_http_response_status_code_pair template_map[] = {
         { 400, "<h1>%s</h1><p>Your browser sent a request that this server could not understand.</p>" },          { 400, "<h1>%s</h1><p>Your browser sent a request that this server could not understand.</p>" },
         { 404, "<h1>%s</h1><p>The requested resource %s was not found on this server.</p>" },          { 404, "<h1>%s</h1><p>The requested resource %s was not found on this server.</p>" },
         { 500, "<h1>%s</h1><p>The server is temporarily unavailable.</p>" },          { 500, "<h1>%s</h1><p>The server is temporarily unavailable.</p>" },
Line 333  static char *get_last_error() /* {{{ */ Line 334  static char *get_last_error() /* {{{ */
         return pestrdup(strerror(errno), 1);          return pestrdup(strerror(errno), 1);
 } /* }}} */  } /* }}} */
   
   static int status_comp(const void *a, const void *b) /* {{{ */
   {
           const php_cli_server_http_response_status_code_pair *pa = (const php_cli_server_http_response_status_code_pair *) a;
           const php_cli_server_http_response_status_code_pair *pb = (const php_cli_server_http_response_status_code_pair *) b;
   
           if (pa->code < pb->code) {
                   return -1;
           } else if (pa->code > pb->code) {
                   return 1;
           }
   
           return 0;
   } /* }}} */
   
 static const char *get_status_string(int code) /* {{{ */  static const char *get_status_string(int code) /* {{{ */
 {  {
        size_t e = (sizeof(status_map) / sizeof(php_cli_server_http_reponse_status_code_pair));        php_cli_server_http_response_status_code_pair needle, *result = NULL;
        size_t s = 0; 
   
        while (e != s) {        needle.code = code;
                size_t c = MIN((e + s + 1) / 2, e - 1);        needle.str = NULL;
                int d = status_map[c].code;
                if (d > code) {        result = bsearch(&needle, status_map, sizeof(status_map) / sizeof(needle), sizeof(needle), status_comp);
                        e = c;
                } else if (d < code) {        if (result) {
                        s = c;                return result->str;
                } else { 
                        return status_map[c].str; 
                } 
         }          }
        return NULL;
         /* Returning NULL would require complicating append_http_status_line() to
          * not segfault in that case, so let's just return a placeholder, since RFC
          * 2616 requires a reason phrase. This is basically what a lot of other Web
          * servers do in this case anyway. */
         return "Unknown Status Code";
 } /* }}} */  } /* }}} */
   
 static const char *get_template_string(int code) /* {{{ */  static const char *get_template_string(int code) /* {{{ */
 {  {
        size_t e = (sizeof(template_map) / sizeof(php_cli_server_http_reponse_status_code_pair));        size_t e = (sizeof(template_map) / sizeof(php_cli_server_http_response_status_code_pair));
         size_t s = 0;          size_t s = 0;
   
         while (e != s) {          while (e != s) {
Line 1309  static void php_cli_server_request_translate_vpath(php Line 1325  static void php_cli_server_request_translate_vpath(php
         static const char *index_files[] = { "index.php", "index.html", NULL };          static const char *index_files[] = { "index.php", "index.html", NULL };
         char *buf = safe_pemalloc(1, request->vpath_len, 1 + document_root_len + 1 + sizeof("index.html"), 1);          char *buf = safe_pemalloc(1, request->vpath_len, 1 + document_root_len + 1 + sizeof("index.html"), 1);
         char *p = buf, *prev_path = NULL, *q, *vpath;          char *p = buf, *prev_path = NULL, *q, *vpath;
        size_t prev_path_len;        size_t prev_path_len = 0;
         int  is_static_file = 0;          int  is_static_file = 0;
   
         if (!buf) {          if (!buf) {

Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>