Browse Source

Expose mg_url_decode to the API

Sergey Lyubka 12 years ago
parent
commit
cfbaf7f1ae
2 changed files with 12 additions and 9 deletions
  1. 4 9
      mongoose.c
  2. 8 0
      mongoose.h

+ 4 - 9
mongoose.c

@@ -1635,13 +1635,8 @@ int mg_printf(struct mg_connection *conn, const char *fmt, ...) {
   return mg_vprintf(conn, fmt, ap);
   return mg_vprintf(conn, fmt, ap);
 }
 }
 
 
-// URL-decode input buffer into destination buffer.
-// 0-terminate the destination buffer. Return the length of decoded data.
-// 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
-static int url_decode(const char *src, int src_len, char *dst,
-                      int dst_len, int is_form_url_encoded) {
+int mg_url_decode(const char *src, int src_len, char *dst,
+                  int dst_len, int is_form_url_encoded) {
   int i, j, a, b;
   int i, j, a, b;
 #define HEXTOI(x) (isdigit(x) ? x - '0' : x - 'W')
 #define HEXTOI(x) (isdigit(x) ? x - '0' : x - 'W')
 
 
@@ -1698,7 +1693,7 @@ int mg_get_var(const char *data, size_t data_len, const char *name,
         assert(s >= p);
         assert(s >= p);
 
 
         // Decode variable into destination buffer
         // Decode variable into destination buffer
-        len = url_decode(p, (size_t)(s - p), dst, dst_len, 1);
+        len = mg_url_decode(p, (size_t)(s - p), dst, dst_len, 1);
 
 
         // Redirect error code from -1 to -2 (destination buffer too small).
         // Redirect error code from -1 to -2 (destination buffer too small).
         if (len == -1) {
         if (len == -1) {
@@ -4396,7 +4391,7 @@ static void handle_request(struct mg_connection *conn) {
     * ((char *) conn->request_info.query_string++) = '\0';
     * ((char *) conn->request_info.query_string++) = '\0';
   }
   }
   uri_len = (int) strlen(ri->uri);
   uri_len = (int) strlen(ri->uri);
-  url_decode(ri->uri, uri_len, (char *) ri->uri, uri_len + 1, 0);
+  mg_url_decode(ri->uri, uri_len, (char *) ri->uri, uri_len + 1, 0);
   remove_double_dots_and_double_slashes((char *) ri->uri);
   remove_double_dots_and_double_slashes((char *) ri->uri);
   convert_uri_to_file_name(conn, path, sizeof(path), &file);
   convert_uri_to_file_name(conn, path, sizeof(path), &file);
   conn->throttle = set_throttle(conn->ctx->config[THROTTLE],
   conn->throttle = set_throttle(conn->ctx->config[THROTTLE],

+ 8 - 0
mongoose.h

@@ -333,6 +333,14 @@ const char *mg_get_builtin_mime_type(const char *file_name);
 // Return Mongoose version.
 // Return Mongoose version.
 const char *mg_version(void);
 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.
+int mg_url_decode(const char *src, int src_len, char *dst,
+                  int dst_len, int is_form_url_encoded);
 
 
 // MD5 hash given strings.
 // MD5 hash given strings.
 // Buffer 'buf' must be 33 bytes long. Varargs is a NULL terminated list of
 // Buffer 'buf' must be 33 bytes long. Varargs is a NULL terminated list of