[evolution-data-server] [IMAPx] Add a code for completeness check of camel-imapx-tokens.txt



commit f3445c91502c212fb4a13dc9b7fbe2b1eada248e
Author: Milan Crha <mcrha redhat com>
Date:   Thu Mar 29 11:11:56 2018 +0200

    [IMAPx] Add a code for completeness check of camel-imapx-tokens.txt
    
    It's executed and compiled only with the maintainer mode on, thus
    it doesn't cause any harm in the production code.

 .../providers/imapx/camel-imapx-list-response.c    |    2 +
 src/camel/providers/imapx/camel-imapx-logger.c     |    2 +
 src/camel/providers/imapx/camel-imapx-mailbox.c    |    2 +
 .../imapx/camel-imapx-namespace-response.c         |    2 +
 src/camel/providers/imapx/camel-imapx-namespace.c  |    2 +
 src/camel/providers/imapx/camel-imapx-settings.c   |    2 +
 .../providers/imapx/camel-imapx-status-response.c  |    2 +
 src/camel/providers/imapx/camel-imapx-utils.c      |   98 ++++++++++++++++++++
 src/camel/providers/imapx/camel-imapx-utils.h      |    5 +-
 9 files changed, 116 insertions(+), 1 deletions(-)
---
diff --git a/src/camel/providers/imapx/camel-imapx-list-response.c 
b/src/camel/providers/imapx/camel-imapx-list-response.c
index 4ff31dc..a11753e 100644
--- a/src/camel/providers/imapx/camel-imapx-list-response.c
+++ b/src/camel/providers/imapx/camel-imapx-list-response.c
@@ -31,6 +31,8 @@
  * camel_store_get_folder_info().
  **/
 
+#include "evolution-data-server-config.h"
+
 #include "camel-imapx-list-response.h"
 
 #include "camel-imapx-utils.h"
diff --git a/src/camel/providers/imapx/camel-imapx-logger.c b/src/camel/providers/imapx/camel-imapx-logger.c
index 50819e5..6d15cd5 100644
--- a/src/camel/providers/imapx/camel-imapx-logger.c
+++ b/src/camel/providers/imapx/camel-imapx-logger.c
@@ -25,6 +25,8 @@
  * Attaches to the #GInputStream and #GOutputStream.
  **/
 
+#include "evolution-data-server-config.h"
+
 #include "camel-imapx-logger.h"
 
 #include <string.h>
diff --git a/src/camel/providers/imapx/camel-imapx-mailbox.c b/src/camel/providers/imapx/camel-imapx-mailbox.c
index d0a8d36..f4cbc70 100644
--- a/src/camel/providers/imapx/camel-imapx-mailbox.c
+++ b/src/camel/providers/imapx/camel-imapx-mailbox.c
@@ -28,6 +28,8 @@
  * This is why instantiation requires a #CamelIMAPXListResponse.
  **/
 
+#include "evolution-data-server-config.h"
+
 #include "camel-imapx-mailbox.h"
 #include "camel-imapx-utils.h"
 
diff --git a/src/camel/providers/imapx/camel-imapx-namespace-response.c 
b/src/camel/providers/imapx/camel-imapx-namespace-response.c
index 219440f..545c3bd 100644
--- a/src/camel/providers/imapx/camel-imapx-namespace-response.c
+++ b/src/camel/providers/imapx/camel-imapx-namespace-response.c
@@ -25,6 +25,8 @@
  * #CamelIMAPXNamespaceCategory.
  **/
 
+#include "evolution-data-server-config.h"
+
 #include "camel-imapx-namespace-response.h"
 
 #include <string.h>
diff --git a/src/camel/providers/imapx/camel-imapx-namespace.c 
b/src/camel/providers/imapx/camel-imapx-namespace.c
index 96cd98f..02b8ee8 100644
--- a/src/camel/providers/imapx/camel-imapx-namespace.c
+++ b/src/camel/providers/imapx/camel-imapx-namespace.c
@@ -25,6 +25,8 @@
  * and a mailbox separator character.
  **/
 
+#include "evolution-data-server-config.h"
+
 #include "camel-imapx-namespace.h"
 
 #define CAMEL_IMAPX_NAMESPACE_GET_PRIVATE(obj) \
diff --git a/src/camel/providers/imapx/camel-imapx-settings.c 
b/src/camel/providers/imapx/camel-imapx-settings.c
index f8535b0..1dca933 100644
--- a/src/camel/providers/imapx/camel-imapx-settings.c
+++ b/src/camel/providers/imapx/camel-imapx-settings.c
@@ -15,6 +15,8 @@
  *
  */
 
+#include "evolution-data-server-config.h"
+
 #include "camel-imapx-settings.h"
 
 #define MIN_CONCURRENT_CONNECTIONS 1
diff --git a/src/camel/providers/imapx/camel-imapx-status-response.c 
b/src/camel/providers/imapx/camel-imapx-status-response.c
index 3e1168b..6fa1d93 100644
--- a/src/camel/providers/imapx/camel-imapx-status-response.c
+++ b/src/camel/providers/imapx/camel-imapx-status-response.c
@@ -25,6 +25,8 @@
  * counts and change tracking indicators.
  **/
 
+#include "evolution-data-server-config.h"
+
 #include "camel-imapx-status-response.h"
 
 #include "camel-imapx-utils.h"
diff --git a/src/camel/providers/imapx/camel-imapx-utils.c b/src/camel/providers/imapx/camel-imapx-utils.c
index cc861d5..3c8b1a5 100644
--- a/src/camel/providers/imapx/camel-imapx-utils.c
+++ b/src/camel/providers/imapx/camel-imapx-utils.c
@@ -3166,6 +3166,100 @@ fail:
 
 /* ********************************************************************** */
 
