]> granicus.if.org Git - curl/commitdiff
build: cleanup to fix clang warnings/errors
authorDaniel Stenberg <daniel@haxx.se>
Sat, 7 Apr 2018 09:03:18 +0000 (11:03 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Sun, 8 Apr 2018 11:59:30 +0000 (13:59 +0200)
unit1309 and vtls/gtls: error: arithmetic on a null pointer treated as a
cast from integer to pointer is a GNU extension

Reported-by: Rikard Falkeborn
Fixes #2466
Closes #2468

lib/vtls/gtls.c
lib/warnless.h
tests/unit/unit1309.c

index 3f30b6c8c3d5bf6296881d6b4f7675fb160e296b..688e83807910cafa0fd49e405f7beddbec9cab32 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -152,7 +152,8 @@ static int gtls_mapped_sockerrno(void)
 
 static ssize_t Curl_gtls_push(void *s, const void *buf, size_t len)
 {
-  ssize_t ret = swrite(CURLX_POINTER_TO_INTEGER_CAST(s), buf, len);
+  curl_socket_t sock = *(curl_socket_t *)s;
+  ssize_t ret = swrite(sock, buf, len);
 #if defined(USE_WINSOCK) && !defined(GNUTLS_MAPS_WINSOCK_ERRORS)
   if(ret < 0)
     gnutls_transport_set_global_errno(gtls_mapped_sockerrno());
@@ -162,7 +163,8 @@ static ssize_t Curl_gtls_push(void *s, const void *buf, size_t len)
 
 static ssize_t Curl_gtls_pull(void *s, void *buf, size_t len)
 {
-  ssize_t ret = sread(CURLX_POINTER_TO_INTEGER_CAST(s), buf, len);
+  curl_socket_t sock = *(curl_socket_t *)s;
+  ssize_t ret = sread(sock, buf, len);
 #if defined(USE_WINSOCK) && !defined(GNUTLS_MAPS_WINSOCK_ERRORS)
   if(ret < 0)
     gnutls_transport_set_global_errno(gtls_mapped_sockerrno());
@@ -848,7 +850,7 @@ gtls_connect_step1(struct connectdata *conn,
   }
   else {
     /* file descriptor for the socket */
-    transport_ptr = CURLX_INTEGER_TO_POINTER_CAST(conn->sock[sockindex]);
+    transport_ptr = &conn->sock[sockindex];
     gnutls_transport_push = Curl_gtls_push;
     gnutls_transport_pull = Curl_gtls_pull;
   }
index efd552a60e327414f298eeb0835d19d389652491..f6a2d744b76de08981818294f520acd665b24beb 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
 #include <curl/curl.h> /* for curl_socket_t */
 #endif
 
-#define CURLX_POINTER_TO_INTEGER_CAST(p) \
-  ((char *)(p) - (char *)NULL)
-#define CURLX_INTEGER_TO_POINTER_CAST(i) \
-  ((void *)((char *)NULL + (i)))
-
 unsigned short curlx_ultous(unsigned long ulnum);
 
 unsigned char curlx_ultouc(unsigned long ulnum);
index 9a07c933224db2f1749edbccbbe25933402b2728..7d3c00017f597ddd5a7dd03ed150c76e2854152c 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -73,6 +73,7 @@ UNITTEST_START
 
   struct Curl_tree *root, *removed;
   struct Curl_tree nodes[NUM_NODES*3];
+  size_t storage[NUM_NODES*3];
   int rc;
   int i, j;
   struct curltime tv_now = {0, 0};
@@ -81,14 +82,11 @@ UNITTEST_START
   /* add nodes */
   for(i = 0; i < NUM_NODES; i++) {
     struct curltime key;
-    size_t payload;
 
     key.tv_sec = 0;
     key.tv_usec = (541*i)%1023;
-    payload = (size_t) key.tv_usec;
-
-    /* for simplicity */
-    nodes[i].payload = CURLX_INTEGER_TO_POINTER_CAST(payload);
+    storage[i] = key.tv_usec;
+    nodes[i].payload = &storage[i];
     root = Curl_splayinsert(key, root, &nodes[i]);
   }
 
@@ -99,8 +97,8 @@ UNITTEST_START
     int rem = (i + 7)%NUM_NODES;
     printf("Tree look:\n");
     splayprint(root, 0, 1);
-    printf("remove pointer %d, payload %ld\n", rem,
-           CURLX_POINTER_TO_INTEGER_CAST(nodes[rem].payload));
+    printf("remove pointer %d, payload %zd\n", rem,
+           *(size_t *)nodes[rem].payload);
     rc = Curl_splayremovebyaddr(root, &nodes[rem], &root);
     if(rc) {
       /* failed! */
@@ -120,9 +118,8 @@ UNITTEST_START
 
     /* add some nodes with the same key */
     for(j = 0; j <= i % 3; j++) {
-      size_t payload = key.tv_usec*10 + j;
-      /* for simplicity */
-      nodes[i * 3 + j].payload = CURLX_INTEGER_TO_POINTER_CAST(payload);
+      storage[i * 3 + j] = key.tv_usec*10 + j;
+      nodes[i * 3 + j].payload = &storage[i * 3 + j];
       root = Curl_splayinsert(key, root, &nodes[i * 3 + j]);
     }
   }
@@ -133,9 +130,9 @@ UNITTEST_START
     tv_now.tv_usec = i;
     root = Curl_splaygetbest(tv_now, root, &removed);
     while(removed != NULL) {
-      printf("removed payload %ld[%ld]\n",
-             CURLX_POINTER_TO_INTEGER_CAST(removed->payload) / 10,
-             CURLX_POINTER_TO_INTEGER_CAST(removed->payload) % 10);
+      printf("removed payload %zd[%zd]\n",
+             (*(size_t *)removed->payload) / 10,
+             (*(size_t *)removed->payload) % 10);
       root = Curl_splaygetbest(tv_now, root, &removed);
     }
   }
@@ -143,7 +140,3 @@ UNITTEST_START
   fail_unless(root == NULL, "tree not empty when it should be");
 
 UNITTEST_STOP
-
-
-
-