소스 검색

Merge pull request #27 from tzimmofsecure/master

Use C style comments to enable compiling most of civetweb with -ansi. That was a lot of comment changing!
sunsetbrew 11 년 전
부모
커밋
29ee3e1f2b
3개의 변경된 파일627개의 추가작업 그리고 601개의 파일을 삭제
  1. 315 305
      include/civetweb.h
  2. 227 214
      src/civetweb.c
  3. 85 82
      src/main.c

+ 315 - 305
include/civetweb.h

@@ -1,22 +1,23 @@
-// Copyright (c) 2004-2013 Sergey Lyubka
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
+/* Copyright (c) 2004-2013 Sergey Lyubka
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
 
 #ifndef CIVETWEB_HEADER_INCLUDED
 #define CIVETWEB_HEADER_INCLUDED
@@ -26,247 +27,254 @@
 
 #ifdef __cplusplus
 extern "C" {
-#endif // __cplusplus
+#endif /* __cplusplus */
 
-struct mg_context;     // Handle for the HTTP service itself
-struct mg_connection;  // Handle for the individual connection
+struct mg_context;     /* Handle for the HTTP service itself */
+struct mg_connection;  /* Handle for the individual connection */
 
 
-// This structure contains information about the HTTP request.
+/* This structure contains information about the HTTP request. */
 struct mg_request_info {
-    const char *request_method; // "GET", "POST", etc
-    const char *uri;            // URL-decoded URI
-    const char *http_version;   // E.g. "1.0", "1.1"
-    const char *query_string;   // URL part after '?', not including '?', or NULL
-    const char *remote_user;    // Authenticated user, or NULL if no auth used
-    long remote_ip;             // Client's IP address
-    int remote_port;            // Client's port
-    int is_ssl;                 // 1 if SSL-ed, 0 if not
-    void *user_data;            // User data pointer passed to mg_start()
-    void *conn_data;            // Connection-specific user data
-
-    int num_headers;            // Number of HTTP headers
+    const char *request_method; /* "GET", "POST", etc */
+    const char *uri;            /* URL-decoded URI */
+    const char *http_version;   /* E.g. "1.0", "1.1" */
+    const char *query_string;   /* URL part after '?', not including '?', or
+                                   NULL */
+    const char *remote_user;    /* Authenticated user, or NULL if no auth
+                                   used */
+    long remote_ip;             /* Client's IP address */
+    int remote_port;            /* Client's port */
+    int is_ssl;                 /* 1 if SSL-ed, 0 if not */
+    void *user_data;            /* User data pointer passed to mg_start() */
+    void *conn_data;            /* Connection-specific user data */
+
+    int num_headers;            /* Number of HTTP headers */
     struct mg_header {
-        const char *name;         // HTTP header name
-        const char *value;        // HTTP header value
-    } http_headers[64];         // Maximum 64 headers
+        const char *name;       /* HTTP header name */
+        const char *value;      /* HTTP header value */
+    } http_headers[64];         /* Maximum 64 headers */
 };
 
 
