⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 mutt-1.5.12 源代码。linux 下邮件接受的工具。
💻 C
📖 第 1 页 / 共 5 页
字号:
      listp = &AttachAllow;    else      listp = &AttachExclude;  }  else if (!ascii_strncasecmp(category, "inline", strlen(category))) {    if (op == '+')      listp = &InlineAllow;    else      listp = &InlineExclude;  }  else {    strfcpy(err->data, _("attachments: invalid disposition"), err->dsize);    return -1;  }  return parse_attach_list(buf, s, listp, err);}static int parse_unattachments (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err){  char op, *p;  LIST **listp;  mutt_extract_token(buf, s, 0);  if (!buf->data || *buf->data == '\0') {    strfcpy(err->data, _("unattachments: no disposition"), err->dsize);    return -1;  }  p = buf->data;  op = *p++;  if (op != '+' && op != '-') {    op = '+';    p--;  }  if (!ascii_strncasecmp(p, "attachment", strlen(p))) {    if (op == '+')      listp = &AttachAllow;    else      listp = &AttachExclude;  }  else if (!ascii_strncasecmp(p, "inline", strlen(p))) {    if (op == '+')      listp = &InlineAllow;    else      listp = &InlineExclude;  }  else {    strfcpy(err->data, _("unattachments: invalid disposition"), err->dsize);    return -1;  }  return parse_unattach_list(buf, s, listp, err);}static int parse_unlists (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err){  do  {    mutt_extract_token (buf, s, 0);    remove_from_rx_list (&SubscribedLists, buf->data);    remove_from_rx_list (&MailLists, buf->data);        if (mutt_strcmp (buf->data, "*") && 	mutt_add_to_rx_list (&UnMailLists, buf->data, REG_ICASE, err) != 0)      return -1;  }  while (MoreArgs (s));  return 0;}static int parse_subscribe (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err){  group_context_t *gc = NULL;    do  {    mutt_extract_token (buf, s, 0);    if (parse_group_context (&gc, buf, s, data, err) == -1)      goto bail;        remove_from_rx_list (&UnMailLists, buf->data);    remove_from_rx_list (&UnSubscribedLists, buf->data);    if (mutt_add_to_rx_list (&MailLists, buf->data, REG_ICASE, err) != 0)      goto bail;    if (mutt_add_to_rx_list (&SubscribedLists, buf->data, REG_ICASE, err) != 0)      goto bail;    if (mutt_group_context_add_rx (gc, buf->data, REG_ICASE, err) != 0)      goto bail;  }  while (MoreArgs (s));    mutt_group_context_destroy (&gc);  return 0;   bail:  mutt_group_context_destroy (&gc);  return -1;}static int parse_unsubscribe (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err){  do  {    mutt_extract_token (buf, s, 0);    remove_from_rx_list (&SubscribedLists, buf->data);        if (mutt_strcmp (buf->data, "*") &&	mutt_add_to_rx_list (&UnSubscribedLists, buf->data, REG_ICASE, err) != 0)      return -1;  }  while (MoreArgs (s));  return 0;}  static int parse_unalias (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err){  ALIAS *tmp, *last = NULL;  do  {    mutt_extract_token (buf, s, 0);    if (mutt_strcmp ("*", buf->data) == 0)    {      if (CurrentMenu == MENU_ALIAS)      {	for (tmp = Aliases; tmp ; tmp = tmp->next)	  tmp->del = 1;	set_option (OPTFORCEREDRAWINDEX);      }      else	mutt_free_alias (&Aliases);      break;    }    else      for (tmp = Aliases; tmp; tmp = tmp->next)      {	if (mutt_strcasecmp (buf->data, tmp->name) == 0)	{	  if (CurrentMenu == MENU_ALIAS)	  {	    tmp->del = 1;	    set_option (OPTFORCEREDRAWINDEX);	    break;	  }	  if (last)	    last->next = tmp->next;	  else	    Aliases = tmp->next;	  tmp->next = NULL;	  mutt_free_alias (&tmp);	  break;	}	last = tmp;      }  }  while (MoreArgs (s));  return 0;}static int parse_alias (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err){  ALIAS *tmp = Aliases;  ALIAS *last = NULL;  char *estr = NULL;  group_context_t *gc = NULL;    if (!MoreArgs (s))  {    strfcpy (err->data, _("alias: no address"), err->dsize);    return (-1);  }  mutt_extract_token (buf, s, 0);  if (parse_group_context (&gc, buf, s, data, err) == -1)    return -1;    /* check to see if an alias with this name already exists */  for (; tmp; tmp = tmp->next)  {    if (!mutt_strcasecmp (tmp->name, buf->data))      break;    last = tmp;  }  if (!tmp)  {    /* create a new alias */    tmp = (ALIAS *) safe_calloc (1, sizeof (ALIAS));    tmp->self = tmp;    tmp->name = safe_strdup (buf->data);    /* give the main addressbook code a chance */    if (CurrentMenu == MENU_ALIAS)      set_option (OPTMENUCALLER);  }  else  {    /* override the previous value */    rfc822_free_address (&tmp->addr);    if (CurrentMenu == MENU_ALIAS)      set_option (OPTFORCEREDRAWINDEX);  }  mutt_extract_token (buf, s, M_TOKEN_QUOTE | M_TOKEN_SPACE | M_TOKEN_SEMICOLON);  dprint (2, (debugfile, "parse_alias: Second token is '%s'.\n",	      buf->data));  tmp->addr = mutt_parse_adrlist (tmp->addr, buf->data);  if (last)    last->next = tmp;  else    Aliases = tmp;  if (mutt_addrlist_to_idna (tmp->addr, &estr))  {    snprintf (err->data, err->dsize, _("Warning: Bad IDN '%s' in alias '%s'.\n"),	      estr, tmp->name);    goto bail;  }  mutt_group_context_add_adrlist (gc, tmp->addr);#ifdef DEBUG  if (debuglevel >= 2)   {    ADDRESS *a;    /* A group is terminated with an empty address, so check a->mailbox */    for (a = tmp->addr; a && a->mailbox; a = a->next)    {      if (!a->group)	dprint (2, (debugfile, "parse_alias:   %s\n",		    a->mailbox));      else	dprint (2, (debugfile, "parse_alias:   Group %s\n",		    a->mailbox));    }  }#endif  mutt_group_context_destroy (&gc);  return 0;    bail:  mutt_group_context_destroy (&gc);  return -1;}static intparse_unmy_hdr (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err){  LIST *last = NULL;  LIST *tmp = UserHeader;  LIST *ptr;  size_t l;  do  {    mutt_extract_token (buf, s, 0);    if (mutt_strcmp ("*", buf->data) == 0)      mutt_free_list (&UserHeader);    else    {      tmp = UserHeader;      last = NULL;      l = mutt_strlen (buf->data);      if (buf->data[l - 1] == ':')	l--;      while (tmp)      {	if (ascii_strncasecmp (buf->data, tmp->data, l) == 0 && tmp->data[l] == ':')	{	  ptr = tmp;	  if (last)	    last->next = tmp->next;	  else	    UserHeader = tmp->next;	  tmp = tmp->next;	  ptr->next = NULL;	  mutt_free_list (&ptr);	}	else	{	  last = tmp;	  tmp = tmp->next;	}      }    }  }  while (MoreArgs (s));  return 0;}static int parse_my_hdr (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err){  LIST *tmp;  size_t keylen;  char *p;  mutt_extract_token (buf, s, M_TOKEN_SPACE | M_TOKEN_QUOTE);  if ((p = strpbrk (buf->data, ": \t")) == NULL || *p != ':')  {    strfcpy (err->data, _("invalid header field"), err->dsize);    return (-1);  }  keylen = p - buf->data + 1;  if (UserHeader)  {    for (tmp = UserHeader; ; tmp = tmp->next)    {      /* see if there is already a field by this name */      if (ascii_strncasecmp (buf->data, tmp->data, keylen) == 0)      {	/* replace the old value */	FREE (&tmp->data);	tmp->data = buf->data;	memset (buf, 0, sizeof (BUFFER));	return 0;      }      if (!tmp->next)	break;    }    tmp->next = mutt_new_list ();    tmp = tmp->next;  }  else  {    tmp = mutt_new_list ();    UserHeader = tmp;  }  tmp->data = buf->data;  memset (buf, 0, sizeof (BUFFER));  return 0;}static intparse_sort (short *val, const char *s, const struct mapping_t *map, BUFFER *err){  int i, flags = 0;  if (mutt_strncmp ("reverse-", s, 8) == 0)  {    s += 8;    flags = SORT_REVERSE;  }    if (mutt_strncmp ("last-", s, 5) == 0)  {    s += 5;    flags |= SORT_LAST;  }  if ((i = mutt_getvaluebyname (s, map)) == -1)  {    snprintf (err->data, err->dsize, _("%s: unknown sorting method"), s);    return (-1);  }  *val = i | flags;  return 0;}static void mutt_set_default (struct option_t *p){  switch (p->type & DT_MASK)  {    case DT_STR:      if (!p->init && *((char **) p->data))        p->init = (unsigned long) safe_strdup (* ((char **) p->data));      break;    case DT_PATH:      if (!p->init && *((char **) p->data))      {	char *cp = safe_strdup (*((char **) p->data));	/* mutt_pretty_mailbox (cp); */        p->init = (unsigned long) cp;      }      break;    case DT_ADDR:      if (!p->init && *((ADDRESS **) p->data))      {	char tmp[HUGE_STRING];	*tmp = '\0';	rfc822_write_address (tmp, sizeof (tmp), *((ADDRESS **) p->data), 0);	p->init = (unsigned long) safe_strdup (tmp);      }      break;    case DT_RX:    {      REGEXP *pp = (REGEXP *) p->data;      if (!p->init && pp->pattern)	p->init = (unsigned long) safe_strdup (pp->pattern);      break;    }  }}static void mutt_restore_default (struct option_t *p){  switch (p->type & DT_MASK)  {    case DT_STR:      if (p->init)	mutt_str_replace ((char **) p->data, (char *) p->init);       break;    case DT_PATH:      if (p->init)      {	char path[_POSIX_PATH_MAX];	strfcpy (path, (char *) p->init, sizeof (path));	mutt_expand_path (path, sizeof (path));	mutt_str_replace ((char **) p->data, path);      }      break;    case DT_ADDR:      if (p->init)      {	rfc822_free_address ((ADDRESS **) p->data);	*((ADDRESS **) p->data) = rfc822_parse_adrlist (NULL, (char *) p->init);      }      break;    case DT_BOOL:      if (p->init)	set_option (p->data);      else	unset_option (p->data);      break;    case DT_QUAD:      set_quadoption (p->data, p->init);      break;    case DT_NUM:    case DT_SORT:    case DT_MAGIC:      *((short *) p->data) = p->init;      break;    case DT_RX:      {	REGEXP *pp = (REGEXP *) p->data;	int flags = 0;	FREE (&pp->pattern);	if (pp->rx)	{	  regfree (pp->rx);	  FREE (&pp->rx);	}	if (p->init)	{	  char *s = (char *) p->init;	  pp->rx = safe_calloc (1, sizeof (regex_t));	  pp->pattern = safe_strdup ((char *) p->init);	  if (mutt_strcmp (p->option, "mask") != 0)	    flags |= mutt_which_case ((const char *) p->init);	  if (mutt_strcmp (p->option, "mask") == 0 && *s == '!')	  {	    s++;	    pp->not = 1;	  }	  if (REGCOMP (pp->rx, s, flags) != 0)	  {	    fprintf (stderr, _("mutt_restore_default(%s): error in regexp: %s\n"),		     p->option, pp->pattern);	    FREE (&pp->pattern);	    regfree (pp->rx);	    FREE (&pp->rx);	  }	}      }      break;  }  if (p->flags & R_INDEX)    set_option (OPTFORCEREDRAWINDEX);  if (p->flags & R_PAGER)    set_option (OPTFORCEREDRAWPAGER);  if (p->flags & R_RESORT_SUB)    set_option (OPTSORTSUBTHREADS);  if (p->flags & R_RESORT)    set_option (OPTNEEDRESORT);  if (p->flags & R_RESORT_INIT)    set_option (OPTRESORTINIT);  if (p->flags & R_TREE)    set_option (OPTREDRAWTREE);}static int parse_set (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err){  int query, unset, inv, reset, r = 0;  int idx = -1;  char *p, scratch[_POSIX_PATH_MAX];  char* myvar;  while (MoreArgs (s))  {    /* reset state variables */    query = 0;    unset = data & M_SET_UNSET;    inv = data & M_SET_INV;    reset = data & M_SET_RESET;    myvar = NULL;    if (*s->dptr == '?')    {      query = 1;      s->dptr++;    }    else if (mutt_strncmp ("no", s->dptr, 2) == 0)    {      s->dptr += 2;      unset = !unset;    }    else if (mutt_strncmp ("inv", s->dptr, 3) == 0)    {      s->dptr += 3;      inv = !inv;    }    else if (*s->dptr == '&')    {      reset = 1;      s->dptr++;    }    /* get the variable name */    mutt_extract_token (tmp, s, M_TOKEN_EQUAL);    if (!mutt_strncmp ("my_", tmp->data, 3))      myvar = tmp->data;    else if ((idx = mutt_option_index (tmp->data)) == -1 &&	!(reset && !mutt_strcmp ("all", tmp->data)))    {      snprintf (err->data, err->dsize, _("%s: unknown variable"), tmp->data);      return (-1);    }    SKIPWS (s->dptr);    if (reset)    {      if (query || unset || inv)      {	snprintf (err->data, err->dsize, _("prefix is illegal with reset"));	return (-1);      }      if (s && *s->dptr == '=')      {	snprintf (err->data, err->dsize, _("value is illegal with reset"));	return (-1);      }     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -