Эх сурвалжийг харах

use rt_xxx whose RT-Thread threadsafe api to instead of strandard libc api.

liuxianliang 3 жил өмнө
parent
commit
b041dc3392
3 өөрчлөгдсөн 57 нэмэгдсэн , 28 устгасан
  1. 34 5
      inc/webclient.h
  2. 15 15
      src/webclient.c
  3. 8 8
      src/webclient_file.c

+ 34 - 5
inc/webclient.h

@@ -29,23 +29,52 @@ extern "C" {
 #endif
 
 #ifndef web_malloc
-#define web_malloc                     rt_malloc
+#define web_malloc                      rt_malloc
 #endif
 
 #ifndef web_calloc
-#define web_calloc                     rt_calloc
+#define web_calloc                      rt_calloc
 #endif
 
 #ifndef web_realloc
-#define web_realloc                    rt_realloc
+#define web_realloc                     rt_realloc
 #endif
 
 #ifndef web_free
-#define web_free                       rt_free
+#define web_free                        rt_free
+#endif
+
+/**
+ * The gcc libc api is not threadsafe,
+ * especially the float type operation.
+ * So, use rt_xxx whose RT-Thread threadsafe api to instead of strandard libc api.
+ */
+#ifndef web_memset
+#define web_memset                      rt_memset
+#endif
+
+#ifndef web_memcpy
+#define web_memcpy                      rt_memcpy
+#endif
+
+#ifndef web_memcmp
+#define web_memcmp                      rt_memcmp
+#endif
+
+#ifndef web_snprintf
+#define web_snprintf                    rt_snprintf
+#endif
+
+#ifndef web_vsnprintf
+#define web_vsnprintf                   rt_vsnprintf
 #endif
 
 #ifndef web_strdup
-#define web_strdup                     rt_strdup
+#define web_strdup                      rt_strdup
+#endif
+
+#ifndef web_strndup
+#define web_strndup                     rt_strndup
 #endif
 
 #define WEBCLIENT_SW_VERSION           "2.3.0"

+ 15 - 15
src/webclient.c

@@ -298,7 +298,7 @@ static int webclient_resolve_address(struct webclient_session *session, struct a
         struct addrinfo hint;
         int ret;
 
-        memset(&hint, 0, sizeof(hint));
+        web_memset(&hint, 0, sizeof(hint));
         ret = getaddrinfo(session->host, port_str, &hint, res);
         if (ret != 0)
         {
@@ -533,7 +533,7 @@ int webclient_header_fields_add(struct webclient_session *session, const char *f
     RT_ASSERT(session->header->buffer);
 
     va_start(args, fmt);
-    length = vsnprintf(session->header->buffer + session->header->length,
+    length = web_vsnprintf(session->header->buffer + session->header->length,
             session->header->size - session->header->length, fmt, args);
     va_end(args);
     if (length < 0)
@@ -655,7 +655,7 @@ static int webclient_send_header(struct webclient_session *session, int method)
         if (method != WEBCLIENT_USER_METHOD)
         {
             /* check and add fields header data */
-            if (memcmp(header, "HTTP/1.", strlen("HTTP/1.")))
+            if (web_memcmp(header, "HTTP/1.", strlen("HTTP/1.")))
             {
                 char *header_buffer = RT_NULL;
                 int length = 0;
@@ -670,13 +670,13 @@ static int webclient_send_header(struct webclient_session *session, int method)
 
                 /* splice http request header data */
                 if (method == WEBCLIENT_GET)
-                    length = snprintf(session->header->buffer, session->header->size, "GET %s HTTP/1.1\r\n%s",
+                    length = web_snprintf(session->header->buffer, session->header->size, "GET %s HTTP/1.1\r\n%s",
                             session->req_url ? session->req_url : "/", header_buffer);
                 else if (method == WEBCLIENT_POST)
-                    length = snprintf(session->header->buffer, session->header->size, "POST %s HTTP/1.1\r\n%s",
+                    length = web_snprintf(session->header->buffer, session->header->size, "POST %s HTTP/1.1\r\n%s",
                             session->req_url ? session->req_url : "/", header_buffer);
                 else if (method == WEBCLIENT_HEAD)
-                    length = snprintf(session->header->buffer, session->header->size, "HEAD %s HTTP/1.1\r\n%s",
+                    length = web_snprintf(session->header->buffer, session->header->size, "HEAD %s HTTP/1.1\r\n%s",
                             session->req_url ? session->req_url : "/", header_buffer);
                 session->header->length = length;
 
@@ -702,7 +702,7 @@ static int webclient_send_header(struct webclient_session *session, int method)
             }
 
             /* header data end */
-            snprintf(session->header->buffer + session->header->length, session->header->size - session->header->length, "\r\n");
+            web_snprintf(session->header->buffer + session->header->length, session->header->size - session->header->length, "\r\n");
             session->header->length += 2;
 
             /* check header size */
@@ -765,7 +765,7 @@ int webclient_handle_response(struct webclient_session *session)
     RT_ASSERT(session);
 
     /* clean header buffer and size */
-    memset(session->header->buffer, 0x00, session->header->size);
+    web_memset(session->header->buffer, 0x00, session->header->size);
     session->header->length = 0;
 
     LOG_D("response header:");
@@ -966,7 +966,7 @@ int webclient_get(struct webclient_session *session, const char *URI)
             webclient_clean(session);
             /* clean webclient session header */
             session->header->length = 0;
-            memset(session->header->buffer, 0, session->header->size);
+            web_memset(session->header->buffer, 0, session->header->size);
 
             rc = webclient_get(session, new_url);
 
@@ -1020,7 +1020,7 @@ int webclient_shard_head_function(struct webclient_session *session, const char
     }
 
     /* clean header buffer and size */
-    memset(session->header->buffer, 0x00, session->header->size);
+    web_memset(session->header->buffer, 0x00, session->header->size);
     session->header->length = 0;
 
     rc = webclient_send_header(session, WEBCLIENT_HEAD);
@@ -1071,7 +1071,7 @@ int webclient_shard_position_function(struct webclient_session *session, const c
     total_len = start + length;
 
     /* clean header buffer and size */
-    memset(session->header->buffer, 0x00, session->header->size);
+    web_memset(session->header->buffer, 0x00, session->header->size);
     session->header->length = 0;
 
     for(start_position = end_position; total_len != end_position + 1;)
@@ -1120,7 +1120,7 @@ int webclient_shard_position_function(struct webclient_session *session, const c
                 webclient_clean(session);
                 /* clean webclient session header */
                 session->header->length = 0;
-                memset(session->header->buffer, 0, session->header->size);
+                web_memset(session->header->buffer, 0, session->header->size);
 
                 rc = webclient_shard_position_function(session, new_url, start, length, mem_size);
 
@@ -1173,7 +1173,7 @@ int webclient_shard_position_function(struct webclient_session *session, const c
         }
 
         /* clean header buffer and size */
-        memset(session->header->buffer, 0x00, session->header->size);
+        web_memset(session->header->buffer, 0x00, session->header->size);
         session->header->length = 0;
     }
 
@@ -1269,7 +1269,7 @@ static int webclient_next_chunk(struct webclient_session *session)
 
     RT_ASSERT(session);
 
-    memset(line, 0x00, sizeof(line));
+    web_memset(line, 0x00, sizeof(line));
     length = webclient_read_line(session, line, sizeof(line));
     if (length > 0)
     {
@@ -1712,7 +1712,7 @@ int webclient_request_header_add(char **request_header, const char *fmt, ...)
 
     va_start(args, fmt);
     header_length = strlen(header);
-    length = vsnprintf(header + header_length, WEBCLIENT_HEADER_BUFSZ - header_length, fmt, args);
+    length = web_vsnprintf(header + header_length, WEBCLIENT_HEADER_BUFSZ - header_length, fmt, args);
     if (length < 0)
     {
         LOG_E("add request header data failed, return length(%d) error.", length);

+ 8 - 8
src/webclient_file.c

@@ -191,17 +191,17 @@ int webclient_post_file(const char* URI, const char* filename,
     header_ptr = header;
 
     /* build boundary */
-    snprintf(boundary, sizeof(boundary), "----------------------------%012d", rt_tick_get());
+    web_snprintf(boundary, sizeof(boundary), "----------------------------%012d", rt_tick_get());
 
     /* build encapsulated mime_multipart information*/
     buffer_ptr = buffer;
     /* first boundary */
-    buffer_ptr += snprintf((char*) buffer_ptr,
+    buffer_ptr += web_snprintf((char*) buffer_ptr,
             WEBCLIENT_RESPONSE_BUFSZ - (buffer_ptr - buffer), "--%s\r\n", boundary);
-    buffer_ptr += snprintf((char*) buffer_ptr,
+    buffer_ptr += web_snprintf((char*) buffer_ptr,
             WEBCLIENT_RESPONSE_BUFSZ - (buffer_ptr - buffer),
             "Content-Disposition: form-data; %s\r\n", form_data);
-    buffer_ptr += snprintf((char*) buffer_ptr,
+    buffer_ptr += web_snprintf((char*) buffer_ptr,
             WEBCLIENT_RESPONSE_BUFSZ - (buffer_ptr - buffer),
             "Content-Type: application/octet-stream\r\n\r\n");
     /* calculate content-length */
@@ -209,10 +209,10 @@ int webclient_post_file(const char* URI, const char* filename,
     length += strlen(boundary) + 8; /* add the last boundary */
 
     /* build header for upload */
-    header_ptr += snprintf(header_ptr,
+    header_ptr += web_snprintf(header_ptr,
             WEBCLIENT_HEADER_BUFSZ - (header_ptr - header),
             "Content-Length: %d\r\n", length);
-    header_ptr += snprintf(header_ptr,
+    header_ptr += web_snprintf(header_ptr,
             WEBCLIENT_HEADER_BUFSZ - (header_ptr - header),
             "Content-Type: multipart/form-data; boundary=%s\r\n", boundary);
 
@@ -248,7 +248,7 @@ int webclient_post_file(const char* URI, const char* filename,
     }
 
     /* send last boundary */
-    snprintf((char*) buffer, WEBCLIENT_RESPONSE_BUFSZ, "\r\n--%s--\r\n", boundary);
+    web_snprintf((char*) buffer, WEBCLIENT_RESPONSE_BUFSZ, "\r\n--%s--\r\n", boundary);
     webclient_write(session, buffer, strlen(boundary) + 8);
 
     extern int webclient_handle_response(struct webclient_session *session);
@@ -263,7 +263,7 @@ int webclient_post_file(const char* URI, const char* filename,
     {
         int bytes_read = 0;
 
-        memset(buffer, 0x00, WEBCLIENT_RESPONSE_BUFSZ);
+        web_memset(buffer, 0x00, WEBCLIENT_RESPONSE_BUFSZ);
         do
         {
             bytes_read = webclient_read(session, buffer,