chiark / gitweb /
manage nmra retrans properly
authorian <ian>
Sat, 17 May 2008 18:31:13 +0000 (18:31 +0000)
committerian <ian>
Sat, 17 May 2008 18:31:13 +0000 (18:31 +0000)
hostside/commands.c

index 7f1ef8dc524758b4af9fd4978997dffa6e152e57..244cc87c679f5aea6172724d6ed42eb446abb485 100644 (file)
@@ -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                            },