Explorar el Código

Fix some clang diagnostic messages (see #94)

bel hace 10 años
padre
commit
879f18ca07
Se han modificado 2 ficheros con 41 adiciones y 29 borrados
  1. 17 7
      src/civetweb.c
  2. 24 22
      src/md5.inl

+ 17 - 7
src/civetweb.c

@@ -738,12 +738,12 @@ struct file {
 /* Describes listening socket, or socket which was accept()-ed by the master
    thread and queued for future handling by the worker thread. */
 struct socket {
-    SOCKET sock;          /* Listening socket */
-    union usa lsa;        /* Local socket address */
-    union usa rsa;        /* Remote socket address */
-    unsigned is_ssl:1;    /* Is port SSL-ed */
-    unsigned ssl_redir:1; /* Is port supposed to redirect everything to SSL
-                             port */
+    SOCKET sock;              /* Listening socket */
+    union usa lsa;            /* Local socket address */
+    union usa rsa;            /* Remote socket address */
+    unsigned char is_ssl;     /* Is port SSL-ed */
+    unsigned char ssl_redir;  /* Is port supposed to redirect everything to SSL
+                                 port */
 };
 
 /* NOTE(lsm): this enum shoulds be in sync with the config_options below. */
@@ -1174,7 +1174,17 @@ static int mg_vsnprintf(struct mg_connection *conn, char *buf, size_t buflen,
     if (buflen == 0)
         return 0;
 
-    n = vsnprintf(buf, buflen, fmt, ap);
+    #ifdef __clang__
+    #pragma clang diagnostic push
+    #pragma clang diagnostic ignored "Wformat-nonliteral"
+    /* Using fmt as a non-literal is intended here, since it is mostly called indirectly by mg_snprintf */
+    #endif
+
+    n = vsnprintf(buf, buflen, fmt, ap);
+
+    #ifdef __clang__
+    #pragma clang diagnostic pop
+    #endif
 
     if (n < 0) {
         mg_cry(conn, "vsnprintf error");

+ 24 - 22
src/md5.inl

@@ -14,7 +14,7 @@
 
   This code implements the MD5 Algorithm defined in RFC 1321, whose
   text is available at
-	http://www.ietf.org/rfc/rfc1321.txt
+    http://www.ietf.org/rfc/rfc1321.txt
   The code is derived from the text of the RFC, including the test suite
   (section A.5) but excluding the rest of Appendix A.  It does not include
   any code or documentation that is identified in the RFC as being
@@ -25,12 +25,12 @@
   that follows (in reverse chronological order):
 
   2002-04-13 lpd Removed support for non-ANSI compilers; removed
-	references to Ghostscript; clarified derivation from RFC 1321;
-	now handles byte order either statically or dynamically.
+    references to Ghostscript; clarified derivation from RFC 1321;
+    now handles byte order either statically or dynamically.
   1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
   1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
-	added conditionalization for C++ compilation from Martin
-	Purschke <purschke@bnl.gov>.
+    added conditionalization for C++ compilation from Martin
+    Purschke <purschke@bnl.gov>.
   1999-05-03 lpd Original version.
  */
 
@@ -52,9 +52,9 @@ typedef unsigned int md5_word_t; /* 32-bit word */
 
 /* Define the state of the MD5 Algorithm. */
 typedef struct md5_state_s {
-    md5_word_t count[2];	/* message length in bits, lsw first */
-    md5_word_t abcd[4];		/* digest buffer */
-    md5_byte_t buf[64];		/* accumulate block */
+    md5_word_t count[2];    /* message length in bits, lsw first */
+    md5_word_t abcd[4];        /* digest buffer */
+    md5_byte_t buf[64];        /* accumulate block */
 } md5_state_t;
 
 #ifdef __cplusplus
@@ -106,7 +106,7 @@ MD5_STATIC void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
 
   This code implements the MD5 Algorithm defined in RFC 1321, whose
   text is available at
-	http://www.ietf.org/rfc/rfc1321.txt
+    http://www.ietf.org/rfc/rfc1321.txt
   The code is derived from the text of the RFC, including the test suite
   (section A.5) but excluding the rest of Appendix A.  It does not include
   any code or documentation that is identified in the RFC as being
@@ -117,14 +117,14 @@ MD5_STATIC void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
   that follows (in reverse chronological order):
 
   2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order
-	either statically or dynamically; added missing #include <string.h>
-	in library.
+    either statically or dynamically; added missing #include <string.h>
+    in library.
   2002-03-11 lpd Corrected argument list for main(), and added int return
-	type, in test program and T value program.
+    type, in test program and T value program.
   2002-02-21 lpd Added missing #include <stdio.h> in test program.
   2000-07-03 lpd Patched to eliminate warnings about "constant is
-	unsigned in ANSI C, signed in traditional"; made test program
-	self-checking.
+    unsigned in ANSI C, signed in traditional"; made test program
+    self-checking.
   1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
   1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
   1999-05-03 lpd Original version.
@@ -134,7 +134,7 @@ MD5_STATIC void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
 #include <string.h>
 #endif
 
-#undef BYTE_ORDER	/* 1 = big-endian, -1 = little-endian, 0 = unknown */
+#undef BYTE_ORDER    /* 1 = big-endian, -1 = little-endian, 0 = unknown */
 #ifdef ARCH_IS_BIG_ENDIAN
 #  define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1)
 #else
@@ -235,15 +235,17 @@ md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
 
         if (*((const md5_byte_t *)&w)) /* dynamic little-endian */
 #endif
-#if BYTE_ORDER <= 0		/* little-endian */
+#if BYTE_ORDER <= 0        /* little-endian */
         {
             /*
              * On little-endian machines, we can process properly aligned
              * data without copying it.
              */
             if (!((data - (const md5_byte_t *)0) & 3)) {
-                /* data are properly aligned */
-                X = (const md5_word_t *)data;
+                /* data are properly aligned, a direct assignment is possible */
+                /* cast through a (void *) should avoid a compiler warning,
+                   see https://github.com/bel2125/civetweb/issues/94#issuecomment-98112861 */
+                X = (const md5_word_t *)(void *)data;
             } else {
                 /* not aligned */
                 memcpy(xbuf, data, 64);
@@ -252,9 +254,9 @@ md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
         }
 #endif
 #if BYTE_ORDER == 0
-        else			/* dynamic big-endian */
+        else            /* dynamic big-endian */
 #endif
-#if BYTE_ORDER >= 0		/* big-endian */
+#if BYTE_ORDER >= 0        /* big-endian */
         {
             /*
              * On big-endian machines, we must arrange the bytes in the
@@ -264,9 +266,9 @@ md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
             int i;
 
 #  if BYTE_ORDER == 0
-            X = xbuf;		/* (dynamic only) */
+            X = xbuf;        /* (dynamic only) */
 #  else
-#    define xbuf X		/* (static only) */
+#    define xbuf X        /* (static only) */
 #  endif
             for (i = 0; i < 16; ++i, xp += 4)
                 xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);