浏览代码

Alternative to mg_upload (Step 25/?)

bel 9 年之前
父节点
当前提交
b7c3a5ead6
共有 1 个文件被更改,包括 25 次插入8 次删除
  1. 25 8
      src/handle_form.inl

+ 25 - 8
src/handle_form.inl

@@ -50,6 +50,7 @@ struct mg_form_data_handler {
 	void *user_data;
 };
 
+
 int mg_handle_form_data(struct mg_connection *conn,
                         struct mg_form_data_handler *fdh);
 
@@ -65,7 +66,6 @@ url_encoded_field_found(const char *key,
                         size_t path_len,
                         struct mg_form_data_handler *fdh)
 {
-	/* Call callback */
 	char key_dec[1024];
 	char filename_dec[1024];
 	int key_dec_len;
@@ -100,24 +100,41 @@ url_encoded_field_found(const char *key,
 
 static int
 url_encoded_field_get(const char *key,
-                      size_t keylen,
+                      size_t key_len,
                       const char *filename,
+                      size_t filename_len,
                       const char *value,
-                      size_t valuelen,
+                      size_t value_len,
                       struct mg_form_data_handler *fdh)
 {
 	char key_dec[1024];
-	char *value_dec = mg_malloc(valuelen + 1);
+	char filename_dec[1024];
+
+	char *value_dec = mg_malloc(value_len + 1);
+	int value_dec_len;
+
 	if (!value_dec) {
 		/* TODO: oom */
 		return FORM_DISPOSITION_ABORT;
 	}
 
-	mg_url_decode(key, (size_t)keylen, key_dec, (int)sizeof(key_dec), 1);
-	mg_url_decode(value, (size_t)valuelen, value_dec, (int)valuelen + 1, 1);
+	mg_url_decode(key, (size_t)key_len, key_dec, (int)sizeof(key_dec), 1);
+
+	if (filename) {
+		mg_url_decode(filename,
+		              (size_t)filename_len,
+		              filename_dec,
+		              (int)sizeof(filename_dec),
+		              1);
+	} else {
+		filename_dec[0] = 0;
+	}
+
+	value_dec_len = mg_url_decode(
+	    value, (size_t)value_len, value_dec, (int)value_len + 1, 1);
 
 	return fdh->field_get(
-	    key, keylen, filename, value_dec, strlen(value_dec), fdh->user_data);
+	    key, filename, value_dec, value_dec_len, fdh->user_data);
 }
 
 
@@ -203,7 +220,7 @@ mg_handle_form_data(struct mg_connection *conn,
 			if (disposition == FORM_DISPOSITION_GET) {
 				/* Call callback */
 				url_encoded_field_get(
-				    data, (size_t)keylen, NULL, val, (size_t)vallen, fdh);
+				    data, (size_t)keylen, NULL, 0, val, (size_t)vallen, fdh);
 			}
 			if (disposition == FORM_DISPOSITION_STORE) {
 				/* Store the content to a file */