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 <[email protected]> Authored: Tue Sep 6 17:05:09 2016 -0400 Committer: Alan Conway <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