-// This structure needs to be passed to mg_start(), to let civetweb know
-// which callbacks to invoke. For detailed description, see
-// https://github.com/sunsetbrew/civetweb/blob/master/docs/UserManual.md
+/* This structure needs to be passed to mg_start(), to let civetweb know
+   which callbacks to invoke. For detailed description, see
+   https://github.com/sunsetbrew/civetweb/blob/master/docs/UserManual.md */
 struct mg_callbacks {
-    // Called when civetweb has received new HTTP request.
-    // If callback returns non-zero,
-    // callback must process the request by sending valid HTTP headers and body,
-    // and civetweb will not do any further processing.
-    // If callback returns 0, civetweb processes the request itself. In this case,
-    // callback must not send any data to the client.
+    /* Called when civetweb has received new HTTP request.
+       If callback returns non-zero,
+       callback must process the request by sending valid HTTP headers and
+       body, and civetweb will not do any further processing.
+       If callback returns 0, civetweb processes the request itself. In this
+       case, callback must not send any data to the client. */
     int  (*begin_request)(struct mg_connection *);
 
-    // Called when civetweb has finished processing request.
+    /* Called when civetweb has finished processing request. */
     void (*end_request)(const struct mg_connection *, int reply_status_code);
 
-    // Called when civetweb is about to log a message. If callback returns
-    // non-zero, civetweb does not log anything.
+    /* Called when civetweb is about to log a message. If callback returns
+       non-zero, civetweb does not log anything. */
     int  (*log_message)(const struct mg_connection *, const char *message);
 
-    // Called when civetweb initializes SSL library.
+    /* Called when civetweb initializes SSL library. */
     int  (*init_ssl)(void *ssl_context, void *user_data);
 
-    // Called when websocket request is received, before websocket handshake.
-    // If callback returns 0, civetweb proceeds with handshake, otherwise
-    // cinnection is closed immediately.
+    /* Called when websocket request is received, before websocket handshake.
+       If callback returns 0, civetweb proceeds with handshake, otherwise
+       cinnection is closed immediately. */
     int (*websocket_connect)(const struct mg_connection *);
 
-    // Called when websocket handshake is successfully completed, and
-    // connection is ready for data exchange.
+    /* Called when websocket handshake is successfully completed, and
+       connection is ready for data exchange. */
     void (*websocket_ready)(struct mg_connection *);
 
-    // Called when data frame has been received from the client.
-    // Parameters:
-    //    bits: first byte of the websocket frame, see websocket RFC at
-    //          http://tools.ietf.org/html/rfc6455, section 5.2
-    //    data, data_len: payload, with mask (if any) already applied.
-    // Return value:
-    //    non-0: keep this websocket connection opened.
-    //    0:     close this websocket connection.
+    /* Called when data frame has been received from the client.
+       Parameters:
+          bits: first byte of the websocket frame, see websocket RFC at
+                http://tools.ietf.org/html/rfc6455, section 5.2
+          data, data_len: payload, with mask (if any) already applied.
+       Return value:
+          non-0: keep this websocket connection opened.
+          0:     close this websocket connection. */
     int  (*websocket_data)(struct mg_connection *, int bits,
                            char *data, size_t data_len);
 
-    // Called when civetweb is closing a connection.  The per-context mutex is locked when this
-    // is invoked.  This is primarily useful for noting when a websocket is closing and removing it
-    // from any application-maintained list of clients.
+    /* Called when civetweb is closing a connection.  The per-context mutex is
+       locked when this is invoked.  This is primarily useful for noting when
+       a websocket is closing and removing it from any application-maintained
+       list of clients. */
     void (*connection_close)(struct mg_connection *);
 
-    // Called when civetweb tries to open a file. Used to intercept file open
-    // calls, and serve file data from memory instead.
-    // Parameters:
-    //    path:     Full path to the file to open.
-    //    data_len: Placeholder for the file size, if file is served from memory.
-    // Return value:
-    //    NULL: do not serve file from memory, proceed with normal file open.
-    //    non-NULL: pointer to the file contents in memory. data_len must be
-    //              initilized with the size of the memory block.
+    /* Called when civetweb tries to open a file. Used to intercept file open
+       calls, and serve file data from memory instead.
+       Parameters:
+          path:     Full path to the file to open.
+          data_len: Placeholder for the file size, if file is served from
+                    memory.
+       Return value:
+          NULL: do not serve file from memory, proceed with normal file open.
+          non-NULL: pointer to the file contents in memory. data_len must be
+          initilized with the size of the memory block. */
     const char * (*open_file)(const struct mg_connection *,
                               const char *path, size_t *data_len);
 
-    // Called when civetweb is about to serve Lua server page (.lp file), if
-    // Lua support is enabled.
-    // Parameters:
-    //   lua_context: "lua_State *" pointer.
+    /* Called when civetweb is about to serve Lua server page (.lp file), if
+       Lua support is enabled.
+       Parameters:
+         lua_context: "lua_State *" pointer. */
     void (*init_lua)(struct mg_connection *, void *lua_context);
 
-    // Called when civetweb has uploaded a file to a temporary directory as a
-    // result of mg_upload() call.
-    // Parameters:
-    //    file_file: full path name to the uploaded file.
+    /* Called when civetweb has uploaded a file to a temporary directory as a
+       result of mg_upload() call.
+       Parameters:
+          file_file: full path name to the uploaded file. */
     void (*upload)(struct mg_connection *, const char *file_name);
 
-    // Called when civetweb is about to send HTTP error to the client.
-    // Implementing this callback allows to create custom error pages.
-    // Parameters:
-    //   status: HTTP error status code.
+    /* Called when civetweb is about to send HTTP error to the client.
+       Implementing this callback allows to create custom error pages.
+       Parameters:
+         status: HTTP error status code. */
     int  (*http_error)(struct mg_connection *, int status);
 };
 
-// Start web server.
-//
-// Parameters:
-//   callbacks: mg_callbacks structure with user-defined callbacks.
-//   options: NULL terminated list of option_name, option_value pairs that
-//            specify Civetweb configuration parameters.
-//
-// Side-effects: on UNIX, ignores SIGCHLD and SIGPIPE signals. If custom
-//    processing is required for these, signal handlers must be set up
-//    after calling mg_start().
-//
-//
-// Example:
-//   const char *options[] = {
-//     "document_root", "/var/www",
-//     "listening_ports", "80,443s",
-//     NULL
-//   };
-//   struct mg_context *ctx = mg_start(&my_func, NULL, options);
-//
-// Refer to https://github.com/sunsetbrew/civetweb/blob/master/docs/UserManual.md
-// for the list of valid option and their possible values.
-//
-// Return:
-//   web server context, or NULL on error.
+/* Start web server.
+
+   Parameters:
+     callbacks: mg_callbacks structure with user-defined callbacks.
+     options: NULL terminated list of option_name, option_value pairs that
+              specify Civetweb configuration parameters.
+
+   Side-effects: on UNIX, ignores SIGCHLD and SIGPIPE signals. If custom
+      processing is required for these, signal handlers must be set up
+      after calling mg_start().
+
+
+   Example:
+     const char *options[] = {
+       "document_root", "/var/www",
+       "listening_ports", "80,443s",
+       NULL
+     };
+     struct mg_context *ctx = mg_start(&my_func, NULL, options);
+
+   Refer to https://github.com/sunsetbrew/civetweb/blob/master/docs/UserManual.md
+   for the list of valid option and their possible values.
+
+   Return:
+     web server context, or NULL on error. */
 struct mg_context *mg_start(const struct mg_callbacks *callbacks,
                             void *user_data,
                             const char **configuration_options);
 
 
-// Stop the web server.
-//
-// Must be called last, when an application wants to stop the web server and
-// release all associated resources. This function blocks until all Civetweb
-// threads are stopped. Context pointer becomes invalid.
+/* Stop the web server.
+
+   Must be called last, when an application wants to stop the web server and
+   release all associated resources. This function blocks until all Civetweb
+   threads are stopped. Context pointer becomes invalid. */
 void mg_stop(struct mg_context *);
 
