You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ch...@apache.org on 2017/07/07 20:39:44 UTC

[07/14] qpid-dispatch git commit: DISPATCH-760: compare key names using strcmp not iter_equal

DISPATCH-760: compare key names using strcmp not iter_equal


Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/3b05873f
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/3b05873f
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/3b05873f

Branch: refs/heads/master
Commit: 3b05873fcd0f04fda3682e42b024be0ff60babca
Parents: 21014c6
Author: Chuck Rolke <cr...@redhat.com>
Authored: Sat Jul 1 15:51:00 2017 -0400
Committer: Chuck Rolke <cr...@redhat.com>
Committed: Fri Jul 7 10:38:38 2017 -0400

----------------------------------------------------------------------
 include/qpid/dispatch/amqp.h |  1 +
 src/amqp.c                   |  1 +
 src/parse.c                  | 18 +++++++++++-------
 3 files changed, 13 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/3b05873f/include/qpid/dispatch/amqp.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/amqp.h b/include/qpid/dispatch/amqp.h
index beb083a..2de270c 100644
--- a/include/qpid/dispatch/amqp.h
+++ b/include/qpid/dispatch/amqp.h
@@ -112,6 +112,7 @@ extern const char * const QD_MA_TRACE;    ///< Trace
 extern const char * const QD_MA_TO;       ///< To-Override
 extern const char * const QD_MA_PHASE;    ///< Phase for override address
 extern const char * const QD_MA_CLASS;    ///< Message-Class
+extern const int          QD_MA_MAX_KEY;  ///< strlen of longest key name
 /// @}
 
 /** @name Container Capabilities */

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/3b05873f/src/amqp.c
----------------------------------------------------------------------
diff --git a/src/amqp.c b/src/amqp.c
index d2f2cfe..673d7b0 100644
--- a/src/amqp.c
+++ b/src/amqp.c
@@ -28,6 +28,7 @@ const char * const QD_MA_TRACE   = "x-opt-qd.trace";
 const char * const QD_MA_TO      = "x-opt-qd.to";
 const char * const QD_MA_PHASE   = "x-opt-qd.phase";
 const char * const QD_MA_CLASS   = "x-opt-qd.class";
+const int          QD_MA_MAX_KEY = 16;
 
 const char * const QD_CAPABILITY_ROUTER_CONTROL  = "qd.router";
 const char * const QD_CAPABILITY_ROUTER_DATA     = "qd.router-data";

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/3b05873f/src/parse.c
----------------------------------------------------------------------
diff --git a/src/parse.c b/src/parse.c
index 2f04564..1adf189 100644
--- a/src/parse.c
+++ b/src/parse.c
@@ -215,7 +215,6 @@ const char *qd_parse_turbo(qd_iterator_t          *iter,
             // If there are this many in the list then this one cannot be a
             // router annotation and must be a user annotation.
             turbo = DEQ_HEAD(*annos);
-            assert(turbo);
             *user_entries += 1;
             *user_bytes += sizeof(turbo->tag) + turbo->size + turbo->length_of_size;
             DEQ_REMOVE_HEAD(*annos);
@@ -635,24 +634,29 @@ const char *qd_parse_annotations_v1(
         qd_parsed_field_t *val_field = qd_parse(val_iter);
         assert(val_field);
 
+        // Hoist the key name out of the buffers into a normal char array
+        char key_name[QD_MA_MAX_KEY + 1];
+        (void)qd_iterator_strncpy(iter, key_name, QD_MA_MAX_KEY);
+
         // transfer ownership of the extracted value to the message
-        if        (qd_iterator_equal(iter, (unsigned char*) QD_MA_TRACE)) {
+        if        (!strcmp(key_name, QD_MA_TRACE)) {
             *ma_trace = val_field;
-        } else if (qd_iterator_equal(iter, (unsigned char*) QD_MA_INGRESS)) {
+        } else if (!strcmp(key_name, QD_MA_INGRESS)) {
             *ma_ingress = val_field;
-        } else if (qd_iterator_equal(iter, (unsigned char*) QD_MA_TO)) {
+        } else if (!strcmp(key_name, QD_MA_TO)) {
             *ma_to_override = val_field;
-        } else if (qd_iterator_equal(iter, (unsigned char*) QD_MA_PHASE)) {
+        } else if (!strcmp(key_name, QD_MA_PHASE)) {
             *ma_phase = val_field;
         } else {
             // TODO: this key had the QD_MA_PREFIX but it does not match
-            //       one of the actual fields.
+            //       one of the actual fields. 
+            qd_parse_free(val_field);
         }
 
         qd_iterator_free(key_iter);
         qd_parse_free(key_field);
         qd_iterator_free(val_iter);
-        // val_field is handed over the message_private and is freed with the message
+        // val_field is usually handed over to message_private and is freed 
 
         anno = DEQ_NEXT(anno_val);
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org