+#ifdef ENABLE_MAINTAINER_MODE
+
+static void
+imapx_verify_tokens_tab (void)
+{
+       #define item(x) { x, #x }
+       struct _values {
+               camel_imapx_id_t id;
+               const gchar *str;
+       } values[] = {
+               item (IMAPX_ALERT),
+               item (IMAPX_APPENDUID),
+               item (IMAPX_BAD),
+               item (IMAPX_BODY),
+               item (IMAPX_BODYSTRUCTURE),
+               item (IMAPX_BYE),
+               item (IMAPX_CAPABILITY),
+               item (IMAPX_CLOSED),
+               item (IMAPX_COPYUID),
+               item (IMAPX_ENVELOPE),
+               item (IMAPX_EXISTS),
+               item (IMAPX_EXPUNGE),
+               item (IMAPX_FETCH),
+               item (IMAPX_FLAGS),
+               item (IMAPX_HIGHESTMODSEQ),
+               item (IMAPX_INTERNALDATE),
+               item (IMAPX_LIST),
+               item (IMAPX_LSUB),
+               item (IMAPX_MESSAGES),
+               item (IMAPX_MODSEQ),
+               item (IMAPX_NAMESPACE),
+               item (IMAPX_NEWNAME),
+               item (IMAPX_NO),
+               item (IMAPX_NOMODSEQ),
+               item (IMAPX_OK),
+               item (IMAPX_PARSE),
+               item (IMAPX_PERMANENTFLAGS),
+               item (IMAPX_PREAUTH),
+               { IMAPX_READ_ONLY, "READ-ONLY" },
+               { IMAPX_READ_WRITE, "READ-WRITE" },
+               item (IMAPX_RECENT),
+               { IMAPX_RFC822_HEADER, "RFC822.HEADER" },
+               { IMAPX_RFC822_SIZE, "RFC822.SIZE" },
+               { IMAPX_RFC822_TEXT, "RFC822.TEXT" },
+               item (IMAPX_STATUS),
+               item (IMAPX_TRYCREATE),
+               item (IMAPX_UID),
+               item (IMAPX_UIDVALIDITY),
+               item (IMAPX_UNSEEN),
+               item (IMAPX_UIDNEXT),
+               item (IMAPX_VANISHED),
+               item (IMAPX_ALREADYEXISTS),
+               item (IMAPX_AUTHENTICATIONFAILED),
+               item (IMAPX_AUTHORIZATIONFAILED),
+               item (IMAPX_CANNOT),
+               item (IMAPX_CLIENTBUG),
+               item (IMAPX_CONTACTADMIN),
+               item (IMAPX_CORRUPTION),
+               item (IMAPX_EXPIRED),
+               item (IMAPX_EXPUNGEISSUED),
+               item (IMAPX_INUSE),
+               item (IMAPX_LIMIT),
+               item (IMAPX_NONEXISTENT),
+               item (IMAPX_NOPERM),
+               item (IMAPX_OVERQUOTA),
+               item (IMAPX_PRIVACYREQUIRED),
+               item (IMAPX_SERVERBUG),
+               item (IMAPX_UNAVAILABLE)
+       };
+       #undef item
+       gint ii;
+
+       g_warn_if_fail (G_N_ELEMENTS (values) == IMAPX_LAST_ID_VALUE - 1);
+
+       for (ii = 0; ii < G_N_ELEMENTS (values); ii++) {
+               const gchar *token;
+               camel_imapx_id_t found_id;
+
+               token = strchr (values[ii].str, '_');
+               if (token)
+                       token++;
+               else
+                       token = values[ii].str;
+
+               found_id = imapx_tokenise (token, strlen (token));
+               if (found_id == IMAPX_UNKNOWN)
+                       g_warning ("%s: Unknown token %d (%s) in enum, add it to camel-imapx-tokens.txt", 
G_STRFUNC, values[ii].id, values[ii].str);
+               else if (found_id != values[ii].id)
+                       g_warning ("%s: Token '%s' expected id %d, but got %d", G_STRFUNC, values[ii].str, 
values[ii].id, found_id);
+       }
+}
+
+#endif
+
 /*
  * From rfc2060
  *
@@ -3266,6 +3360,10 @@ imapx_utils_init (void)
                create_initial_capabilities_table ();
                camel_imapx_set_debug_flags ();
 
+               #ifdef ENABLE_MAINTAINER_MODE
+               imapx_verify_tokens_tab ();
+               #endif
+
                g_once_init_leave (&imapx_utils_initialized, 1);
        }
 }
diff --git a/src/camel/providers/imapx/camel-imapx-utils.h b/src/camel/providers/imapx/camel-imapx-utils.h
index 04c73cb..9f1eaa7 100644
--- a/src/camel/providers/imapx/camel-imapx-utils.h
+++ b/src/camel/providers/imapx/camel-imapx-utils.h
@@ -95,7 +95,10 @@ typedef enum _camel_imapx_id_t {
        IMAPX_OVERQUOTA,
        IMAPX_PRIVACYREQUIRED,
        IMAPX_SERVERBUG,
-       IMAPX_UNAVAILABLE
+       IMAPX_UNAVAILABLE,
+
+       /* Sentinel for completeness check */
+       IMAPX_LAST_ID_VALUE
 } camel_imapx_id_t;
 
 #define CAMEL_IMAPX_UNTAGGED_BAD        "BAD"


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]