-// mg_request_handler
-//
-// Called when a new request comes in.  This callback is URI based
-// and configured with mg_set_request_handler().
-//
-// Parameters:
-//    conn: current connection information.
-//    cbdata: the callback data configured with mg_set_request_handler().
-// Returns:
-//    0: the handler could not handle the request, so fall through.
-//    1: the handler processed the request.
+/* mg_request_handler
+
+   Called when a new request comes in.  This callback is URI based
+   and configured with mg_set_request_handler().
+
+   Parameters:
+      conn: current connection information.
+      cbdata: the callback data configured with mg_set_request_handler().
+   Returns:
+      0: the handler could not handle the request, so fall through.
+      1: the handler processed the request. */
 typedef int (* mg_request_handler)(struct mg_connection *conn, void *cbdata);
 
-// mg_set_request_handler
-//
-// Sets or removes a URI mapping for a request handler.
-//
-// URI's are ordered and prefixed URI's are supported. For example,
-// consider two URIs: /a/b and /a
-//         /a   matches /a
-//         /a/b matches /a/b
-//         /a/c matches /a
-//
-// Parameters:
-//    ctx: server context
-//    uri: the URI to configure
-//    handler: the callback handler to use when the URI is requested.
-//             If NULL, the URI will be removed.
-//    cbdata: the callback data to give to the handler when it s requested.
+/* mg_set_request_handler
+
+   Sets or removes a URI mapping for a request handler.
+
+   URI's are ordered and prefixed URI's are supported. For example,
+   consider two URIs: /a/b and /a
+           /a   matches /a
+           /a/b matches /a/b
+           /a/c matches /a
+
+   Parameters:
+      ctx: server context
+      uri: the URI to configure
+      handler: the callback handler to use when the URI is requested.
+               If NULL, the URI will be removed.
+      cbdata: the callback data to give to the handler when it s requested. */
 void mg_set_request_handler(struct mg_context *ctx, const char *uri, mg_request_handler handler, void *cbdata);
 
 
-// Get the value of particular configuration parameter.
-// The value returned is read-only. Civetweb does not allow changing
-// configuration at run time.
-// If given parameter name is not valid, NULL is returned. For valid
-// names, return value is guaranteed to be non-NULL. If parameter is not
-// set, zero-length string is returned.
+/* Get the value of particular configuration parameter.
+   The value returned is read-only. Civetweb does not allow changing
+   configuration at run time.
+   If given parameter name is not valid, NULL is returned. For valid
+   names, return value is guaranteed to be non-NULL. If parameter is not
+   set, zero-length string is returned. */
 const char *mg_get_option(const struct mg_context *ctx, const char *name);
 
 
-// Return array of strings that represent valid configuration options.
-// For each option, option name and default value is returned, i.e. the
-// number of entries in the array equals to number_of_options x 2.
-// Array is NULL terminated.
+/* Return array of strings that represent valid configuration options.
+   For each option, option name and default value is returned, i.e. the
+   number of entries in the array equals to number_of_options x 2.
+   Array is NULL terminated. */
 const char **mg_get_valid_option_names(void);
 
 
-// Add, edit or delete the entry in the passwords file.
-//
-// This function allows an application to manipulate .htpasswd files on the
-// fly by adding, deleting and changing user records. This is one of the
-// several ways of implementing authentication on the server side. For another,
-// cookie-based way please refer to the examples/chat in the source tree.
-//
-// If password is not NULL, entry is added (or modified if already exists).
-// If password is NULL, entry is deleted.
-//
-// Return:
-//   1 on success, 0 on error.
+/* Add, edit or delete the entry in the passwords file.
+
+   This function allows an application to manipulate .htpasswd files on the
+   fly by adding, deleting and changing user records. This is one of the
+   several ways of implementing authentication on the server side. For another,
+   cookie-based way please refer to the examples/chat in the source tree.
+
+   If password is not NULL, entry is added (or modified if already exists).
+   If password is NULL, entry is deleted.
+
+   Return:
+     1 on success, 0 on error. */
 int mg_modify_passwords_file(const char *passwords_file_name,
                              const char *domain,
                              const char *user,
                              const char *password);
 
 
-// Return information associated with the request.
+/* Return information associated with the request. */
 struct mg_request_info *mg_get_request_info(struct mg_connection *);
 
 
-// Send data to the client.
-// Return:
-//  0   when the connection has been closed
-//  -1  on error
-//  >0  number of bytes written on success
+/* Send data to the client.
+   Return:
+    0   when the connection has been closed
+    -1  on error
+    >0  number of bytes written on success */
 int mg_write(struct mg_connection *, const void *buf, size_t len);
 
 
-// Send data to a websocket client wrapped in a websocket frame.  Uses mg_lock to ensure
-// that the transmission is not interrupted, i.e., when the application is proactively
-// communicating and responding to a request simultaneously.
-//
-// Send data to a websocket client wrapped in a websocket frame.
-// This function is available when civetweb is compiled with -DUSE_WEBSOCKET
-//
-// Return:
-//  0   when the connection has been closed
-//  -1  on error
-//  >0  number of bytes written on success
+/* Send data to a websocket client wrapped in a websocket frame.  Uses mg_lock
+   to ensure that the transmission is not interrupted, i.e., when the
+   application is proactively communicating and responding to a request
+   simultaneously.
+
+   Send data to a websocket client wrapped in a websocket frame.
+   This function is available when civetweb is compiled with -DUSE_WEBSOCKET
+
+   Return:
+    0   when the connection has been closed
+    -1  on error
+    >0  number of bytes written on success */
 int mg_websocket_write(struct mg_connection* conn, int opcode,
                        const char *data, size_t data_len);
 
-// Blocks until unique access is obtained to this connection. Intended for use with websockets only.
-// Invoke this before mg_write or mg_printf when communicating with a websocket if your code has
-// server-initiated communication as well as communication in direct response to a message.
+/* Blocks until unique access is obtained to this connection. Intended for use
+   with websockets only.
+   Invoke this before mg_write or mg_printf when communicating with a
+   websocket if your code has server-initiated communication as well as
+   communication in direct response to a message. */
 void mg_lock(struct mg_connection* conn);
 void mg_unlock(struct mg_connection* conn);
 
