diff --git a/urjtag/include/urjtag/bsbit.h b/urjtag/include/urjtag/bsbit.h
index 1182bd78..dd0c06e2 100644
--- a/urjtag/include/urjtag/bsbit.h
+++ b/urjtag/include/urjtag/bsbit.h
@@ -55,9 +55,11 @@ struct urj_bsbit
* @param name associated signal name
* @param type URJ_BSBIT_{INPUT|OUTPUT|BIDIR|CONTROL|INTERNAL}
* @param safe default (safe) value (0|1)
+ *
+ * @return URJ_STATUS_OK on success; URJ_STATUS_FAIL on error
*/
-urj_bsbit_t *urj_part_bsbit_alloc (urj_part_t *part, int bit,
- const char *name, int type, int safe);
+int urj_part_bsbit_alloc (urj_part_t *part, int bit, const char *name,
+ int type, int safe);
/**
* Define new BSR (Boundary Scan Register) bit for signal name
.
* Additionally, define control bit.
@@ -70,11 +72,12 @@ urj_bsbit_t *urj_part_bsbit_alloc (urj_part_t *part, int bit,
* @param ctrl_num control bit number
* @param ctrl_val control value
* @param ctrl_state control state; valid statis is only URJ_BSBIT_STATE_Z
+ *
+ * @return URJ_STATUS_OK on success; URJ_STATUS_FAIL on error
*/
-urj_bsbit_t *urj_part_bsbit_alloc_control (urj_part_t *part, int bit,
- const char *name, int type, int safe,
- int ctrl_num, int ctrl_val,
- int ctrl_state);
+int urj_part_bsbit_alloc_control (urj_part_t *part, int bit, const char *name,
+ int type, int safe, int ctrl_num,
+ int ctrl_val, int ctrl_state);
void urj_part_bsbit_free (urj_bsbit_t *b);
diff --git a/urjtag/src/cmd/cmd_bit.c b/urjtag/src/cmd/cmd_bit.c
index 94a774fe..de8b2d79 100644
--- a/urjtag/src/cmd/cmd_bit.c
+++ b/urjtag/src/cmd/cmd_bit.c
@@ -138,9 +138,8 @@ cmd_bit_run (urj_chain_t *chain, char *params[])
/* test for control bit */
if (urj_cmd_params (params) == 5) {
- part->bsbits[bit] = urj_part_bsbit_alloc (part, bit, params[4], type,
- safe);
- if (part->bsbits[bit] == NULL)
+ if (urj_part_bsbit_alloc (part, bit, params[4], type,
+ safe) != URJ_STATUS_OK)
{
printf ("%s for command '%s'\n", urj_error_describe(), command);
urj_error_get_reset();
@@ -173,11 +172,9 @@ cmd_bit_run (urj_chain_t *chain, char *params[])
control_state = URJ_BSBIT_STATE_Z;
- part->bsbits[bit] = urj_part_bsbit_alloc_control (part, bit, params[4],
- type, safe, control,
- control_value,
- control_state);
- if (part->bsbits[bit] == NULL)
+ if (urj_part_bsbit_alloc_control (part, bit, params[4], type, safe,
+ control, control_value,
+ control_state) != URJ_STATUS_OK)
{
printf ("%s for command '%s'\n", urj_error_describe(), command);
urj_error_get_reset();
diff --git a/urjtag/src/part/bsbit.c b/urjtag/src/part/bsbit.c
index 147cd2f5..6f9c2a89 100644
--- a/urjtag/src/part/bsbit.c
+++ b/urjtag/src/part/bsbit.c
@@ -34,7 +34,7 @@
#include
#include
-urj_bsbit_t *
+int
urj_part_bsbit_alloc_control (urj_part_t *part, int bit, const char *name,
int type, int safe,
int ctrl_num, int ctrl_val, int ctrl_state)
@@ -48,18 +48,18 @@ urj_part_bsbit_alloc_control (urj_part_t *part, int bit, const char *name,
{
urj_error_set(URJ_ERROR_NOTFOUND,
_("missing Boundary Scan Register (BSR)"));
- return NULL;
+ return URJ_STATUS_FAIL;
}
if (bit >= bsr->in->len)
{
urj_error_set(URJ_ERROR_INVALID, _("invalid boundary bit number"));
- return NULL;
+ return URJ_STATUS_FAIL;
}
if (part->bsbits[bit] != NULL)
{
urj_error_set(URJ_ERROR_ALREADY, _("duplicate bit declaration"));
- return NULL;
+ return URJ_STATUS_FAIL;
}
signal = urj_part_find_signal (part, name);
@@ -70,7 +70,7 @@ urj_part_bsbit_alloc_control (urj_part_t *part, int bit, const char *name,
if (!b)
{
urj_error_set (URJ_ERROR_OUT_OF_MEMORY, "malloc fails");
- return NULL;
+ return URJ_STATUS_FAIL;
}
b->name = strdup (name);
@@ -78,7 +78,7 @@ urj_part_bsbit_alloc_control (urj_part_t *part, int bit, const char *name,
{
free (b);
urj_error_set (URJ_ERROR_OUT_OF_MEMORY, "strdup fails");
- return NULL;
+ return URJ_STATUS_FAIL;
}
b->bit = bit;
@@ -87,6 +87,8 @@ urj_part_bsbit_alloc_control (urj_part_t *part, int bit, const char *name,
b->safe = safe;
b->control = -1;
+ part->bsbits[bit] = b;
+
if (signal != NULL)
{
switch (type)
@@ -109,25 +111,22 @@ urj_part_bsbit_alloc_control (urj_part_t *part, int bit, const char *name,
if (ctrl_num >= bsr->in->len)
{
urj_error_set(URJ_ERROR_INVALID, _("invalid control bit number\n"));
- return NULL;
+ return URJ_STATUS_FAIL;
}
b->control = ctrl_num;
b->control_value = ctrl_val;
b->control_state = URJ_BSBIT_STATE_Z;
}
- return b;
+ return URJ_STATUS_OK;
}
-urj_bsbit_t *
+int
urj_part_bsbit_alloc (urj_part_t *part, int bit, const char *name, int type,
int safe)
{
- urj_bsbit_t *b;
-
- b = urj_part_bsbit_alloc_control (part, bit, name, type, safe, -1, -1, -1);
-
- return b;
+ return urj_part_bsbit_alloc_control (part, bit, name, type, safe,
+ -1, -1, -1);
}
void