target: remove events that are set to empty string

Current code allows replacing the body of an existing event, but
it doesn't provides a way to remove it.
Replacing the event with an empty string makes the event still
present and visible through
	$target_name eventlist

The presence of empty events makes more complex checking for the
event not set or set to empty.

Remove the event when set to empty string.

While there, add 'Jim_Length' to the list of allowed CamelCase
symbols, avoiding the associated checkpatch error.

Change-Id: I1ec2e1a71d298a0eba0b6863902645bcc6c4cb09
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/8814
Tested-by: jenkins
This commit is contained in:
Antonio Borneo
2025-03-23 15:27:37 +01:00
parent c023534e7b
commit 160f7b3e5d
2 changed files with 12 additions and 1 deletions

View File

@@ -4968,6 +4968,17 @@ no_params:
LOG_INFO("DEPRECATED target event %s; use TPIU events {pre,post}-{enable,disable}", n->name);
/* END_DEPRECATED_TPIU */
jim_getopt_obj(goi, &o);
if (Jim_Length(o) == 0) {
/* empty action, drop existing one */
if (teap) {
list_del(&teap->list);
Jim_DecrRefCount(teap->interp, teap->body);
free(teap);
}
break;
}
bool replace = true;
if (!teap) {
/* create new */
@@ -4976,7 +4987,6 @@ no_params:
}
teap->event = n->value;
teap->interp = goi->interp;
jim_getopt_obj(goi, &o);
if (teap->body)
Jim_DecrRefCount(teap->interp, teap->body);
teap->body = Jim_DuplicateObj(goi->interp, o);