rem: const char *err;
context: static const char *long_sort_parse(sf_node *sfn){  char *buf;                   /* temp copy of arg to hack on */  char *sep_loc;               /* separator location: " \t,\n" */  char *walk;  const char *err;       /* error code that could or did happen */  sort_node *snode;  int items;  int need_item;  /*** prepare to operate ***/  buf = malloc(strlen(sfn->sf)+1);  strcpy(buf, sfn->sf);    /*** sanity check and count items ***/  need_item = 1; /* true */  items = 0;  walk = buf;  err = "Improper sort specifier list.";  do{    switch(*walk){    case ' ': case ',': case '\t': case '\n': case '\0':      if(need_item){        free(buf);        return "Improper sort list";      }      need_item=1;      break;    default:      if(need_item) items++;      need_item=0;    }  } while (*++walk);  if(!items){    free(buf);    return "Empty sort list.";  }#ifdef STRICT_LIST  if(need_item){    /* can't have trailing deliminator */    free(buf);    return "Improper sort list.";  }#else  if(need_item){    /* allow 1 trailing deliminator */    *--walk='\0';  /* remove the trailing deliminator */  }#endif  /*** actually parse the list ***/  walk = buf;  while(items--){    sort_node *endp;    sep_loc = strpbrk(walk," ,\t\n");    if(sep_loc) *sep_loc = '\0';    snode = do_one_sort_spec(walk);    if(!snode){      free(buf);      return "Unknown sort specifier.";    }    endp = snode; while(endp->next) endp = endp->next;  /* find end */    endp->next = sfn->s_cooked;    sfn->s_cooked = snode;    walk = sep_loc + 1; /* point to next item, if any */  }  free(buf);  already_parsed_sort = 1;  return NULL;}