Author: rhs
Date: Mon Oct 21 12:33:13 2013
New Revision: 1534130
URL: http://svn.apache.org/r1534130
Log:
PROTON-432: switched pn_condition_t to use pn_string_t, this fixes the seg fault
Modified:
qpid/proton/trunk/proton-c/src/engine/engine-internal.h
qpid/proton/trunk/proton-c/src/engine/engine.c
qpid/proton/trunk/proton-c/src/transport/transport.c
Modified: qpid/proton/trunk/proton-c/src/engine/engine-internal.h
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/engine/engine-internal.h?rev=1534130&r1=1534129&r2=1534130&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine-internal.h (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine-internal.h Mon Oct 21 12:33:13
2013
@@ -33,12 +33,9 @@ typedef enum pn_endpoint_type_t {CONNECT
typedef struct pn_endpoint_t pn_endpoint_t;
-#define COND_NAME_MAX (256)
-#define COND_DESC_MAX (1024)
-
struct pn_condition_t {
- char name[COND_NAME_MAX];
- char description[COND_DESC_MAX];
+ pn_string_t *name;
+ pn_string_t *description;
pn_data_t *info;
};
Modified: qpid/proton/trunk/proton-c/src/engine/engine.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/engine/engine.c?rev=1534130&r1=1534129&r2=1534130&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine.c (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine.c Mon Oct 21 12:33:13 2013
@@ -104,14 +104,16 @@ void pn_connection_set_context(pn_connec
void pn_condition_init(pn_condition_t *condition)
{
- condition->name[0] = '\0';
- condition->description[0] = '\0';
+ condition->name = pn_string(NULL);
+ condition->description = pn_string(NULL);
condition->info = pn_data(16);
}
void pn_condition_tini(pn_condition_t *condition)
{
pn_data_free(condition->info);
+ pn_free(condition->description);
+ pn_free(condition->name);
}
void pn_add_session(pn_connection_t *conn, pn_session_t *ssn)
@@ -1465,55 +1467,39 @@ pn_condition_t *pn_link_remote_condition
bool pn_condition_is_set(pn_condition_t *condition)
{
- return condition && condition->name[0];
+ return condition && pn_string_get(condition->name);
}
void pn_condition_clear(pn_condition_t *condition)
{
assert(condition);
- condition->name[0] = '\0';
- condition->description[0] = '\0';
+ pn_string_clear(condition->name);
+ pn_string_clear(condition->description);
pn_data_clear(condition->info);
}
const char *pn_condition_get_name(pn_condition_t *condition)
{
assert(condition);
- return condition->name[0] ? condition->name : NULL;
-}
-
-static inline int pn_set_buf(char *dst, const char *src, size_t capacity)
-{
- if (!src) {
- dst[0] = '\0';
- return 0;
- } else {
- unsigned n = strlen(src) + 1;
- if (n > capacity) {
- return PN_ARG_ERR;
- } else {
- strncpy(dst, src, n);
- return 0;
- }
- }
+ return pn_string_get(condition->name);
}
int pn_condition_set_name(pn_condition_t *condition, const char *name)
{
assert(condition);
- return pn_set_buf(condition->name, name, COND_NAME_MAX);
+ return pn_string_set(condition->name, name);
}
const char *pn_condition_get_description(pn_condition_t *condition)
{
assert(condition);
- return condition->description[0] ? condition->description : NULL;
+ return pn_string_get(condition->description);
}
int pn_condition_set_description(pn_condition_t *condition, const char
*description)
{
assert(condition);
- return pn_set_buf(condition->description, description, COND_DESC_MAX);
+ return pn_string_set(condition->description, description);
}
pn_data_t *pn_condition_info(pn_condition_t *condition)
Modified: qpid/proton/trunk/proton-c/src/transport/transport.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/transport/transport.c?rev=1534130&r1=1534129&r2=1534130&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/transport/transport.c (original)
+++ qpid/proton/trunk/proton-c/src/transport/transport.c Mon Oct 21 12:33:13
2013
@@ -769,8 +769,8 @@ static int pn_scan_error(pn_data_t *data
pn_condition_clear(condition);
int err = pn_data_scan(data, fmt, &cond, &desc, condition->info);
if (err) return err;
- strncat(condition->name, cond.start, cond.size);
- strncat(condition->description, desc.start, desc.size);
+ pn_string_setn(condition->name, cond.start, cond.size);
+ pn_string_setn(condition->description, desc.start, desc.size);
pn_data_rewind(condition->info);
return 0;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]