Browse Source

Fix some clang diagnostic messages (see #94)

bel 10 years ago
parent
commit
879f18ca07
2 changed files with 41 additions and 29 deletions
  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
 /* Describes listening socket, or socket which was accept()-ed by the master
    thread and queued for future handling by the worker thread. */
    thread and queued for future handling by the worker thread. */
 struct socket {
 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. */
 /* 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)
     if (buflen == 0)
         return 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) {
     if (n < 0) {
         mg_cry(conn, "vsnprintf error");
         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
   This code implements the MD5 Algorithm defined in RFC 1321, whose
   text is available at
   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
   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
   (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
   any code or documentation that is identified in the RFC as being
@@ -25,12 +25,12 @@
   that follows (in reverse chronological order):
   that follows (in reverse chronological order):
 
 
   2002-04-13 lpd Removed support for non-ANSI compilers; removed
   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-11-04 lpd Edited comments slightly for automatic TOC extraction.
   1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
   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.
   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. */
 /* Define the state of the MD5 Algorithm. */
 typedef struct md5_state_s {
 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;
 } md5_state_t;
 
 
 #ifdef __cplusplus
 #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
   This code implements the MD5 Algorithm defined in RFC 1321, whose
   text is available at
   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
   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
   (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
   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):
   that follows (in reverse chronological order):
 
 
   2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte 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
   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.
   2002-02-21 lpd Added missing #include <stdio.h> in test program.
   2000-07-03 lpd Patched to eliminate warnings about "constant is
   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-11-04 lpd Edited comments slightly for automatic TOC extraction.
   1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
   1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
   1999-05-03 lpd Original version.
   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>
 #include <string.h>
 #endif
 #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
 #ifdef ARCH_IS_BIG_ENDIAN
 #  define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1)
 #  define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1)
 #else
 #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 */
         if (*((const md5_byte_t *)&w)) /* dynamic little-endian */
 #endif
 #endif
-#if BYTE_ORDER <= 0		/* little-endian */
+#if BYTE_ORDER <= 0        /* little-endian */
         {
         {
             /*
             /*
              * On little-endian machines, we can process properly aligned
              * On little-endian machines, we can process properly aligned
              * data without copying it.
              * data without copying it.
              */
              */
             if (!((data - (const md5_byte_t *)0) & 3)) {
             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 {
             } else {
                 /* not aligned */
                 /* not aligned */
                 memcpy(xbuf, data, 64);
                 memcpy(xbuf, data, 64);
@@ -252,9 +254,9 @@ md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
         }
         }
 #endif
 #endif
 #if BYTE_ORDER == 0
 #if BYTE_ORDER == 0
-        else			/* dynamic big-endian */
+        else            /* dynamic big-endian */
 #endif
 #endif
-#if BYTE_ORDER >= 0		/* big-endian */
+#if BYTE_ORDER >= 0        /* big-endian */
         {
         {
             /*
             /*
              * On big-endian machines, we must arrange the bytes in the
              * 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;
             int i;
 
 
 #  if BYTE_ORDER == 0
 #  if BYTE_ORDER == 0
-            X = xbuf;		/* (dynamic only) */
+            X = xbuf;        /* (dynamic only) */
 #  else
 #  else
-#    define xbuf X		/* (static only) */
+#    define xbuf X        /* (static only) */
 #  endif
 #  endif
             for (i = 0; i < 16; ++i, xp += 4)
             for (i = 0; i < 16; ++i, xp += 4)
                 xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);
                 xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);