rem: for (pnode = &temphead; (node = *pnode); pnode = &node->next) if (node->name == name) { unlink (name); *pnode = node->next; free ((char *) node); break; }
add: for (pnode = &temphead; (node = *pnode)->name != name; pnode = &node->next) continue;   next = node->next; sigprocmask (SIG_BLOCK, &caught_signals, &oldset); unlink_status = unlink (name); unlink_errno = errno; *pnode = next; sigprocmask (SIG_SETMASK, &oldset, NULL);  if (unlink_status != 0) error (0, unlink_errno, _("warning: cannot remove: %s"), name); if (! next) temptail = pnode; free (node);
context: zaptemp (const char *name){  struct tempnode *volatile *pnode;  struct tempnode *node;  for (pnode = &temphead; (node = *pnode); pnode = &node->next)    if (node->name == name)      {	unlink (name);	*pnode = node->next;	free ((char *) node);	break;      }}