-// Opcodes, from http://tools.ietf.org/html/rfc6455
+/* Opcodes, from http://tools.ietf.org/html/rfc6455 */
 enum {
     WEBSOCKET_OPCODE_CONTINUATION = 0x0,
     WEBSOCKET_OPCODE_TEXT = 0x1,
@@ -277,7 +285,7 @@ enum {
 };
 
 
-// Macros for enabling compiler-specific checks for printf-like arguments.
+/* Macros for enabling compiler-specific checks for printf-like arguments. */
 #undef PRINTF_FORMAT_STRING
 #if defined(_MSC_VER) && _MSC_VER >= 1400
 #include <sal.h>
@@ -296,179 +304,181 @@ enum {
 #define PRINTF_ARGS(x, y)
 #endif
 
-// Send data to the client using printf() semantics.
-//
-// Works exactly like mg_write(), but allows to do message formatting.
+/* Send data to the client using printf() semantics.
+
+   Works exactly like mg_write(), but allows to do message formatting. */
 int mg_printf(struct mg_connection *,
               PRINTF_FORMAT_STRING(const char *fmt), ...) PRINTF_ARGS(2, 3);
 
 
-// Send contents of the entire file together with HTTP headers.
+/* Send contents of the entire file together with HTTP headers. */
 void mg_send_file(struct mg_connection *conn, const char *path);
 
 
-// Read data from the remote end, return number of bytes read.
-// Return:
-//   0     connection has been closed by peer. No more data could be read.
-//   < 0   read error. No more data could be read from the connection.
-//   > 0   number of bytes read into the buffer.
+/* Read data from the remote end, return number of bytes read.
+   Return:
+     0     connection has been closed by peer. No more data could be read.
+     < 0   read error. No more data could be read from the connection.
+     > 0   number of bytes read into the buffer. */
 int mg_read(struct mg_connection *, void *buf, size_t len);
 
 
-// Get the value of particular HTTP header.
-//
-// This is a helper function. It traverses request_info->http_headers array,
-// and if the header is present in the array, returns its value. If it is
-// not present, NULL is returned.
+/* Get the value of particular HTTP header.
+
+   This is a helper function. It traverses request_info->http_headers array,
+   and if the header is present in the array, returns its value. If it is
+   not present, NULL is returned. */
 const char *mg_get_header(const struct mg_connection *, const char *name);
 
 
-// Get a value of particular form variable.
-//
-// Parameters:
-//   data: pointer to form-uri-encoded buffer. This could be either POST data,
-//         or request_info.query_string.
-//   data_len: length of the encoded data.
-//   var_name: variable name to decode from the buffer
-//   dst: destination buffer for the decoded variable
-//   dst_len: length of the destination buffer
-//
-// Return:
-//   On success, length of the decoded variable.
-//   On error:
-//      -1 (variable not found).
-//      -2 (destination buffer is NULL, zero length or too small to hold the
-//          decoded variable).
-//
-// Destination buffer is guaranteed to be '\0' - terminated if it is not
-// NULL or zero length.
+/* Get a value of particular form variable.
+
+   Parameters:
+     data: pointer to form-uri-encoded buffer. This could be either POST data,
+           or request_info.query_string.
+     data_len: length of the encoded data.
+     var_name: variable name to decode from the buffer
+     dst: destination buffer for the decoded variable
+     dst_len: length of the destination buffer
+
+   Return:
+     On success, length of the decoded variable.
+     On error:
+        -1 (variable not found).
+        -2 (destination buffer is NULL, zero length or too small to hold the
+            decoded variable).
+
+   Destination buffer is guaranteed to be '\0' - terminated if it is not
+   NULL or zero length. */
 int mg_get_var(const char *data, size_t data_len,
                const char *var_name, char *dst, size_t dst_len);
 
-// Get a value of particular form variable.
-//
-// Parameters:
-//   data: pointer to form-uri-encoded buffer. This could be either POST data,
-//         or request_info.query_string.
-//   data_len: length of the encoded data.
-//   var_name: variable name to decode from the buffer
-//   dst: destination buffer for the decoded variable
-//   dst_len: length of the destination buffer
-//   occurrence: which occurrence of the variable, 0 is the first, 1 the second...
-//              this makes it possible to parse a query like
-//              b=x&a=y&a=z which will have occurrence values b:0, a:0 and a:1
-//
-// Return:
-//   On success, length of the decoded variable.
-//   On error:
-//      -1 (variable not found).
-//      -2 (destination buffer is NULL, zero length or too small to hold the
-//          decoded variable).
-//
-// Destination buffer is guaranteed to be '\0' - terminated if it is not
-// NULL or zero length.
+/* Get a value of particular form variable.
+
+   Parameters:
+     data: pointer to form-uri-encoded buffer. This could be either POST data,
+           or request_info.query_string.
+     data_len: length of the encoded data.
+     var_name: variable name to decode from the buffer
+     dst: destination buffer for the decoded variable
+     dst_len: length of the destination buffer
+     occurrence: which occurrence of the variable, 0 is the first, 1 the
+                 second...
+                this makes it possible to parse a query like
+                b=x&a=y&a=z which will have occurrence values b:0, a:0 and a:1
+
+   Return:
+     On success, length of the decoded variable.
+     On error:
+        -1 (variable not found).
+        -2 (destination buffer is NULL, zero length or too small to hold the
+            decoded variable).
+
+   Destination buffer is guaranteed to be '\0' - terminated if it is not
+   NULL or zero length. */
 int mg_get_var2(const char *data, size_t data_len,
                 const char *var_name, char *dst, size_t dst_len, size_t occurrence);
 
-// Fetch value of certain cookie variable into the destination buffer.
-//
-// Destination buffer is guaranteed to be '\0' - terminated. In case of
-// failure, dst[0] == '\0'. Note that RFC allows many occurrences of the same
-// parameter. This function returns only first occurrence.
-//
-// Return:
-//   On success, value length.
-//   On error:
-//      -1 (either "Cookie:" header is not present at all or the requested
-//          parameter is not found).
-//      -2 (destination buffer is NULL, zero length or too small to hold the
-//          value).
+/* Fetch value of certain cookie variable into the destination buffer.
+
+   Destination buffer is guaranteed to be '\0' - terminated. In case of
+   failure, dst[0] == '\0'. Note that RFC allows many occurrences of the same
+   parameter. This function returns only first occurrence.
+
+   Return:
+     On success, value length.
+     On error:
+        -1 (either "Cookie:" header is not present at all or the requested
+            parameter is not found).
+        -2 (destination buffer is NULL, zero length or too small to hold the
+            value). */
 int mg_get_cookie(const char *cookie, const char *var_name,
                   char *buf, size_t buf_len);
 
 
-// Download data from the remote web server.
-//   host: host name to connect to, e.g. "foo.com", or "10.12.40.1".
-//   port: port number, e.g. 80.
-//   use_ssl: wether to use SSL connection.
-//   error_buffer, error_buffer_size: error message placeholder.
-//   request_fmt,...: HTTP request.
-// Return:
-//   On success, valid pointer to the new connection, suitable for mg_read().
-//   On error, NULL. error_buffer contains error message.
-// Example:
-//   char ebuf[100];
-//   struct mg_connection *conn;
-//   conn = mg_download("google.com", 80, 0, ebuf, sizeof(ebuf),
-//                      "%s", "GET / HTTP/1.0\r\nHost: google.com\r\n\r\n");
+/* Download data from the remote web server.
+     host: host name to connect to, e.g. "foo.com", or "10.12.40.1".
+     port: port number, e.g. 80.
+     use_ssl: wether to use SSL connection.
+     error_buffer, error_buffer_size: error message placeholder.
+     request_fmt,...: HTTP request.
+   Return:
+     On success, valid pointer to the new connection, suitable for mg_read().
+     On error, NULL. error_buffer contains error message.
+   Example:
+     char ebuf[100];
+     struct mg_connection *conn;
+     conn = mg_download("google.com", 80, 0, ebuf, sizeof(ebuf),
+                        "%s", "GET / HTTP/1.0\r\nHost: google.com\r\n\r\n");
+ */
 struct mg_connection *mg_download(const char *host, int port, int use_ssl,
                                   char *error_buffer, size_t error_buffer_size,
                                   PRINTF_FORMAT_STRING(const char *request_fmt),
                                   ...) PRINTF_ARGS(6, 7);
 
 
-// Close the connection opened by mg_download().
+/* Close the connection opened by mg_download(). */
 void mg_close_connection(struct mg_connection *conn);
 
 
-// File upload functionality. Each uploaded file gets saved into a temporary
-// file and MG_UPLOAD event is sent.
-// Return number of uploaded files.
+/* File upload functionality. Each uploaded file gets saved into a temporary
+   file and MG_UPLOAD event is sent.
+   Return number of uploaded files. */
 int mg_upload(struct mg_connection *conn, const char *destination_dir);
 
 
-// Convenience function -- create detached thread.
-// Return: 0 on success, non-0 on error.
+/* Convenience function -- create detached thread.
+   Return: 0 on success, non-0 on error. */
 typedef void * (*mg_thread_func_t)(void *);
 int mg_start_thread(mg_thread_func_t f, void *p);
 
 
-// Return builtin mime type for the given file name.
-// For unrecognized extensions, "text/plain" is returned.
+/* Return builtin mime type for the given file name.
+   For unrecognized extensions, "text/plain" is returned. */
 const char *mg_get_builtin_mime_type(const char *file_name);
 
 
-// Return Civetweb version.
+/* Return Civetweb version. */
 const char *mg_version(void);
 
-// URL-decode input buffer into destination buffer.
-// 0-terminate the destination buffer.
-// form-url-encoded data differs from URI encoding in a way that it
-// uses '+' as character for space, see RFC 1866 section 8.2.1
-// http://ftp.ics.uci.edu/pub/ietf/html/rfc1866.txt
-// Return: length of the decoded data, or -1 if dst buffer is too small.
+/* URL-decode input buffer into destination buffer.
+   0-terminate the destination buffer.
+   form-url-encoded data differs from URI encoding in a way that it
+   uses '+' as character for space, see RFC 1866 section 8.2.1
+   http://ftp.ics.uci.edu/pub/ietf/html/rfc1866.txt
+   Return: length of the decoded data, or -1 if dst buffer is too small. */
 int mg_url_decode(const char *src, int src_len, char *dst,
                   int dst_len, int is_form_url_encoded);
 
-// URL-encode input buffer into destination buffer.
-// returns the length of the resulting buffer or -1
-// is the buffer is too small.
+/* URL-encode input buffer into destination buffer.
+   returns the length of the resulting buffer or -1
+   is the buffer is too small. */
 int mg_url_encode(const char *src, char *dst, size_t dst_len);
 
-// MD5 hash given strings.
-// Buffer 'buf' must be 33 bytes long. Varargs is a NULL terminated list of
-// ASCIIz strings. When function returns, buf will contain human-readable
-// MD5 hash. Example:
-//   char buf[33];
-//   mg_md5(buf, "aa", "bb", NULL);
+/* MD5 hash given strings.
+   Buffer 'buf' must be 33 bytes long. Varargs is a NULL terminated list of
+   ASCIIz strings. When function returns, buf will contain human-readable
+   MD5 hash. Example:
+     char buf[33];
+     mg_md5(buf, "aa", "bb", NULL); */
 char *mg_md5(char buf[33], ...);
 
 
-// Print error message to the opened error log stream.
-// This utilizes the provided logging configuration.
-//   conn: connection
-//   fmt: format string without the line return
-//   ...: variable argument list
-// Example:
-//   mg_cry(conn,"i like %s", "logging");
+/* Print error message to the opened error log stream.
+   This utilizes the provided logging configuration.
+     conn: connection
+     fmt: format string without the line return
+     ...: variable argument list
+   Example:
+     mg_cry(conn,"i like %s", "logging"); */
 void mg_cry(struct mg_connection *conn,
             PRINTF_FORMAT_STRING(const char *fmt), ...) PRINTF_ARGS(2, 3);
 
-// utility method to compare two buffers, case incensitive.
+/* utility method to compare two buffers, case incensitive. */
 int mg_strncasecmp(const char *s1, const char *s2, size_t len);
 
 #ifdef __cplusplus
 }
-#endif // __cplusplus
+#endif /* __cplusplus */
 
-#endif // CIVETWEB_HEADER_INCLUDED
+#endif /* CIVETWEB_HEADER_INCLUDED */

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 227 - 214
src/civetweb.c


+ 85 - 82
src/main.c

@@ -1,27 +1,28 @@
-// Copyright (c) 2004-2013 Sergey Lyubka
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
+/* Copyright (c) 2004-2013 Sergey Lyubka
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+*/
 
 #if defined(_WIN32)
-#define _CRT_SECURE_NO_WARNINGS  // Disable deprecation warning in VS2005
+#define _CRT_SECURE_NO_WARNINGS  /* Disable deprecation warning in VS2005 */
 #else
-#define _XOPEN_SOURCE 600  // For PATH_MAX on linux
+#define _XOPEN_SOURCE 600  /* For PATH_MAX on linux */
 #endif
 
 #ifndef IGNORE_UNUSED_RESULT
@@ -69,21 +70,22 @@ extern char *_getcwd(char *buf, size_t size);
 #define DIRSEP '/'
 #define WINCDECL
 #define abs_path(rel, abs, abs_size) realpath((rel), (abs))
-#endif // _WIN32
+#endif /* _WIN32 */
 
 #define MAX_OPTIONS 100
 #define MAX_CONF_FILE_LINE_SIZE (8 * 1024)
 
 static int exit_flag;
-static char server_name[40];        // Set by init_server_name()
-static char config_file[PATH_MAX] = "";  // Set by process_command_line_arguments()
-static struct mg_context *ctx;      // Set by start_civetweb()
+static char server_name[40];        /* Set by init_server_name() */
+static char config_file[PATH_MAX] = ""; /* Set by
+                                           process_command_line_arguments() */
+static struct mg_context *ctx;      /* Set by start_civetweb() */
 
 #if !defined(CONFIG_FILE)
 #define CONFIG_FILE "civetweb.conf"
 #endif /* !CONFIG_FILE */
 
-// backup config file
+/* backup config file */
 #if !defined(CONFIG_FILE2) && defined(LINUX)
 #define CONFIG_FILE2 "/usr/local/etc/civetweb.conf"
 #endif
@@ -167,7 +169,7 @@ static void create_config_file(const char *path)
     FILE *fp;
     int i;
 
-    // Create config file if it is not present yet
+    /* Create config file if it is not present yet */
     if ((fp = fopen(path, "r")) != NULL) {
         fclose(fp);
     } else if ((fp = fopen(path, "a+")) != NULL) {
@@ -222,12 +224,12 @@ static void process_command_line_arguments(char *argv[], char **options)
     FILE *fp = NULL;
     size_t i, cmd_line_opts_start = 1, line_no = 0;
 
-    // Should we use a config file ?
+    /* Should we use a config file ? */
     if (argv[1] != NULL && argv[1][0] != '-') {
         snprintf(config_file, sizeof(config_file), "%s", argv[1]);
         cmd_line_opts_start = 2;
     } else if ((p = strrchr(argv[0], DIRSEP)) == NULL) {
-        // No command line flags specified. Look where binary lives
+        /* No command line flags specified. Look where binary lives */
         snprintf(config_file, sizeof(config_file)-1, "%s", CONFIG_FILE);
         config_file[sizeof(config_file)-1] = 0;
     } else {
@@ -238,13 +240,13 @@ static void process_command_line_arguments(char *argv[], char **options)
 
     fp = fopen(config_file, "r");
 
-    // If config file was set in command line and open failed, die
+    /* If config file was set in command line and open failed, die */
     if (cmd_line_opts_start == 2 && fp == NULL) {
         die("Cannot open config file %s: %s", config_file, strerror(errno));
     }
 
 #ifdef CONFIG_FILE2
-    // try alternate config file
+    /* try alternate config file */
     if (fp == NULL) {
         fp = fopen(CONFIG_FILE2, "r");
         if (fp != NULL) {
@@ -253,22 +255,22 @@ static void process_command_line_arguments(char *argv[], char **options)
     }
 #endif
 
-    // Load config file settings first
+    /* Load config file settings first */
     if (fp != NULL) {
         fprintf(stderr, "Loading config file %s\n", config_file);
 
-        // Loop over the lines in config file
+        /* Loop over the lines in config file */
         while (fgets(line, sizeof(line), fp) != NULL) {
 
-            if (!line_no && !memcmp(line,"\xEF\xBB\xBF",3)) {
-                // strip UTF-8 BOM
-                p = line+3;
-            } else {
-                p = line;
+            if (!line_no && !memcmp(line,"\xEF\xBB\xBF",3)) {
+                /* strip UTF-8 BOM */
+                p = line+3;
+            } else {
+                p = line;
             }
             line_no++;
 
-            // Ignore empty lines and comments
+            /* Ignore empty lines and comments */
             for (i = 0; isspace(* (unsigned char *) &line[i]); ) i++;
             if (p[i] == '#' || p[i] == '\0') {
                 continue;
@@ -285,12 +287,12 @@ static void process_command_line_arguments(char *argv[], char **options)
         (void) fclose(fp);
     }
 
-    // If we're under MacOS and started by launchd, then the second
-    // argument is process serial number, -psn_.....
-    // In this case, don't process arguments at all.
+    /* If we're under MacOS and started by launchd, then the second
+       argument is process serial number, -psn_.....
+       In this case, don't process arguments at all. */
     if (argv[1] == NULL || memcmp(argv[1], "-psn_", 5) != 0) {
-        // Handle command line flags.
-        // They override config file and default settings.
+        /* Handle command line flags.
+           They override config file and default settings. */
         for (i = cmd_line_opts_start; argv[i] != NULL; i += 2) {
             if (argv[i][0] != '-' || argv[i + 1] == NULL) {
                 show_usage_and_exit();
@@ -317,8 +319,9 @@ static int is_path_absolute(const char *path)
 {
 #ifdef _WIN32
     return path != NULL &&
-           ((path[0] == '\\' && path[1] == '\\') ||  // UNC path, e.g. \\server\dir
-            (isalpha(path[0]) && path[1] == ':' && path[2] == '\\'));  // E.g. X:\dir
+           ((path[0] == '\\' && path[1] == '\\') ||  /* UNC path, e.g.
+                                                        \\server\dir */
+            (isalpha(path[0]) && path[1] == ':' && path[2] == '\\'));  /* E.g. X:\dir */
 #else
     return path != NULL && path[0] == '/';
 #endif
@@ -369,15 +372,15 @@ static void set_absolute_path(char *options[], const char *option_name,
     char path[PATH_MAX] = "", abs[PATH_MAX] = "", *option_value;
     const char *p;
 
-    // Check whether option is already set
+    /* Check whether option is already set */
     option_value = get_option(options, option_name);
 
-    // If option is already set and it is an absolute path,
-    // leave it as it is -- it's already absolute.
+    /* If option is already set and it is an absolute path,
+       leave it as it is -- it's already absolute. */
     if (option_value != NULL && !is_path_absolute(option_value)) {
-        // Not absolute. Use the directory where civetweb executable lives
-        // be the relative directory for everything.
-        // Extract civetweb executable directory into path.
+        /* Not absolute. Use the directory where civetweb executable lives
+           be the relative directory for everything.
+           Extract civetweb executable directory into path. */
         if ((p = strrchr(path_to_civetweb_exe, DIRSEP)) == NULL) {
             IGNORE_UNUSED_RESULT(getcwd(path, sizeof(path)));
         } else {
@@ -389,7 +392,7 @@ static void set_absolute_path(char *options[], const char *option_name,
         strncat(path, "/", sizeof(path) - 1);
         strncat(path, option_value, sizeof(path) - 1);
 
-        // Absolutize the path, and set the option
+        /* Absolutize the path, and set the option */
         IGNORE_UNUSED_RESULT(abs_path(path, abs, sizeof(abs)));
         set_option(options, option_name, abs);
     }
@@ -401,7 +404,7 @@ static void start_civetweb(int argc, char *argv[])
     char *options[MAX_OPTIONS];
     int i;
 
-    // Edit passwords file if -A option is specified
+    /* Edit passwords file if -A option is specified */
     if (argc > 1 && !strcmp(argv[1], "-A")) {
         if (argc != 6) {
             show_usage_and_exit();
@@ -410,7 +413,7 @@ static void start_civetweb(int argc, char *argv[])
              EXIT_SUCCESS : EXIT_FAILURE);
     }
 
-    // Show usage if -h or --help options are specified
+    /* Show usage if -h or --help options are specified */
     if (argc == 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))) {
         show_usage_and_exit();
     }
@@ -418,10 +421,10 @@ static void start_civetweb(int argc, char *argv[])
     options[0] = NULL;
     set_option(options, "document_root", ".");
 
-    // Update config based on command line arguments
+    /* Update config based on command line arguments */
     process_command_line_arguments(argv, options);
 
-    // Make sure we have absolute paths for files and directories
+    /* Make sure we have absolute paths for files and directories */
     set_absolute_path(options, "document_root", argv[0]);
     set_absolute_path(options, "put_delete_auth_file", argv[0]);
     set_absolute_path(options, "cgi_interpreter", argv[0]);
@@ -430,16 +433,16 @@ static void start_civetweb(int argc, char *argv[])
     set_absolute_path(options, "global_auth_file", argv[0]);
     set_absolute_path(options, "ssl_certificate", argv[0]);
 
-    // Make extra verification for certain options
+    /* Make extra verification for certain options */
     verify_existence(options, "document_root", 1);
     verify_existence(options, "cgi_interpreter", 0);
     verify_existence(options, "ssl_certificate", 0);
 
-    // Setup signal handler: quit on Ctrl-C
+    /* Setup signal handler: quit on Ctrl-C */
     signal(SIGTERM, signal_handler);
     signal(SIGINT, signal_handler);
 
-    // Start Civetweb
+    /* Start Civetweb */
     memset(&callbacks, 0, sizeof(callbacks));
     callbacks.log_message = &log_message;
     ctx = mg_start(&callbacks, NULL, (const char **) options);
@@ -458,13 +461,13 @@ enum {
     ID_REMOVE_SERVICE, ID_STATIC, ID_GROUP, ID_SAVE, ID_RESET_DEFAULTS,
     ID_STATUS, ID_CONNECT,
 
-    // All dynamically created text boxes for options have IDs starting from
-    // ID_CONTROLS, incremented by one.
+    /* All dynamically created text boxes for options have IDs starting from
+       ID_CONTROLS, incremented by one. */
     ID_CONTROLS = 200,
 
-    // Text boxes for files have "..." buttons to open file browser. These
-    // buttons have IDs that are ID_FILE_BUTTONS_DELTA higher than associated
-    // text box ID.
+    /* Text boxes for files have "..." buttons to open file browser. These
+       buttons have IDs that are ID_FILE_BUTTONS_DELTA higher than associated
+       text box ID. */
     ID_FILE_BUTTONS_DELTA = 1000
 };
 static HICON hIcon;
@@ -565,7 +568,7 @@ static void save_config(HWND hDlg, FILE *fp)
             GetDlgItemText(hDlg, id, value, sizeof(value));
         }
         default_value = options[i * 2 + 1] == NULL ? "" : options[i * 2 + 1];
-        // If value is the same as default, skip it
+        /* If value is the same as default, skip it */
         if (strcmp(value, default_value) != 0) {
             fprintf(fp, "%s %s\n", name, value);
         }
@@ -715,7 +718,7 @@ static void show_settings_dialog()
     static int guard;
 
     static struct {
-        DLGTEMPLATE template; // 18 bytes
+        DLGTEMPLATE template; /* 18 bytes */
         WORD menu, class;
         wchar_t caption[1];
         WORD fontsiz;
@@ -796,7 +799,7 @@ static int manage_service(int action)
     static const char *service_name = "Civetweb";
     SC_HANDLE hSCM = NULL, hService = NULL;
     SERVICE_DESCRIPTION descr = {server_name};
-    char path[PATH_MAX + 20] = "";  // Path to executable plus magic argument
+    char path[PATH_MAX + 20] = "";/* Path to executable plus magic argument */
     int success = 1;
 
     if ((hSCM = OpenSCManager(NULL, NULL, action == ID_INSTALL_SERVICE ?
@@ -846,7 +849,7 @@ static LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam,
     char buf[200], *service_argv[] = {__argv[0], NULL};
     POINT pt;
     HMENU hMenu;
-    static UINT s_uTaskbarRestart; // for taskbar creation
+    static UINT s_uTaskbarRestart; /* for taskbar creation */
 
     switch (msg) {
     case WM_CREATE:
@@ -915,7 +918,7 @@ static LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam,
         mg_stop(ctx);
         Shell_NotifyIcon(NIM_DELETE, &TrayIcon);
         PostQuitMessage(0);
-        return 0;  // We've just sent our own quit message, with proper hwnd.
+        return 0;/* We've just sent our own quit message, with proper hwnd. */
     default:
         if (msg==s_uTaskbarRestart)
             Shell_NotifyIcon(NIM_ADD, &TrayIcon);
@@ -957,7 +960,7 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR cmdline, int show)
         DispatchMessage(&msg);
     }
 
-    // Return the WM_QUIT value.
+    /* Return the WM_QUIT value. */
     return (int) msg.wParam;
 }
 #elif defined(USE_COCOA)
@@ -994,50 +997,50 @@ int main(int argc, char *argv[])
     [NSAutoreleasePool new];
     [NSApplication sharedApplication];
 
-    // Add delegate to process menu item actions
+    /* Add delegate to process menu item actions */
     Civetweb *myDelegate = [[Civetweb alloc] autorelease];
 [NSApp setDelegate: myDelegate];
 
-    // Run this app as agent
+    /* Run this app as agent */
     ProcessSerialNumber psn = { 0, kCurrentProcess };
     TransformProcessType(&psn, kProcessTransformToBackgroundApplication);
     SetFrontProcess(&psn);
 
-    // Add status bar menu
+    /* Add status bar menu */
     id menu = [[NSMenu new] autorelease];
 
-    // Add version menu item
+    /* Add version menu item */
 [menu addItem:[[[NSMenuItem alloc]
-                    //initWithTitle:[NSString stringWithFormat:@"%s", server_name]
+                    /*initWithTitle:[NSString stringWithFormat:@"%s", server_name]*/
                 initWithTitle:[NSString stringWithUTF8String:server_name]
                 action:@selector(noexist) keyEquivalent:@""] autorelease]];
 
-    // Add configuration menu item
+    /* Add configuration menu item */
 [menu addItem:[[[NSMenuItem alloc]
                 initWithTitle:@"Edit configuration"
                 action:@selector(editConfig) keyEquivalent:@""] autorelease]];
 
-    // Add connect menu item
+    /* Add connect menu item */
 [menu addItem:[[[NSMenuItem alloc]
                 initWithTitle:@"Open web root in a browser"
                 action:@selector(openBrowser) keyEquivalent:@""] autorelease]];
 
-    // Separator
+    /* Separator */
 [menu addItem:[NSMenuItem separatorItem]];
 
-    // Add quit menu item
+    /* Add quit menu item */
 [menu addItem:[[[NSMenuItem alloc]
                 initWithTitle:@"Quit"
                 action:@selector(shutDown) keyEquivalent:@"q"] autorelease]];
 
-    // Attach menu to the status bar
+    /* Attach menu to the status bar */
     id item = [[[NSStatusBar systemStatusBar]
             statusItemWithLength:NSVariableStatusItemLength] retain];
 [item setHighlightMode:YES];
 [item setImage:[NSImage imageNamed:@"civetweb_22x22.png"]];
 [item setMenu:menu];
 
-    // Run the app
+    /* Run the app */
 [NSApp activateIgnoringOtherApps:YES];
     [NSApp run];
 

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.