From: ian Date: Sat, 17 May 2008 18:31:13 +0000 (+0000) Subject: manage nmra retrans properly X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=76f797a263a7a7cf70c6751ffa5cc340541c4805;p=trains.git manage nmra retrans properly --- diff --git a/hostside/commands.c b/hostside/commands.c index 7f1ef8d..244cc87 100644 --- a/hostside/commands.c +++ b/hostside/commands.c @@ -13,7 +13,7 @@ typedef struct ManualRetransmitNode ManualRetransmitNode; struct ManualRetransmitNode { - ManualRetransmitNode *back, *next; + struct { ManualRetransmitNode *back, *next; } others; char *name; int lname; RetransmitUrgentNode rn; @@ -129,7 +129,7 @@ static int cmd_nmra(ParseState *ps, const CmdInfo *ci) { mrn && !(mrn->lname == lmrname && !memcmp(mrn->name, mrname, lmrname)); - mrn= mrn->next); + mrn= mrn->others.next); if (mrn) { retransmit_urgent_cancel(&mrn->rn); } else { @@ -137,6 +137,7 @@ static int cmd_nmra(ParseState *ps, const CmdInfo *ci) { mrn->name= mmalloc(lmrname); memcpy(mrn->name, mrname, lmrname); mrn->lname= lmrname; + DLIST2_APPEND(mrns,mrn,others); } } @@ -144,6 +145,7 @@ static int cmd_nmra(ParseState *ps, const CmdInfo *ci) { if (!retrans) { return badcmd(ps,"nmra must have slot to cancel or data to send"); } + DLIST2_REMOVE(mrns,mrn,others); free(mrn->name); free(mrn); return 0; @@ -295,7 +297,7 @@ static int cmd_invert(ParseState *ps, const CmdInfo *ci) { const CmdInfo toplevel_cmds[]= { { "!pic", cmd_pic, CIXF_ANYSTA|CIXF_FORCE }, - { "!nmra", cmd_nmra, }, + { "!nmra", cmd_nmra, CIXF_ANYSTA }, { "noop", cmd_noop, CIXF_ANYSTA }, { "movpos", cmd_movpos }, //{ "autopoint", cmd_autopoint },