You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2016/09/13 21:46:36 UTC
qpid-proton git commit: PROTON-1301: add pn_condition_format for
formatted descriptions
Repository: qpid-proton
Updated Branches:
refs/heads/master 6c131d8ac -> 12a6e4d33
PROTON-1301: add pn_condition_format for formatted descriptions
Add pn_condition_format/vformat similar to pn_error_format/vformat so a
condition description can be set using a printf-style format string.
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/12a6e4d3
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/12a6e4d3
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/12a6e4d3
Branch: refs/heads/master
Commit: 12a6e4d3359322c707c497b3da3647d9bd80012f
Parents: 6c131d8
Author: Alan Conway <ac...@redhat.com>
Authored: Tue Sep 6 17:05:09 2016 -0400
Committer: Alan Conway <ac...@redhat.com>
Committed: Tue Sep 13 12:20:06 2016 -0500
----------------------------------------------------------------------
proton-c/include/proton/condition.h | 6 ++++
proton-c/include/proton/cproton.i | 3 +-
proton-c/src/engine/engine.c | 25 ++++++++++++++
proton-c/src/tests/CMakeLists.txt | 1 +
proton-c/src/tests/condition.c | 56 ++++++++++++++++++++++++++++++++
5 files changed, 90 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/12a6e4d3/proton-c/include/proton/condition.h
----------------------------------------------------------------------
diff --git a/proton-c/include/proton/condition.h b/proton-c/include/proton/condition.h
index 34b2cbf..cf2f8aa 100644
--- a/proton-c/include/proton/condition.h
+++ b/proton-c/include/proton/condition.h
@@ -131,6 +131,12 @@ PN_EXTERN int pn_condition_set_description(pn_condition_t *condition, const char
*/
PN_EXTERN pn_data_t *pn_condition_info(pn_condition_t *condition);
+/** Set the name and printf-style formatted description. */
+PN_EXTERN int pn_condition_vformat(pn_condition_t *, const char *name, const char *fmt, va_list ap);
+
+/** Set the name and printf-style formatted description. */
+PN_EXTERN int pn_condition_format(pn_condition_t *, const char *name, const char *fmt, ...);
+
/**
* Returns true if the condition is a redirect.
*
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/12a6e4d3/proton-c/include/proton/cproton.i
----------------------------------------------------------------------
diff --git a/proton-c/include/proton/cproton.i b/proton-c/include/proton/cproton.i
index 8b0bf66..6129037 100644
--- a/proton-c/include/proton/cproton.i
+++ b/proton-c/include/proton/cproton.i
@@ -64,7 +64,8 @@ typedef unsigned long int uintptr_t;
%ignore pn_error_format;
%ignore pn_error_vformat;
-
+%ignore pn_condition_format;
+%ignore pn_condition_vformat;
/* checks that ensure only allowed values are supplied or returned */
%aggregate_check(int, check_error,
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/12a6e4d3/proton-c/src/engine/engine.c
----------------------------------------------------------------------
diff --git a/proton-c/src/engine/engine.c b/proton-c/src/engine/engine.c
index b076a5f..ca7e4d8 100644
--- a/proton-c/src/engine/engine.c
+++ b/proton-c/src/engine/engine.c
@@ -2090,6 +2090,31 @@ int pn_condition_set_description(pn_condition_t *condition, const char *descript
return pn_string_set(condition->description, description);
}
+int pn_condition_vformat(pn_condition_t *condition, const char *name, const char *fmt, va_list ap)
+{
+ assert(condition);
+ int err = pn_condition_set_name(condition, name);
+ if (err)
+ return err;
+
+ char text[1024];
+ size_t n = vsnprintf(text, 1024, fmt, ap);
+ if (n >= sizeof(text))
+ text[sizeof(text)-1] = '\0';
+ err = pn_condition_set_description(condition, text);
+ return err;
+}
+
+int pn_condition_format(pn_condition_t *condition, const char *name, const char *fmt, ...)
+{
+ assert(condition);
+ va_list ap;
+ va_start(ap, fmt);
+ int err = pn_condition_vformat(condition, name, fmt, ap);
+ va_end(ap);
+ return err;
+}
+
pn_data_t *pn_condition_info(pn_condition_t *condition)
{
assert(condition);
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/12a6e4d3/proton-c/src/tests/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/CMakeLists.txt b/proton-c/src/tests/CMakeLists.txt
index 3ea8bcf..59c7665 100644
--- a/proton-c/src/tests/CMakeLists.txt
+++ b/proton-c/src/tests/CMakeLists.txt
@@ -48,3 +48,4 @@ pn_add_c_test (c-refcount-tests refcount.c)
pn_add_c_test (c-reactor-tests reactor.c)
pn_add_c_test (c-event-tests event.c)
pn_add_c_test (c-data-tests data.c)
+pn_add_c_test (c-condition-tests condition.c)
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/12a6e4d3/proton-c/src/tests/condition.c
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/condition.c b/proton-c/src/tests/condition.c
new file mode 100644
index 0000000..b7d63be
--- /dev/null
+++ b/proton-c/src/tests/condition.c
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <proton/condition.h>
+#include <proton/connection.h>
+#include <stdio.h>
+#include <string.h>
+
+static int fail = 0;
+
+#define TEST_ASSERT(B) \
+ if(!(B)) { \
+ ++fail; \
+ printf("%s:%d %s\n", __FILE__, __LINE__ , #B); \
+ }
+
+int main(int argc, char **argv) {
+ pn_connection_t *c = pn_connection();
+ pn_condition_t *cond = pn_connection_condition(c);
+
+ // Verify empty
+ TEST_ASSERT(!pn_condition_is_set(cond));
+ TEST_ASSERT(!pn_condition_get_name(cond));
+ TEST_ASSERT(!pn_condition_get_description(cond));
+
+ // Format a condition
+ pn_condition_format(cond, "foo", "hello %d", 42);
+ TEST_ASSERT(pn_condition_is_set(cond));
+ TEST_ASSERT(strcmp("foo", pn_condition_get_name(cond)) == 0);
+ TEST_ASSERT(strcmp("hello 42", pn_condition_get_description(cond)) == 0);
+
+ // Clear and verify empty
+ pn_condition_clear(cond);
+ TEST_ASSERT(!pn_condition_is_set(cond));
+ TEST_ASSERT(!pn_condition_get_name(cond));
+ TEST_ASSERT(!pn_condition_get_description(cond));
+
+ pn_connection_release(c);
+ return fail;
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org