From 7bdde85c8b14be3a0a743b59c29f59db13ae95f85ed3ebeb2b885dc11531e7ce Mon Sep 17 00:00:00 2001 From: OBS User buildservice-autocommit Date: Mon, 30 Mar 2015 17:33:58 +0000 Subject: [PATCH] Updating link to change in openSUSE:Factory/alpine revision 38.0 OBS-URL: https://build.opensuse.org/package/show/server:mail/alpine?expand=0&rev=0df79cc66d158318ac0ab6fbb1c8a0df --- alpine-2.11.tar.xz | 3 - alpine-2.20.tar.xz | 3 + alpine-gcc44.diff | 20 +- alpine-mime-type-workaround.patch | 36 --- alpine-month_name-utf8.patch | 49 ---- alpine.changes | 48 ++++ alpine.spec | 18 +- chappa-WrtAcc.patch | 56 ++--- chappa-colortext.patch | 88 ++++---- chappa-fancy.patch | 272 +++++++++++----------- chappa-ignoresize.patch | 40 ++-- chappa-insertpat.patch | 14 +- chappa-maildir.patch | 288 +++++++++++++++--------- chappa-unixnullbug.patch | 10 +- lint.diff | 69 ++++++ operation-may-be-undefined-warning.diff | 24 +- 16 files changed, 560 insertions(+), 478 deletions(-) delete mode 100644 alpine-2.11.tar.xz create mode 100644 alpine-2.20.tar.xz delete mode 100644 alpine-mime-type-workaround.patch delete mode 100644 alpine-month_name-utf8.patch create mode 100644 lint.diff diff --git a/alpine-2.11.tar.xz b/alpine-2.11.tar.xz deleted file mode 100644 index 1f47462..0000000 --- a/alpine-2.11.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fecc9ca5df03e0f368edec65cd61444325157b5635b5c92380cedf9c4ce8fbf6 -size 4403188 diff --git a/alpine-2.20.tar.xz b/alpine-2.20.tar.xz new file mode 100644 index 0000000..84eb67d --- /dev/null +++ b/alpine-2.20.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed639b6e5bb97e6b0645c85262ca6a784316195d461ce8d8411999bf80449227 +size 4841816 diff --git a/alpine-gcc44.diff b/alpine-gcc44.diff index 7d29626..1049b05 100644 --- a/alpine-gcc44.diff +++ b/alpine-gcc44.diff @@ -3,11 +3,11 @@ pith/send.c | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) -Index: alpine-2.11/imap/src/osdep/unix/dummy.c +Index: alpine-2.20/imap/src/osdep/unix/dummy.c =================================================================== ---- alpine-2.11.orig/imap/src/osdep/unix/dummy.c -+++ alpine-2.11/imap/src/osdep/unix/dummy.c -@@ -736,6 +736,17 @@ long dummy_copy (MAILSTREAM *stream,char +--- alpine-2.20.orig/imap/src/osdep/unix/dummy.c ++++ alpine-2.20/imap/src/osdep/unix/dummy.c +@@ -734,6 +734,17 @@ long dummy_copy (MAILSTREAM *stream,char return NIL; } @@ -25,7 +25,7 @@ Index: alpine-2.11/imap/src/osdep/unix/dummy.c /* Dummy append message string * Accepts: mail stream -@@ -755,8 +766,7 @@ long dummy_append (MAILSTREAM *stream,ch +@@ -753,8 +764,7 @@ long dummy_append (MAILSTREAM *stream,ch /* append to INBOX? */ if (!compare_cstring (mailbox,"INBOX")) { /* yes, if no empty proto try creating */ @@ -35,12 +35,12 @@ Index: alpine-2.11/imap/src/osdep/unix/dummy.c } else if (dummy_file (tmp,mailbox) && ((fd = open (tmp,O_RDONLY,NIL)) < 0)) { if ((e = errno) == ENOENT) /* failed, was it no such file? */ -Index: alpine-2.11/pith/send.c +Index: alpine-2.20/pith/send.c =================================================================== ---- alpine-2.11.orig/pith/send.c -+++ alpine-2.11/pith/send.c -@@ -1570,6 +1570,7 @@ set_priority_header(METAENV *header, cha - pf->textbuf = cpystr(value); +--- alpine-2.20.orig/pith/send.c ++++ alpine-2.20/pith/send.c +@@ -4159,6 +4159,7 @@ set_parameter(PARAMETER **param, char *p + pm->value = cpystr(new_value); } } + return 0; diff --git a/alpine-mime-type-workaround.patch b/alpine-mime-type-workaround.patch deleted file mode 100644 index 1612107..0000000 --- a/alpine-mime-type-workaround.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- alpine-2.11/pith/send.c 2013-08-15 06:36:22.000000000 +0200 -+++ alpine-2.19.4/pith/send.c 2013-12-27 20:23:54.000000000 +0100 -@@ -4419,6 +4423,17 @@ - return(1); - } - -+char * -+ToLower(char *s, char *t) -+{ -+ int i; -+ -+ for(i = 0; s != NULL && s[i] != '\0'; i++) -+ t[i] = s[i] + ((s[i] >= 'A' && s[i] <= 'Z') ? ('a' - 'A') : 0); -+ t[i] = '\0'; -+ -+ return t; -+} - - /* - * pine_write_body_header - another c-client clone. This time -@@ -4441,11 +4456,11 @@ - - if((so = so_get(CharStar, NULL, WRITE_ACCESS)) != NULL){ - if(!(so_puts(so, "Content-Type: ") -- && so_puts(so, body_types[body->type]) -+ && so_puts(so, ToLower(body_types[body->type], tmp)) - && so_puts(so, "/") -- && so_puts(so, body->subtype -- ? body->subtype -- : rfc822_default_subtype (body->type)))) -+ && so_puts(so, ToLower(body->subtype -+ ? body->subtype -+ : rfc822_default_subtype (body->type),tmp)))) - return(pwbh_finish(0, so)); - - if(body->parameter){ diff --git a/alpine-month_name-utf8.patch b/alpine-month_name-utf8.patch deleted file mode 100644 index d2128bb..0000000 --- a/alpine-month_name-utf8.patch +++ /dev/null @@ -1,49 +0,0 @@ ---- - pith/string.c | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -Index: alpine-2.11/pith/string.c -=================================================================== ---- alpine-2.11.orig/pith/string.c -+++ alpine-2.11/pith/string.c -@@ -770,6 +770,7 @@ month_abbrev_locale(int month_num) - return("xxx"); - else{ - static char buf[20]; -+ char *utf8buf; - struct tm tm; - - memset(&tm, 0, sizeof(tm)); -@@ -811,6 +812,12 @@ month_abbrev_locale(int month_num) - - buf[0] = ' '; - } -+ utf8buf = convert_to_utf8(buf, NULL, 0); -+ if (utf8buf != NULL) { -+ strncpy(buf, utf8buf, sizeof(buf)); -+ buf[sizeof(buf)-1] = '\0'; -+ fs_give((void **)&utf8buf); -+ } - - return(buf); - } -@@ -842,12 +849,19 @@ month_name_locale(int month_num) - return(""); - else{ - static char buf[20]; -+ char *utf8buf; - struct tm tm; - - memset(&tm, 0, sizeof(tm)); - tm.tm_year = 107; - tm.tm_mon = month_num-1; - our_strftime(buf, sizeof(buf), "%B", &tm); -+ utf8buf = convert_to_utf8(buf, NULL, 0); -+ if (utf8buf != NULL) { -+ strncpy(buf, utf8buf, sizeof(buf)); -+ buf[sizeof(buf)-1] = '\0'; -+ fs_give((void **)&utf8buf); -+ } - return(buf); - } - } diff --git a/alpine.changes b/alpine.changes index 3251d15..7eebf9b 100644 --- a/alpine.changes +++ b/alpine.changes @@ -1,3 +1,51 @@ +------------------------------------------------------------------- +Wed Mar 25 16:59:29 UTC 2015 - jengelh@inai.de + +- Update to new upstream release 2.20 +* Upgrade UW-IMAP to Panda IMAP from github.com/jonabbey/panda-imap +* S/MIME: Add screen to manage certificates. +* S/MIME: Signatures are validated using the user's certificates + instead of the ones included in the message. Behavior can be + disabled by disabling the option "Validate Using Certificate + Store Only" which is enabled by default. +* S/MIME: add the sender certificate to the list of certificates + in encrypted messages to make it possible for the sender to + decrypt the message they sent. +* S/MIME: Forwarding a message will include the signed part as part + of the text and not as a multipart message, just as the reply + command does. +* Add support to selective expunge through a subcommand of the + select-apply commands. +* Pico: New subcommand of the search command, allows to reverse the + direction of search. +* Add /tls1, /tls1_1, /tls1_2 and /dtls1 to the definition of a + server to use different ways to connect using ssl, for example + {server.com/tls1} will attempt to connect to server.com at the + ssl imap port (port 993) and establish a connection using TLSv1. + These flags can be used in conjunction with the /ssl flag, the + ssl flag is redundant. Conversely, however, the /ssl flag does + not imply any of these flags; the /ssl flag means SSLv3 or, if + not available, SSLv2 in the SSL port. +* Alpine does not attempt to automatically reopen a collection that + was not opened due to cancellation by the user. Instead, the user + must try to open it explicitly. +* Experimental: Write the content-type of a message in lowercase, + as some non-compliant servers do not understand uppercase + content-type. +* Opening a folder updates recent count in maildrops (this + already works for other types of folders) +* Pico: Justification works without need of a predefined quote + string. This allows justification of blocks of text that are + indented with spaces. +* Decode the name of attachment names, so they can be written as + part of the description of the part. +* Replace tabs by spaces in From and Subject fields to control for + size in screen of these fields. Change only in index screen + display. +- Drop alpine-month_name-utf8.patch (solved differently upstream), + drop alpine-mime-type-workaround.patch (merged upstream) +- Add lint.diff to workaround new source code problems + ------------------------------------------------------------------- Mon Mar 3 11:54:13 UTC 2014 - jengelh@inai.de diff --git a/alpine.spec b/alpine.spec index 330caaa..6313d5f 100644 --- a/alpine.spec +++ b/alpine.spec @@ -1,7 +1,7 @@ # # spec file for package alpine # -# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -22,11 +22,13 @@ Name: alpine Summary: Mail User Agent License: Apache-2.0 Group: Productivity/Networking/Email/Clients -Version: 2.11 +Version: 2.20 Release: 0 Url: http://patches.freeiz.com/alpine/ -Source: http://patches.freeiz.com/alpine/release/src/%name-%version.tar.xz +# direct download does not work for openSUSE:Factory +# Source: http://patches.freeiz.com/alpine/release/src/%name-%version.tar.xz +Source: %name-%version.tar.xz Source1: %name.png Source2: %name.desktop Patch1: pine-nonvoid-function.patch @@ -34,12 +36,11 @@ Patch2: make-use-of-strncat-safer.diff Patch3: operation-may-be-undefined-warning.diff Patch4: fix-implicit.patch Patch5: alpine-gcc44.diff -Patch7: alpine-month_name-utf8.patch Patch10: pico-fix-spurious-undef-warnings.diff Patch20: pine-expression-warnings.diff Patch40: pico-stripwhitespace.diff Patch60: signal-and-panic-improvements.diff -Patch61: alpine-mime-type-workaround.patch +Patch61: lint.diff # # Eduardo Chappa's patches. # http://patches.freeiz.com/alpine/ @@ -64,8 +65,8 @@ BuildRequires: openssl-devel BuildRequires: pam-devel BuildRequires: update-desktop-files BuildRequires: xz -# pgp4pine requires pine: -Provides: pine +# pgp4pine requires pine: (6.20 is what alpine writes to ~/.pinerc) +Provides: pine = 6.20 Obsoletes: pine4 Provides: pine4 @@ -134,7 +135,6 @@ fi %patch3 -p1 %patch4 -p1 %patch5 -p1 -%patch7 -p1 %patch10 -p1 %patch20 -p1 %patch40 -p1 @@ -275,7 +275,7 @@ fi %doc %{_mandir}/man1/rpload.* %doc %{_mandir}/man1/mailutil.* %doc README NOTICE LICENSE -%doc doc/mailcap.unx doc/mime.types doc/tech-notes.txt doc/tech-notes/*.html +%doc doc/mailcap.unx doc/mime.types doc/tech-notes/tech-notes.txt doc/tech-notes/*.html %{_bindir}/*pine %{_bindir}/alpinef %{_bindir}/rp* diff --git a/chappa-WrtAcc.patch b/chappa-WrtAcc.patch index 4e089d3..2cfb520 100644 --- a/chappa-WrtAcc.patch +++ b/chappa-WrtAcc.patch @@ -8,11 +8,11 @@ pico/search.c | 6 - 7 files changed, 214 insertions(+), 8 deletions(-) -Index: alpine-2.11/pico/basic.c +Index: alpine-2.20/pico/basic.c =================================================================== ---- alpine-2.11.orig/pico/basic.c -+++ alpine-2.11/pico/basic.c -@@ -344,6 +344,189 @@ gotobop(int f, int n) +--- alpine-2.20.orig/pico/basic.c ++++ alpine-2.20/pico/basic.c +@@ -342,6 +342,189 @@ gotobop(int f, int n) return(TRUE); } @@ -202,10 +202,10 @@ Index: alpine-2.11/pico/basic.c /* * go forword to the end of the current paragraph -Index: alpine-2.11/pico/composer.c +Index: alpine-2.20/pico/composer.c =================================================================== ---- alpine-2.11.orig/pico/composer.c -+++ alpine-2.11/pico/composer.c +--- alpine-2.20.orig/pico/composer.c ++++ alpine-2.20/pico/composer.c @@ -2015,7 +2015,7 @@ LineEdit(int allowedit, UCS *lastch) tbufp = &strng[ods.p_len]; @@ -229,10 +229,10 @@ Index: alpine-2.11/pico/composer.c case (CTRL|KEY_LEFT): /* word skip left */ if(ods.p_ind > 0) /* Scoot one char left if possible */ ods.p_ind--; -Index: alpine-2.11/pico/display.c +Index: alpine-2.20/pico/display.c =================================================================== ---- alpine-2.11.orig/pico/display.c -+++ alpine-2.11/pico/display.c +--- alpine-2.20.orig/pico/display.c ++++ alpine-2.20/pico/display.c @@ -1751,6 +1751,11 @@ mlreplyd(UCS *prompt, UCS *buf, int nbuf b = &buf[ucs4_strlen(buf)]; continue; @@ -254,10 +254,10 @@ Index: alpine-2.11/pico/display.c /* look for match in extra_v */ for(i = 0; i < 12; i++) if(c && c == extra_v[i]){ -Index: alpine-2.11/pico/ebind.h +Index: alpine-2.20/pico/ebind.h =================================================================== ---- alpine-2.11.orig/pico/ebind.h -+++ alpine-2.11/pico/ebind.h +--- alpine-2.20.orig/pico/ebind.h ++++ alpine-2.20/pico/ebind.h @@ -61,7 +61,7 @@ KEYTAB keytab[NBINDS] = { #ifdef MOUSE {KEY_MOUSE, mousepress}, @@ -287,10 +287,10 @@ Index: alpine-2.11/pico/ebind.h #endif #endif {CTRL|'A', gotobol}, -Index: alpine-2.11/pico/efunc.h +Index: alpine-2.20/pico/efunc.h =================================================================== ---- alpine-2.11.orig/pico/efunc.h -+++ alpine-2.11/pico/efunc.h +--- alpine-2.20.orig/pico/efunc.h ++++ alpine-2.20/pico/efunc.h @@ -54,6 +54,9 @@ extern int forwline(int, int); extern int backline(int, int); extern int gotobop(int, int); @@ -301,10 +301,10 @@ Index: alpine-2.11/pico/efunc.h extern int forwpage(int, int); extern int backpage(int, int); extern int scrollupline(int, int); -Index: alpine-2.11/pico/main.c +Index: alpine-2.20/pico/main.c =================================================================== ---- alpine-2.11.orig/pico/main.c -+++ alpine-2.11/pico/main.c +--- alpine-2.20.orig/pico/main.c ++++ alpine-2.20/pico/main.c @@ -416,6 +416,12 @@ main(int argc, char *argv[]) emlwrite(_("You may possibly have new mail."), NULL); } @@ -318,21 +318,21 @@ Index: alpine-2.11/pico/main.c if(km_popped) switch(c){ case NODATA: -Index: alpine-2.11/pico/search.c +Index: alpine-2.20/pico/search.c =================================================================== ---- alpine-2.11.orig/pico/search.c -+++ alpine-2.11/pico/search.c -@@ -278,7 +278,7 @@ forwsearch(int f, int n) +--- alpine-2.20.orig/pico/search.c ++++ alpine-2.20/pico/search.c +@@ -291,7 +291,7 @@ forwsearch(int f, int n) } if(status + curwp->w_doto >= llength(curwp->w_dotp) || - !eq(defpat[status],lgetc(curwp->w_dotp, curwp->w_doto + status).c)) -+ !eq((unsigned char)defpat[status],lgetc(curwp->w_dotp, curwp->w_doto + status).c)) - break; /* do nothing! */ ++ !eq((unsigned char) defpat[status],lgetc(curwp->w_dotp, curwp->w_doto + status).c)) + break; status++; } -@@ -931,7 +931,7 @@ forscan(int *wrapt, /* boolean indicatin - c = lgetc(curline, curoff++).c; /* get the char */ +@@ -1096,7 +1096,7 @@ forscan(int *wrapt, /* boolean indicatin + c = lgetc(curline, curoff++).c; /* get the char */ /* test it against first char in pattern */ - if (eq(c, patrn[0]) != FALSE) { /* if we find it..*/ @@ -340,7 +340,7 @@ Index: alpine-2.11/pico/search.c /* setup match pointers */ matchline = curline; matchoff = curoff; -@@ -952,7 +952,7 @@ forscan(int *wrapt, /* boolean indicatin +@@ -1117,7 +1117,7 @@ forscan(int *wrapt, /* boolean indicatin return(FALSE); /* and test it against the pattern */ diff --git a/chappa-colortext.patch b/chappa-colortext.patch index 4333adb..9124002 100644 --- a/chappa-colortext.patch +++ b/chappa-colortext.patch @@ -11,11 +11,11 @@ pith/text.c | 9 ++ 10 files changed, 308 insertions(+) -Index: alpine-2.11/alpine/confscroll.c +Index: alpine-2.20/alpine/confscroll.c =================================================================== ---- alpine-2.11.orig/alpine/confscroll.c -+++ alpine-2.11/alpine/confscroll.c -@@ -5183,6 +5183,9 @@ fix_side_effects(struct pine *ps, struct +--- alpine-2.20.orig/alpine/confscroll.c ++++ alpine-2.20/alpine/confscroll.c +@@ -5196,6 +5196,9 @@ fix_side_effects(struct pine *ps, struct clear_index_cache(ps->mail_stream, 0); } @@ -25,10 +25,10 @@ Index: alpine-2.11/alpine/confscroll.c else if(var == &ps->vars[V_INIT_CMD_LIST]){ if(!revert) q_status_message(SM_ASYNC, 0, 3, -Index: alpine-2.11/pith/conf.c +Index: alpine-2.20/pith/conf.c =================================================================== ---- alpine-2.11.orig/pith/conf.c -+++ alpine-2.11/pith/conf.c +--- alpine-2.20.orig/pith/conf.c ++++ alpine-2.20/pith/conf.c @@ -228,6 +228,8 @@ CONF_TXT_T cf_text_deadlets[] = "Specif CONF_TXT_T cf_text_fillcol[] = "Specifies the column of the screen where the composer should wrap."; @@ -38,7 +38,7 @@ Index: alpine-2.11/pith/conf.c CONF_TXT_T cf_text_replystr[] = "Specifies the string to insert when replying to a message."; CONF_TXT_T cf_text_quotereplstr[] = "Specifies the string to replace quotes with when viewing a message."; -@@ -560,6 +562,8 @@ static struct variable variables[] = { +@@ -562,6 +564,8 @@ static struct variable variables[] = { NULL, cf_text_speller}, {"composer-wrap-column", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, NULL, cf_text_fillcol}, @@ -47,7 +47,7 @@ Index: alpine-2.11/pith/conf.c {"reply-indent-string", 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, NULL, cf_text_replystr}, {"reply-leadin", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, -@@ -817,6 +821,8 @@ static struct variable variables[] = { +@@ -821,6 +825,8 @@ static struct variable variables[] = { {"incoming-unseen-background-color", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0}, {"signature-foreground-color", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0}, {"signature-background-color", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0}, @@ -56,7 +56,7 @@ Index: alpine-2.11/pith/conf.c {"prompt-foreground-color", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0}, {"prompt-background-color", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0}, {"header-general-foreground-color", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0}, -@@ -1985,6 +1991,8 @@ init_vars(struct pine *ps, void (*cmds_f +@@ -1990,6 +1996,8 @@ init_vars(struct pine *ps, void (*cmds_f set_current_val(&vars[V_FORM_FOLDER], TRUE, TRUE); set_current_val(&vars[V_EDITOR], TRUE, TRUE); set_current_val(&vars[V_SPELLER], TRUE, TRUE); @@ -65,7 +65,7 @@ Index: alpine-2.11/pith/conf.c set_current_val(&vars[V_IMAGE_VIEWER], TRUE, TRUE); set_current_val(&vars[V_BROWSER], TRUE, TRUE); set_current_val(&vars[V_SMTP_SERVER], TRUE, TRUE); -@@ -6483,6 +6491,7 @@ set_current_color_vals(struct pine *ps) +@@ -6549,6 +6557,7 @@ set_current_color_vals(struct pine *ps) set_color_val(&vars[V_IND_OP_FORE_COLOR], 0); set_color_val(&vars[V_INCUNSEEN_FORE_COLOR], 0); set_color_val(&vars[V_SIGNATURE_FORE_COLOR], 0); @@ -73,7 +73,7 @@ Index: alpine-2.11/pith/conf.c set_current_val(&ps->vars[V_INDEX_TOKEN_COLORS], TRUE, TRUE); set_current_val(&ps->vars[V_VIEW_HDR_COLORS], TRUE, TRUE); -@@ -7664,6 +7673,8 @@ config_help(int var, int feature) +@@ -7732,6 +7741,8 @@ config_help(int var, int feature) return(h_config_scroll_margin); case V_DEADLETS : return(h_config_deadlets); @@ -82,7 +82,7 @@ Index: alpine-2.11/pith/conf.c case V_FILLCOL : return(h_config_composer_wrap_column); case V_TCPOPENTIMEO : -@@ -7829,6 +7840,9 @@ config_help(int var, int feature) +@@ -7897,6 +7908,9 @@ config_help(int var, int feature) case V_SIGNATURE_FORE_COLOR : case V_SIGNATURE_BACK_COLOR : return(h_config_signature_color); @@ -92,10 +92,10 @@ Index: alpine-2.11/pith/conf.c case V_PROMPT_FORE_COLOR : case V_PROMPT_BACK_COLOR : return(h_config_prompt_color); -Index: alpine-2.11/pith/conf.h +Index: alpine-2.20/pith/conf.h =================================================================== ---- alpine-2.11.orig/pith/conf.h -+++ alpine-2.11/pith/conf.h +--- alpine-2.20.orig/pith/conf.h ++++ alpine-2.20/pith/conf.h @@ -161,6 +161,8 @@ #define GLO_EDITOR vars[V_EDITOR].global_val.l #define VAR_SPELLER vars[V_SPELLER].current_val.p @@ -105,7 +105,7 @@ Index: alpine-2.11/pith/conf.h #define VAR_FILLCOL vars[V_FILLCOL].current_val.p #define GLO_FILLCOL vars[V_FILLCOL].global_val.p #define VAR_DEADLETS vars[V_DEADLETS].current_val.p -@@ -456,6 +458,8 @@ +@@ -458,6 +460,8 @@ #define GLO_SIGNATURE_FORE_COLOR vars[V_SIGNATURE_FORE_COLOR].global_val.p #define VAR_SIGNATURE_BACK_COLOR vars[V_SIGNATURE_BACK_COLOR].current_val.p #define GLO_SIGNATURE_BACK_COLOR vars[V_SIGNATURE_BACK_COLOR].global_val.p @@ -114,10 +114,10 @@ Index: alpine-2.11/pith/conf.h #define VAR_PROMPT_FORE_COLOR vars[V_PROMPT_FORE_COLOR].current_val.p #define VAR_PROMPT_BACK_COLOR vars[V_PROMPT_BACK_COLOR].current_val.p #define VAR_VIEW_HDR_COLORS vars[V_VIEW_HDR_COLORS].current_val.l -Index: alpine-2.11/pith/conftype.h +Index: alpine-2.20/pith/conftype.h =================================================================== ---- alpine-2.11.orig/pith/conftype.h -+++ alpine-2.11/pith/conftype.h +--- alpine-2.20.orig/pith/conftype.h ++++ alpine-2.20/pith/conftype.h @@ -80,6 +80,7 @@ typedef enum { V_PERSONAL_NAME = 0 , V_EDITOR , V_SPELLER @@ -126,7 +126,7 @@ Index: alpine-2.11/pith/conftype.h , V_REPLY_STRING , V_REPLY_INTRO , V_QUOTE_REPLACE_STRING -@@ -230,6 +231,8 @@ typedef enum { V_PERSONAL_NAME = 0 +@@ -231,6 +232,8 @@ typedef enum { V_PERSONAL_NAME = 0 , V_INCUNSEEN_BACK_COLOR , V_SIGNATURE_FORE_COLOR , V_SIGNATURE_BACK_COLOR @@ -135,10 +135,10 @@ Index: alpine-2.11/pith/conftype.h , V_PROMPT_FORE_COLOR , V_PROMPT_BACK_COLOR , V_HEADER_GENERAL_FORE_COLOR -Index: alpine-2.11/pith/mailview.c +Index: alpine-2.20/pith/mailview.c =================================================================== ---- alpine-2.11.orig/pith/mailview.c -+++ alpine-2.11/pith/mailview.c +--- alpine-2.20.orig/pith/mailview.c ++++ alpine-2.20/pith/mailview.c @@ -282,6 +282,14 @@ format_body(long int msgno, BODY *body, if((flgs & FM_DISPLAY) && !(flgs & FM_NOCOLOR) @@ -345,10 +345,10 @@ Index: alpine-2.11/pith/mailview.c /* * The argument fieldname is something like "Subject:..." or "Subject". -Index: alpine-2.11/pith/mailview.h +Index: alpine-2.20/pith/mailview.h =================================================================== ---- alpine-2.11.orig/pith/mailview.h -+++ alpine-2.11/pith/mailview.h +--- alpine-2.20.orig/pith/mailview.h ++++ alpine-2.20/pith/mailview.h @@ -30,6 +30,12 @@ #include "../pith/color.h" @@ -378,11 +378,11 @@ Index: alpine-2.11/pith/mailview.h /* * BUG: BELOW IS UNIX/PC ONLY since config'd browser means nothing to webpine -Index: alpine-2.11/pith/pine.hlp +Index: alpine-2.20/pith/pine.hlp =================================================================== ---- alpine-2.11.orig/pith/pine.hlp -+++ alpine-2.11/pith/pine.hlp -@@ -3563,6 +3563,7 @@ There are also additional details on +--- alpine-2.20.orig/pith/pine.hlp ++++ alpine-2.20/pith/pine.hlp +@@ -3833,6 +3833,7 @@ There are also additional details on
  • OPTION:
  • OPTION:
  • OPTION: @@ -390,7 +390,7 @@ Index: alpine-2.11/pith/pine.hlp
  • OPTION:
  • OPTION: Print-Font-Char-Set
  • OPTION: Print-Font-Name -@@ -3591,6 +3592,7 @@ There are also additional details on +@@ -3861,6 +3862,7 @@ There are also additional details on
  • OPTION:
  • OPTION:
  • OPTION: Signature Color @@ -398,7 +398,7 @@ Index: alpine-2.11/pith/pine.hlp
  • OPTION:
  • OPTION:
  • OPTION: -@@ -22838,6 +22840,43 @@ That won't work because spell works in a +@@ -23234,6 +23236,43 @@ That won't work because spell works in a <End of help on this topic> @@ -442,7 +442,7 @@ Index: alpine-2.11/pith/pine.hlp ====== h_config_display_filters ===== -@@ -31455,6 +31494,30 @@ the Quote3 Color is black characters on +@@ -31851,6 +31890,30 @@ the Quote3 Color is black characters on

    Descriptions of the available commands

    @@ -473,10 +473,10 @@ Index: alpine-2.11/pith/pine.hlp Look here to see the available Editing and Navigation commands.

    -Index: alpine-2.11/pith/state.c +Index: alpine-2.20/pith/state.c =================================================================== ---- alpine-2.11.orig/pith/state.c -+++ alpine-2.11/pith/state.c +--- alpine-2.20.orig/pith/state.c ++++ alpine-2.20/pith/state.c @@ -131,6 +131,9 @@ free_pine_struct(struct pine **pps) if((*pps)->folders_dir != NULL) fs_give((void **)&(*pps)->folders_dir); @@ -487,11 +487,11 @@ Index: alpine-2.11/pith/state.c if((*pps)->ui.homedir) fs_give((void **)&(*pps)->ui.homedir); -Index: alpine-2.11/pith/state.h +Index: alpine-2.20/pith/state.h =================================================================== ---- alpine-2.11.orig/pith/state.h -+++ alpine-2.11/pith/state.h -@@ -326,6 +326,8 @@ struct pine { +--- alpine-2.20.orig/pith/state.h ++++ alpine-2.20/pith/state.h +@@ -331,6 +331,8 @@ struct pine { char *display_charmap; /* needs to be freed */ char *keyboard_charmap; /* needs to be freed */ void *input_cs; @@ -500,10 +500,10 @@ Index: alpine-2.11/pith/state.h char *posting_charmap; /* needs to be freed */ -Index: alpine-2.11/pith/text.c +Index: alpine-2.20/pith/text.c =================================================================== ---- alpine-2.11.orig/pith/text.c -+++ alpine-2.11/pith/text.c +--- alpine-2.20.orig/pith/text.c ++++ alpine-2.20/pith/text.c @@ -171,6 +171,15 @@ decode_text(ATTACH_S *att, gf_url_hilite_opt(&uh,handlesp,0)); } diff --git a/chappa-fancy.patch b/chappa-fancy.patch index ec1db52..bdb6c3c 100644 --- a/chappa-fancy.patch +++ b/chappa-fancy.patch @@ -28,19 +28,19 @@ web/src/alpined.d/alpined.c | 4 27 files changed, 1870 insertions(+), 155 deletions(-) -Index: alpine-2.11/alpine/arg.c +Index: alpine-2.20/alpine/arg.c =================================================================== ---- alpine-2.11.orig/alpine/arg.c -+++ alpine-2.11/alpine/arg.c -@@ -60,6 +60,7 @@ static char args_err_missing_passfile[] - static char args_err_non_abs_passfile[] = N_("argument to \"-passfile\" should be fully-qualified"); +--- alpine-2.20.orig/alpine/arg.c ++++ alpine-2.20/alpine/arg.c +@@ -64,6 +64,7 @@ static char args_err_non_abs_pwdcertdir[ + #endif /* SMIME inside PASSFILE */ #endif static char args_err_missing_sort[] = N_("missing argument for option \"-sort\""); +static char args_err_missing_thread_sort[] = N_("missing argument for option \"-threadsort\""); static char args_err_missing_flag_arg[] = N_("missing argument for flag \"%c\""); static char args_err_missing_flag_num[] = N_("Non numeric argument for flag \"%c\""); static char args_err_missing_debug_num[] = N_("Non numeric argument for \"%s\""); -@@ -103,6 +104,7 @@ N_(" -k \t\tKeys - Force use of function +@@ -107,6 +108,7 @@ N_(" -k \t\tKeys - Force use of function N_(" -z \t\tSuspend - allow use of ^Z suspension"), N_(" -r \t\tRestricted - can only send mail to oneself"), N_(" -sort \tSort - Specify sort order of folder:"), @@ -48,7 +48,7 @@ Index: alpine-2.11/alpine/arg.c N_("\t\t\tarrival, subject, threaded, orderedsubject, date,"), N_("\t\t\tfrom, size, score, to, cc, /reverse"), N_(" -i\t\tIndex - Go directly to index, bypassing main menu"), -@@ -192,6 +194,7 @@ pine_args(struct pine *pine_state, int a +@@ -200,6 +202,7 @@ pine_args(struct pine *pine_state, int a char *cmd_list = NULL; char *debug_str = NULL; char *sort = NULL; @@ -56,7 +56,7 @@ Index: alpine-2.11/alpine/arg.c char *pinerc_file = NULL; char *lc = NULL; int do_help = 0; -@@ -363,6 +366,17 @@ Loop: while(--ac > 0) +@@ -396,6 +399,17 @@ Loop: while(--ac > 0) goto Loop; } @@ -74,10 +74,10 @@ Index: alpine-2.11/alpine/arg.c else if(strcmp(*av, "url") == 0){ if(args->action == aaFolder && !args->data.folder){ args->action = aaURL; -Index: alpine-2.11/alpine/confscroll.c +Index: alpine-2.20/alpine/confscroll.c =================================================================== ---- alpine-2.11.orig/alpine/confscroll.c -+++ alpine-2.11/alpine/confscroll.c +--- alpine-2.20.orig/alpine/confscroll.c ++++ alpine-2.20/alpine/confscroll.c @@ -139,7 +139,7 @@ char *yesno_pretty_value(struct pine char *radio_pretty_value(struct pine *, CONF_S *); char *sigfile_pretty_value(struct pine *, CONF_S *); @@ -97,7 +97,7 @@ Index: alpine-2.11/alpine/confscroll.c standard_radio_var(ps, (*cl)->var) || (*cl)->var == startup_ptr))) return; -@@ -2923,7 +2924,7 @@ radiobutton_tool(struct pine *ps, int cm +@@ -2927,7 +2928,7 @@ radiobutton_tool(struct pine *ps, int cm } set_current_val((*cl)->var, TRUE, TRUE); @@ -106,7 +106,7 @@ Index: alpine-2.11/alpine/confscroll.c ps->def_sort = def_sort; ps->def_sort_rev = def_sort_rev; } -@@ -2932,6 +2933,37 @@ radiobutton_tool(struct pine *ps, int cm +@@ -2936,6 +2937,37 @@ radiobutton_tool(struct pine *ps, int cm ps->mangled_body = 1; /* BUG: redraw it all for now? */ rv = 1; } @@ -144,7 +144,7 @@ Index: alpine-2.11/alpine/confscroll.c else q_status_message(SM_ORDER | SM_DING, 3, 6, "Programmer botch! Unknown radiobutton type."); -@@ -3794,7 +3826,9 @@ pretty_value(struct pine *ps, CONF_S *cl +@@ -3799,7 +3831,9 @@ pretty_value(struct pine *ps, CONF_S *cl else if(standard_radio_var(ps, v) || v == startup_ptr) return(radio_pretty_value(ps, cl)); else if(v == &ps->vars[V_SORT_KEY]) @@ -155,7 +155,7 @@ Index: alpine-2.11/alpine/confscroll.c else if(v == &ps->vars[V_SIGNATURE_FILE]) return(sigfile_pretty_value(ps, cl)); else if(v == &ps->vars[V_USE_ONLY_DOMAIN_NAME]) -@@ -4325,14 +4359,14 @@ color_pretty_value(struct pine *ps, CONF +@@ -4330,14 +4364,14 @@ color_pretty_value(struct pine *ps, CONF char * @@ -173,7 +173,7 @@ Index: alpine-2.11/alpine/confscroll.c { char tmp[6*MAXPATH]; char *pvalnorm, *pvalexc, *pval; -@@ -4382,7 +4416,7 @@ generalized_sort_pretty_value(struct pin +@@ -4387,7 +4421,7 @@ generalized_sort_pretty_value(struct pin } else if(fixed){ pval = v->fixed_val.p; @@ -182,7 +182,7 @@ Index: alpine-2.11/alpine/confscroll.c is_the_one = (var_sort_rev == line_sort_rev && var_sort == line_sort); utf8_snprintf(tmp, sizeof(tmp), "(%c) %s%-*w%*s%s", -@@ -4393,9 +4427,9 @@ generalized_sort_pretty_value(struct pin +@@ -4398,9 +4432,9 @@ generalized_sort_pretty_value(struct pin is_the_one ? " (value is fixed)" : ""); } else if(is_set_for_this_level){ @@ -194,7 +194,7 @@ Index: alpine-2.11/alpine/confscroll.c the_exc_one = (editing_normal_which_isnt_except && pvalexc && exc_sort_rev == line_sort_rev && exc_sort == line_sort); utf8_snprintf(tmp, sizeof(tmp), "(%c) %s%-*w%*s%s", -@@ -4413,7 +4447,7 @@ generalized_sort_pretty_value(struct pin +@@ -4418,7 +4452,7 @@ generalized_sort_pretty_value(struct pin } else{ if(pvalexc){ @@ -203,7 +203,7 @@ Index: alpine-2.11/alpine/confscroll.c is_the_one = (exc_sort_rev == line_sort_rev && exc_sort == line_sort); utf8_snprintf(tmp, sizeof(tmp), "( ) %s%-*w%*s%s", -@@ -4424,7 +4458,7 @@ generalized_sort_pretty_value(struct pin +@@ -4429,7 +4463,7 @@ generalized_sort_pretty_value(struct pin } else{ pval = v->current_val.p; @@ -212,7 +212,7 @@ Index: alpine-2.11/alpine/confscroll.c is_the_one = ((pval || default_ok) && var_sort_rev == line_sort_rev && var_sort == line_sort); -@@ -5548,9 +5582,15 @@ fix_side_effects(struct pine *ps, struct +@@ -5571,9 +5605,15 @@ fix_side_effects(struct pine *ps, struct else if(revert && var == &ps->vars[V_SORT_KEY]){ int def_sort_rev; @@ -229,10 +229,10 @@ Index: alpine-2.11/alpine/confscroll.c else if(var == &ps->vars[V_THREAD_MORE_CHAR] || var == &ps->vars[V_THREAD_EXP_CHAR] || var == &ps->vars[V_THREAD_LASTREPLY_CHAR]){ -Index: alpine-2.11/alpine/confscroll.h +Index: alpine-2.20/alpine/confscroll.h =================================================================== ---- alpine-2.11.orig/alpine/confscroll.h -+++ alpine-2.11/alpine/confscroll.h +--- alpine-2.20.orig/alpine/confscroll.h ++++ alpine-2.20/alpine/confscroll.h @@ -95,7 +95,7 @@ int checkbox_tool(struct pine *, int, C int radiobutton_tool(struct pine *, int, CONF_S **, unsigned); int yesno_tool(struct pine *, int, CONF_S **, unsigned); @@ -242,10 +242,10 @@ Index: alpine-2.11/alpine/confscroll.h int exclude_config_var(struct pine *, struct variable *, int); int config_exit_cmd(unsigned); int simple_exit_cmd(unsigned); -Index: alpine-2.11/alpine/keymenu.c +Index: alpine-2.20/alpine/keymenu.c =================================================================== ---- alpine-2.11.orig/alpine/keymenu.c -+++ alpine-2.11/alpine/keymenu.c +--- alpine-2.20.orig/alpine/keymenu.c ++++ alpine-2.20/alpine/keymenu.c @@ -650,10 +650,25 @@ struct key index_keys[] = RCOMPOSE_MENU, HOMEKEY_MENU, @@ -319,10 +319,10 @@ Index: alpine-2.11/alpine/keymenu.c INST_KEY_MENU(view_keymenu, view_keys); -Index: alpine-2.11/alpine/keymenu.h +Index: alpine-2.20/alpine/keymenu.h =================================================================== ---- alpine-2.11.orig/alpine/keymenu.h -+++ alpine-2.11/alpine/keymenu.h +--- alpine-2.20.orig/alpine/keymenu.h ++++ alpine-2.20/alpine/keymenu.h @@ -215,6 +215,19 @@ struct key_menu { #define MC_DECRYPT 802 #define MC_QUOTA 803 @@ -341,12 +341,12 @@ Index: alpine-2.11/alpine/keymenu.h +#define MC_CTHREAD 816 +#define MC_OTHREAD 817 - /* - * Some standard Key/Command Bindings -Index: alpine-2.11/alpine/mailcmd.c + + /* Commands for S/MIME screens */ +Index: alpine-2.20/alpine/mailcmd.c =================================================================== ---- alpine-2.11.orig/alpine/mailcmd.c -+++ alpine-2.11/alpine/mailcmd.c +--- alpine-2.20.orig/alpine/mailcmd.c ++++ alpine-2.20/alpine/mailcmd.c @@ -113,7 +113,7 @@ int select_by_thread(MAILSTREAM *, MSG char *choose_a_rule(int); int select_by_keyword(MAILSTREAM *, SEARCHSET **); @@ -355,8 +355,8 @@ Index: alpine-2.11/alpine/mailcmd.c +int select_sort(struct pine *, int, SortOrder *, int *, int); int print_index(struct pine *, MSGNO_S *, int); - -@@ -1335,7 +1335,7 @@ get_out: + /* +@@ -1371,7 +1371,7 @@ get_out: if(any_messages(msgmap, NULL, NULL)){ if(any_lflagged(msgmap, MN_SLCT) > 0L){ if(apply_command(state, stream, msgmap, 0, @@ -365,7 +365,7 @@ Index: alpine-2.11/alpine/mailcmd.c if(F_ON(F_AUTO_UNSELECT, state)){ agg_select_all(stream, msgmap, NULL, 0); unzoom_index(state, stream, msgmap); -@@ -1353,23 +1353,35 @@ get_out: +@@ -1389,23 +1389,35 @@ get_out: /*-------- Sort command -------*/ case MC_SORT : @@ -403,7 +403,7 @@ Index: alpine-2.11/alpine/mailcmd.c } state->mangled_footer = 1; -@@ -3174,6 +3186,10 @@ cmd_expunge(struct pine *state, MAILSTRE +@@ -3286,6 +3298,10 @@ cmd_expunge(struct pine *state, MAILSTRE if(SORT_IS_THREADED(msgmap)) refresh_sort(stream, msgmap, SRT_NON); @@ -414,7 +414,7 @@ Index: alpine-2.11/alpine/mailcmd.c state->mangled_body = 1; state->mangled_header = 1; q_status_message2(SM_ORDER, 0, 4, -@@ -3268,6 +3284,9 @@ cmd_expunge(struct pine *state, MAILSTRE +@@ -3387,6 +3403,9 @@ cmd_expunge(struct pine *state, MAILSTRE */ if(SORT_IS_THREADED(msgmap)) refresh_sort(stream, msgmap, SRT_NON); @@ -423,8 +423,8 @@ Index: alpine-2.11/alpine/mailcmd.c + kolapse_thread(state, stream, msgmap, '[', 0); } else{ - if(del_count) -@@ -6945,7 +6964,7 @@ select_by_current(struct pine *state, MS + if(del_count){ +@@ -7090,7 +7109,7 @@ select_by_current(struct pine *state, MS * Maybe it makes sense to zoom after a select but not after a colon * command even though they are very similar. */ @@ -433,7 +433,7 @@ Index: alpine-2.11/alpine/mailcmd.c } else{ if((all_selected = -@@ -7001,7 +7020,7 @@ select_by_current(struct pine *state, MS +@@ -7146,7 +7165,7 @@ select_by_current(struct pine *state, MS ----*/ int apply_command(struct pine *state, MAILSTREAM *stream, MSGNO_S *msgmap, @@ -442,7 +442,7 @@ Index: alpine-2.11/alpine/mailcmd.c { int i = 8, /* number of static entries in sel_opts3 */ rv = 0, -@@ -7153,9 +7172,19 @@ apply_command(struct pine *state, MAILST +@@ -7305,9 +7324,19 @@ apply_command(struct pine *state, MAILST collapse_or_expand(state, stream, msgmap, F_ON(F_SLASH_COLL_ENTIRE, ps_global) ? 0L @@ -463,7 +463,7 @@ Index: alpine-2.11/alpine/mailcmd.c case ':' : select_thread_stmp(state, stream, msgmap); break; -@@ -9014,10 +9043,10 @@ Args: state -- pine state pointer +@@ -9171,10 +9200,10 @@ Args: state -- pine state pointer Returns 0 if it was cancelled, 1 otherwise. ----*/ int @@ -476,7 +476,7 @@ Index: alpine-2.11/alpine/mailcmd.c int deefault = 'a', retval = 1; HelpType help; ESCKEY_S sorts[14]; -@@ -9050,17 +9079,26 @@ select_sort(struct pine *state, int ql, +@@ -9207,17 +9236,26 @@ select_sort(struct pine *state, int ql, strncpy(prompt, _("Choose type of sort, or 'R' to reverse current sort : "), sizeof(prompt)); @@ -514,7 +514,7 @@ Index: alpine-2.11/alpine/mailcmd.c } sorts[i].ch = 'r'; -@@ -9084,8 +9122,17 @@ select_sort(struct pine *state, int ql, +@@ -9241,8 +9279,17 @@ select_sort(struct pine *state, int ql, state->mangled_body = 1; /* signal screen's changed */ if(s == 'r') *rev = !mn_get_revsort(state->msgmap); @@ -533,7 +533,7 @@ Index: alpine-2.11/alpine/mailcmd.c if(F_ON(F_SHOW_SORT, ps_global)) ps_global->mangled_header = 1; -@@ -9470,3 +9517,378 @@ flag_submenu(mc) +@@ -9627,3 +9674,378 @@ flag_submenu(mc) } #endif /* _WINDOWS */ @@ -912,11 +912,11 @@ Index: alpine-2.11/alpine/mailcmd.c + expand_thread(state, stream, msgmap, 0); +} + -Index: alpine-2.11/alpine/mailcmd.h +Index: alpine-2.20/alpine/mailcmd.h =================================================================== ---- alpine-2.11.orig/alpine/mailcmd.h -+++ alpine-2.11/alpine/mailcmd.h -@@ -84,7 +84,7 @@ char *broach_folder(int, int, int *, +--- alpine-2.20.orig/alpine/mailcmd.h ++++ alpine-2.20/alpine/mailcmd.h +@@ -87,7 +87,7 @@ char *broach_folder(int, int, int *, int ask_mailbox_reopen(struct pine *, int *); void visit_folder(struct pine *, char *, CONTEXT_S *, MAILSTREAM *, unsigned long); int select_by_current(struct pine *, MSGNO_S *, CmdWhere); @@ -925,7 +925,7 @@ Index: alpine-2.11/alpine/mailcmd.h char **choose_list_of_keywords(void); char *choose_a_charset(int); char **choose_list_of_charsets(void); -@@ -102,6 +102,15 @@ int any_selected_callback(int, long) +@@ -105,6 +105,15 @@ int any_selected_callback(int, long) int flag_callback(int, long); MPopup *flag_submenu(MESSAGECACHE *); #endif @@ -942,10 +942,10 @@ Index: alpine-2.11/alpine/mailcmd.h +int expand_this_thread(struct pine *, MAILSTREAM *, MSGNO_S *, int, int); #endif /* PINE_MAILCMD_INCLUDED */ -Index: alpine-2.11/alpine/mailindx.c +Index: alpine-2.20/alpine/mailindx.c =================================================================== ---- alpine-2.11.orig/alpine/mailindx.c -+++ alpine-2.11/alpine/mailindx.c +--- alpine-2.20.orig/alpine/mailindx.c ++++ alpine-2.20/alpine/mailindx.c @@ -561,6 +561,7 @@ index_lister(struct pine *state, CONTEXT /*---------- Scroll line up ----------*/ @@ -1102,7 +1102,7 @@ Index: alpine-2.11/alpine/mailindx.c /* increment current */ if(cmd == MC_DELETE){ advance_cur_after_delete(state, stream, msgmap, -@@ -2675,6 +2773,7 @@ top_ent_calc(MAILSTREAM *stream, MSGNO_S +@@ -2673,6 +2771,7 @@ top_ent_calc(MAILSTREAM *stream, MSGNO_S n = mn_raw2m(msgs, thrd->rawno); while(thrd){ @@ -1110,7 +1110,7 @@ Index: alpine-2.11/alpine/mailindx.c if(!msgline_hidden(stream, msgs, n, 0) && (++m % lines_per_page) == 1L) t = n; -@@ -2743,11 +2842,12 @@ top_ent_calc(MAILSTREAM *stream, MSGNO_S +@@ -2741,11 +2840,12 @@ top_ent_calc(MAILSTREAM *stream, MSGNO_S /* n is the end of this thread */ while(thrd){ @@ -1127,7 +1127,7 @@ Index: alpine-2.11/alpine/mailindx.c else thrd = NULL; } -@@ -2855,7 +2955,7 @@ warn_other_cmds(void) +@@ -2853,7 +2953,7 @@ warn_other_cmds(void) void thread_command(struct pine *state, MAILSTREAM *stream, MSGNO_S *msgmap, @@ -1136,7 +1136,7 @@ Index: alpine-2.11/alpine/mailindx.c { PINETHRD_S *thrd = NULL; unsigned long rawno, save_branch; -@@ -2904,7 +3004,7 @@ thread_command(struct pine *state, MAILS +@@ -2902,7 +3002,7 @@ thread_command(struct pine *state, MAILS cancel_busy_cue(0); (void ) apply_command(state, stream, msgmap, preloadkeystroke, flags, @@ -1145,7 +1145,7 @@ Index: alpine-2.11/alpine/mailindx.c /* restore the original flags */ copy_lflags(stream, msgmap, MN_STMP, MN_SLCT); -@@ -3398,7 +3498,7 @@ index_sort_callback(set, order) +@@ -3396,7 +3496,7 @@ index_sort_callback(set, order) if(set){ sort_folder(ps_global->mail_stream, ps_global->msgmap, order & 0x000000ff, @@ -1154,10 +1154,10 @@ Index: alpine-2.11/alpine/mailindx.c mswin_beginupdate(); update_titlebar_message(); update_titlebar_status(); -Index: alpine-2.11/alpine/mailindx.h +Index: alpine-2.20/alpine/mailindx.h =================================================================== ---- alpine-2.11.orig/alpine/mailindx.h -+++ alpine-2.11/alpine/mailindx.h +--- alpine-2.20.orig/alpine/mailindx.h ++++ alpine-2.20/alpine/mailindx.h @@ -103,7 +103,7 @@ int truncate_subj_and_from_strings(voi void paint_index_hline(MAILSTREAM *, long, ICE_S *); void setup_index_state(int); @@ -1167,11 +1167,11 @@ Index: alpine-2.11/alpine/mailindx.h COLOR_PAIR *apply_rev_color(COLOR_PAIR *, int); #ifdef _WINDOWS int index_sort_callback(int, long); -Index: alpine-2.11/alpine/mailview.c +Index: alpine-2.20/alpine/mailview.c =================================================================== ---- alpine-2.11.orig/alpine/mailview.c -+++ alpine-2.11/alpine/mailview.c -@@ -3364,6 +3364,52 @@ scrolltool(SCROLL_S *sparms) +--- alpine-2.20.orig/alpine/mailview.c ++++ alpine-2.20/alpine/mailview.c +@@ -3369,6 +3369,52 @@ scrolltool(SCROLL_S *sparms) print_to_printer(sparms); break; @@ -1224,10 +1224,10 @@ Index: alpine-2.11/alpine/mailview.c /* ------- First handle on Line ------ */ case MC_GOTOBOL : -Index: alpine-2.11/alpine/roleconf.c +Index: alpine-2.20/alpine/roleconf.c =================================================================== ---- alpine-2.11.orig/alpine/roleconf.c -+++ alpine-2.11/alpine/roleconf.c +--- alpine-2.20.orig/alpine/roleconf.c ++++ alpine-2.20/alpine/roleconf.c @@ -4478,11 +4478,11 @@ role_config_edit_screen(struct pine *ps, ctmp->tool = role_sort_tool; ctmp->valoffset = rindent; @@ -1269,10 +1269,10 @@ Index: alpine-2.11/alpine/roleconf.c (*result)->action->sort_is_set = 1; (*result)->action->sortorder = def_sort; (*result)->action->revsort = (def_sort_rev ? 1 : 0); -Index: alpine-2.11/alpine/setup.c +Index: alpine-2.20/alpine/setup.c =================================================================== ---- alpine-2.11.orig/alpine/setup.c -+++ alpine-2.11/alpine/setup.c +--- alpine-2.20.orig/alpine/setup.c ++++ alpine-2.20/alpine/setup.c @@ -258,7 +258,7 @@ option_screen(struct pine *ps, int edit_ ctmpa->flags |= CF_NOSELECT; ctmpa->value = cpystr("--- ----------------------"); @@ -1338,7 +1338,7 @@ Index: alpine-2.11/alpine/setup.c else if(vtmp == &ps->vars[V_USE_ONLY_DOMAIN_NAME]){ /* yesno case */ ctmpa->keymenu = &config_yesno_keymenu; ctmpa->tool = yesno_tool; -@@ -464,6 +513,15 @@ option_screen(struct pine *ps, int edit_ +@@ -465,6 +514,15 @@ option_screen(struct pine *ps, int edit_ } } @@ -1354,10 +1354,10 @@ Index: alpine-2.11/alpine/setup.c treat_color_vars_as_text = 0; free_saved_config(ps, &vsave, expose_hidden_config); #ifdef _WINDOWS -Index: alpine-2.11/pith/conf.c +Index: alpine-2.20/pith/conf.c =================================================================== ---- alpine-2.11.orig/pith/conf.c -+++ alpine-2.11/pith/conf.c +--- alpine-2.20.orig/pith/conf.c ++++ alpine-2.20/pith/conf.c @@ -206,6 +206,8 @@ CONF_TXT_T cf_text_fcc_name_rule[] = "De CONF_TXT_T cf_text_sort_key[] = "Sets presentation order of messages in Index. Choices:\n# Subject, From, Arrival, Date, Size, To, Cc, OrderedSubj, Score, and Thread.\n# Order may be reversed by appending /Reverse. Default: \"Arrival\"."; @@ -1367,7 +1367,7 @@ Index: alpine-2.11/pith/conf.c CONF_TXT_T cf_text_addrbook_sort_rule[] = "Sets presentation order of address book entries. Choices: dont-sort,\n# fullname-with-lists-last, fullname, nickname-with-lists-last, nickname\n# Default: \"fullname-with-lists-last\"."; CONF_TXT_T cf_text_folder_sort_rule[] = "Sets presentation order of folder list entries. Choices: alphabetical,\n# alpha-with-dirs-last, alpha-with-dirs-first.\n# Default: \"alpha-with-directories-last\"."; -@@ -522,6 +524,8 @@ static struct variable variables[] = { +@@ -524,6 +526,8 @@ static struct variable variables[] = { NULL, cf_text_fcc_name_rule}, {"sort-key", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, NULL, cf_text_sort_key}, @@ -1376,7 +1376,7 @@ Index: alpine-2.11/pith/conf.c {"addrbook-sort-rule", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, "Address Book Sort Rule", cf_text_addrbook_sort_rule}, {"folder-sort-rule", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, -@@ -1572,7 +1576,7 @@ init_vars(struct pine *ps, void (*cmds_f +@@ -1576,7 +1580,7 @@ init_vars(struct pine *ps, void (*cmds_f register struct variable *vars = ps->vars; int obs_header_in_reply = 0, /* the obs_ variables are to */ obs_old_style_reply = 0, /* support backwards compatibility */ @@ -1385,7 +1385,7 @@ Index: alpine-2.11/pith/conf.c long rvl; PINERC_S *fixedprc = NULL; FeatureLevel obs_feature_level; -@@ -1597,6 +1601,7 @@ init_vars(struct pine *ps, void (*cmds_f +@@ -1601,6 +1605,7 @@ init_vars(struct pine *ps, void (*cmds_f GLO_FEATURE_LEVEL = cpystr("sappling"); GLO_OLD_STYLE_REPLY = cpystr(DF_OLD_STYLE_REPLY); GLO_SORT_KEY = cpystr(DF_SORT_KEY); @@ -1393,7 +1393,7 @@ Index: alpine-2.11/pith/conf.c GLO_SAVED_MSG_NAME_RULE = cpystr(DF_SAVED_MSG_NAME_RULE); GLO_FCC_RULE = cpystr(DF_FCC_RULE); GLO_AB_SORT_RULE = cpystr(DF_AB_SORT_RULE); -@@ -2505,7 +2510,7 @@ init_vars(struct pine *ps, void (*cmds_f +@@ -2517,7 +2522,7 @@ init_vars(struct pine *ps, void (*cmds_f set_current_val(&vars[V_ARCHIVED_FOLDERS], TRUE, TRUE); set_current_val(&vars[V_INCOMING_FOLDERS], TRUE, TRUE); set_current_val(&vars[V_SORT_KEY], TRUE, TRUE); @@ -1402,7 +1402,7 @@ Index: alpine-2.11/pith/conf.c snprintf(tmp_20k_buf, SIZEOF_20KBUF, "Sort type \"%.200s\" is invalid", VAR_SORT_KEY); init_error(ps, SM_ORDER | SM_DING, 3, 5, tmp_20k_buf); ps->def_sort = SortArrival; -@@ -2514,6 +2519,17 @@ init_vars(struct pine *ps, void (*cmds_f +@@ -2526,6 +2531,17 @@ init_vars(struct pine *ps, void (*cmds_f else ps->def_sort_rev = def_sort_rev; @@ -1420,7 +1420,7 @@ Index: alpine-2.11/pith/conf.c cur_rule_value(&vars[V_SAVED_MSG_NAME_RULE], TRUE, TRUE); {NAMEVAL_S *v; int i; for(i = 0; (v = save_msg_rules(i)); i++) -@@ -2937,6 +2953,8 @@ feature_list(int index) +@@ -2949,6 +2965,8 @@ feature_list(int index) F_COLOR_LINE_IMPORTANT, h_config_color_thrd_import, PREF_INDX, 0}, {"thread-sorts-by-arrival", "Thread Sorts by Arrival", F_THREAD_SORTS_BY_ARRIVAL, h_config_thread_sorts_by_arrival, PREF_INDX, 0}, @@ -1429,7 +1429,7 @@ Index: alpine-2.11/pith/conf.c /* Viewer prefs */ {"enable-msg-view-addresses", "Enable Message View Address Links", -@@ -7619,6 +7637,8 @@ config_help(int var, int feature) +@@ -7685,6 +7703,8 @@ config_help(int var, int feature) return(h_config_fcc_rule); case V_SORT_KEY : return(h_config_sort_key); @@ -1438,10 +1438,10 @@ Index: alpine-2.11/pith/conf.c case V_AB_SORT_RULE : return(h_config_ab_sort_rule); case V_FLD_SORT_RULE : -Index: alpine-2.11/pith/conf.h +Index: alpine-2.20/pith/conf.h =================================================================== ---- alpine-2.11.orig/pith/conf.h -+++ alpine-2.11/pith/conf.h +--- alpine-2.20.orig/pith/conf.h ++++ alpine-2.20/pith/conf.h @@ -144,6 +144,9 @@ #define VAR_SORT_KEY vars[V_SORT_KEY].current_val.p #define GLO_SORT_KEY vars[V_SORT_KEY].global_val.p @@ -1452,10 +1452,10 @@ Index: alpine-2.11/pith/conf.h #define VAR_AB_SORT_RULE vars[V_AB_SORT_RULE].current_val.p #define GLO_AB_SORT_RULE vars[V_AB_SORT_RULE].global_val.p #define VAR_FLD_SORT_RULE vars[V_FLD_SORT_RULE].current_val.p -Index: alpine-2.11/pith/conftype.h +Index: alpine-2.20/pith/conftype.h =================================================================== ---- alpine-2.11.orig/pith/conftype.h -+++ alpine-2.11/pith/conftype.h +--- alpine-2.20.orig/pith/conftype.h ++++ alpine-2.20/pith/conftype.h @@ -59,6 +59,7 @@ typedef enum { V_PERSONAL_NAME = 0 , V_SAVED_MSG_NAME_RULE , V_FCC_RULE @@ -1464,7 +1464,7 @@ Index: alpine-2.11/pith/conftype.h , V_AB_SORT_RULE , V_FLD_SORT_RULE , V_GOTO_DEFAULT_RULE -@@ -509,6 +510,7 @@ typedef enum { +@@ -511,6 +512,7 @@ typedef enum { F_QUELL_TIMEZONE, F_QUELL_USERAGENT, F_COLOR_LINE_IMPORTANT, @@ -1472,17 +1472,17 @@ Index: alpine-2.11/pith/conftype.h F_SLASH_COLL_ENTIRE, F_ENABLE_FULL_HDR_AND_TEXT, F_QUELL_FULL_HDR_RESET, -@@ -716,5 +718,6 @@ typedef struct smime_stuff { +@@ -766,5 +768,6 @@ typedef struct smime_stuff { /* exported protoypes */ +#define DF_THREAD_SORT_KEY "thread" #endif /* PITH_CONFTYPE_INCLUDED */ -Index: alpine-2.11/pith/flag.c +Index: alpine-2.20/pith/flag.c =================================================================== ---- alpine-2.11.orig/pith/flag.c -+++ alpine-2.11/pith/flag.c +--- alpine-2.20.orig/pith/flag.c ++++ alpine-2.20/pith/flag.c @@ -594,14 +594,16 @@ set_lflag(MAILSTREAM *stream, MSGNO_S *m was_invisible = (pelt->hidden || pelt->colhid) ? 1 : 0; @@ -1502,10 +1502,10 @@ Index: alpine-2.11/pith/flag.c } if(topthrd){ -Index: alpine-2.11/pith/indxtype.h +Index: alpine-2.20/pith/indxtype.h =================================================================== ---- alpine-2.11.orig/pith/indxtype.h -+++ alpine-2.11/pith/indxtype.h +--- alpine-2.20.orig/pith/indxtype.h ++++ alpine-2.20/pith/indxtype.h @@ -76,7 +76,7 @@ typedef enum {iNothing, iStatus, iFStatu iKey, iKeyInit, iPrefDate, iPrefTime, iPrefDateTime, @@ -1515,10 +1515,10 @@ Index: alpine-2.11/pith/indxtype.h iNewsAndTo, iToAndNews, iNewsAndRecips, iRecipsAndNews, iFromTo, iFromToNotNews, iFrom, iTo, iSender, iCc, iNews, iRecips, iCurNews, iArrow, -Index: alpine-2.11/pith/mailindx.c +Index: alpine-2.20/pith/mailindx.c =================================================================== ---- alpine-2.11.orig/pith/mailindx.c -+++ alpine-2.11/pith/mailindx.c +--- alpine-2.20.orig/pith/mailindx.c ++++ alpine-2.20/pith/mailindx.c @@ -228,6 +228,7 @@ init_index_format(char *format, INDEX_CO case iSTime: case iKSize: @@ -1624,7 +1624,7 @@ Index: alpine-2.11/pith/mailindx.c /* 0 ... 9999 */ if((l = fetch_size(idata)) < 10*1000L) snprintf(str, sizeof(str), "(%lu)", l); -@@ -5412,10 +5437,8 @@ subj_str(INDEXDATA_S *idata, char *str, +@@ -5413,10 +5438,8 @@ subj_str(INDEXDATA_S *idata, char *str, if(pith_opt_condense_thread_cue) width = (*pith_opt_condense_thread_cue)(thd, ice, &str, &strsize, width, @@ -1637,7 +1637,7 @@ Index: alpine-2.11/pith/mailindx.c /* * width is < available strsize and -@@ -6043,11 +6066,8 @@ from_str(IndexColType ctype, INDEXDATA_S +@@ -6044,11 +6067,8 @@ from_str(IndexColType ctype, INDEXDATA_S border = str + width; if(pith_opt_condense_thread_cue) width = (*pith_opt_condense_thread_cue)(thd, ice, &str, &strsize, width, @@ -1651,10 +1651,10 @@ Index: alpine-2.11/pith/mailindx.c fptr = str; if(thd) -Index: alpine-2.11/pith/pattern.c +Index: alpine-2.20/pith/pattern.c =================================================================== ---- alpine-2.11.orig/pith/pattern.c -+++ alpine-2.11/pith/pattern.c +--- alpine-2.20.orig/pith/pattern.c ++++ alpine-2.20/pith/pattern.c @@ -1756,7 +1756,7 @@ parse_action_slash(char *str, ACTION_S * SortOrder def_sort; int def_sort_rev; @@ -1664,11 +1664,11 @@ Index: alpine-2.11/pith/pattern.c action->sort_is_set = 1; action->sortorder = def_sort; action->revsort = (def_sort_rev ? 1 : 0); -Index: alpine-2.11/pith/pine.hlp +Index: alpine-2.20/pith/pine.hlp =================================================================== ---- alpine-2.11.orig/pith/pine.hlp -+++ alpine-2.11/pith/pine.hlp -@@ -3596,6 +3596,7 @@ There are also additional details on +--- alpine-2.20.orig/pith/pine.hlp ++++ alpine-2.20/pith/pine.hlp +@@ -3866,6 +3866,7 @@ There are also additional details on

  • OPTION:
  • OPTION:
  • OPTION: @@ -1676,7 +1676,7 @@ Index: alpine-2.11/pith/pine.hlp
  • OPTION:
  • OPTION:
  • OPTION: -@@ -5528,6 +5529,163 @@ the names of the carbon copy addresses o +@@ -5802,6 +5803,163 @@ the names of the carbon copy addresses o <End of help on this topic> @@ -1840,7 +1840,7 @@ Index: alpine-2.11/pith/pine.hlp ======= h_index_cmd_whereis ======= -@@ -18894,6 +19052,14 @@ The progression of sizes used looks like +@@ -19184,6 +19342,14 @@ The progression of sizes used looks like

    @@ -1855,7 +1855,7 @@ Index: alpine-2.11/pith/pine.hlp

    SIZENARROW
    This token represents the total size, in bytes, of the message. -@@ -22259,6 +22425,45 @@ command, then it will not be re-sorted u +@@ -22655,6 +22821,45 @@ command, then it will not be re-sorted u <End of help on this topic> @@ -1901,7 +1901,7 @@ Index: alpine-2.11/pith/pine.hlp ====== h_config_other_startup ===== -@@ -30089,6 +30294,23 @@ Reply Use, Forward Use, and Compose Use. +@@ -30485,6 +30690,23 @@ Reply Use, Forward Use, and Compose Use. <End of help on this topic> @@ -1925,10 +1925,10 @@ Index: alpine-2.11/pith/pine.hlp ====== h_config_news_cross_deletes ===== -Index: alpine-2.11/pith/sort.c +Index: alpine-2.20/pith/sort.c =================================================================== ---- alpine-2.11.orig/pith/sort.c -+++ alpine-2.11/pith/sort.c +--- alpine-2.20.orig/pith/sort.c ++++ alpine-2.20/pith/sort.c @@ -91,7 +91,7 @@ Args: msgmap -- ----*/ void @@ -2016,10 +2016,10 @@ Index: alpine-2.11/pith/sort.c - the_sort_order, sort_is_rev, flags); + the_sort_order, sort_is_rev, flags, 1); } -Index: alpine-2.11/pith/sort.h +Index: alpine-2.20/pith/sort.h =================================================================== ---- alpine-2.11.orig/pith/sort.h -+++ alpine-2.11/pith/sort.h +--- alpine-2.20.orig/pith/sort.h ++++ alpine-2.20/pith/sort.h @@ -22,7 +22,7 @@ @@ -2040,10 +2040,10 @@ Index: alpine-2.11/pith/sort.h void reset_sort_order(unsigned); -Index: alpine-2.11/pith/state.c +Index: alpine-2.20/pith/state.c =================================================================== ---- alpine-2.11.orig/pith/state.c -+++ alpine-2.11/pith/state.c +--- alpine-2.20.orig/pith/state.c ++++ alpine-2.20/pith/state.c @@ -74,6 +74,7 @@ new_pine_struct(void) p = (struct pine *)fs_get(sizeof (struct pine)); @@ -2052,10 +2052,10 @@ Index: alpine-2.11/pith/state.c p->def_sort = SortArrival; p->sort_types[0] = SortSubject; p->sort_types[1] = SortArrival; -Index: alpine-2.11/pith/state.h +Index: alpine-2.20/pith/state.h =================================================================== ---- alpine-2.11.orig/pith/state.h -+++ alpine-2.11/pith/state.h +--- alpine-2.20.orig/pith/state.h ++++ alpine-2.20/pith/state.h @@ -137,6 +137,8 @@ struct pine { unsigned unseen_in_view:1; unsigned start_in_context:1; /* start fldr_scrn in current cntxt */ @@ -2065,7 +2065,7 @@ Index: alpine-2.11/pith/state.h unsigned restricted:1; unsigned tcptimeout:1; /* a tcp timeout is in progress */ -@@ -288,6 +290,9 @@ struct pine { +@@ -291,6 +293,9 @@ struct pine { EditWhich ew_for_srch_take; SortOrder def_sort, /* Default sort type */ @@ -2075,10 +2075,10 @@ Index: alpine-2.11/pith/state.h sort_types[22]; int preserve; -Index: alpine-2.11/pith/thread.c +Index: alpine-2.20/pith/thread.c =================================================================== ---- alpine-2.11.orig/pith/thread.c -+++ alpine-2.11/pith/thread.c +--- alpine-2.20.orig/pith/thread.c ++++ alpine-2.20/pith/thread.c @@ -30,12 +30,18 @@ static char rcsid[] = "$Id: thread.c 942 #include "../pith/mailcmd.h" #include "../pith/ablookup.h" @@ -3127,10 +3127,10 @@ Index: alpine-2.11/pith/thread.c + || sort == SortSize; +} + -Index: alpine-2.11/pith/thread.h +Index: alpine-2.20/pith/thread.h =================================================================== ---- alpine-2.11.orig/pith/thread.h -+++ alpine-2.11/pith/thread.h +--- alpine-2.20.orig/pith/thread.h ++++ alpine-2.20/pith/thread.h @@ -37,6 +37,7 @@ typedef struct pine_thrd { unsigned long nextthd; /* next thread, only tops have this */ unsigned long prevthd; /* previous thread, only tops have this */ @@ -3174,10 +3174,10 @@ Index: alpine-2.11/pith/thread.h +int allowed_thread_key(SortOrder sort); #endif /* PITH_THREAD_INCLUDED */ -Index: alpine-2.11/web/src/alpined.d/alpined.c +Index: alpine-2.20/web/src/alpined.d/alpined.c =================================================================== ---- alpine-2.11.orig/web/src/alpined.d/alpined.c -+++ alpine-2.11/web/src/alpined.d/alpined.c +--- alpine-2.20.orig/web/src/alpined.d/alpined.c ++++ alpine-2.20/web/src/alpined.d/alpined.c @@ -2755,7 +2755,7 @@ PEConfigCmd(ClientData clientData, Tcl_I init_save_defaults(); break; diff --git a/chappa-ignoresize.patch b/chappa-ignoresize.patch index e57bc70..3715815 100644 --- a/chappa-ignoresize.patch +++ b/chappa-ignoresize.patch @@ -6,11 +6,11 @@ pith/save.c | 1 + 5 files changed, 42 insertions(+) -Index: alpine-2.11/alpine/mailcmd.c +Index: alpine-2.20/alpine/mailcmd.c =================================================================== ---- alpine-2.11.orig/alpine/mailcmd.c -+++ alpine-2.11/alpine/mailcmd.c -@@ -3368,6 +3368,9 @@ save_size_changed_prompt(long msgno, int +--- alpine-2.20.orig/alpine/mailcmd.c ++++ alpine-2.20/alpine/mailcmd.c +@@ -3491,6 +3491,9 @@ save_size_changed_prompt(long msgno, int {-1, 0, NULL, NULL} }; @@ -20,11 +20,11 @@ Index: alpine-2.11/alpine/mailcmd.c if(flags & SSCP_INIT || flags & SSCP_END){ if(flags & SSCP_END && possible_corruption) q_status_message(SM_ORDER, 3, 3, "There is possible data corruption, check the results"); -Index: alpine-2.11/pith/conf.c +Index: alpine-2.20/pith/conf.c =================================================================== ---- alpine-2.11.orig/pith/conf.c -+++ alpine-2.11/pith/conf.c -@@ -3123,6 +3123,8 @@ feature_list(int index) +--- alpine-2.20.orig/pith/conf.c ++++ alpine-2.20/pith/conf.c +@@ -3140,6 +3140,8 @@ feature_list(int index) F_FULL_AUTO_EXPUNGE, h_config_full_auto_expunge, PREF_MISC, 0}, {"force-arrow-cursor", NULL, F_FORCE_ARROW, h_config_force_arrow, PREF_MISC, 0}, @@ -33,11 +33,11 @@ Index: alpine-2.11/pith/conf.c {"maildrops-preserve-state", NULL, F_MAILDROPS_PRESERVE_STATE, h_config_maildrops_preserve_state, PREF_MISC, 0}, -Index: alpine-2.11/pith/conftype.h +Index: alpine-2.20/pith/conftype.h =================================================================== ---- alpine-2.11.orig/pith/conftype.h -+++ alpine-2.11/pith/conftype.h -@@ -346,6 +346,7 @@ typedef enum { +--- alpine-2.20.orig/pith/conftype.h ++++ alpine-2.20/pith/conftype.h +@@ -347,6 +347,7 @@ typedef enum { F_FORCE_ARROW, F_PRUNE_USES_ISO, F_ALT_ED_NOW, @@ -45,11 +45,11 @@ Index: alpine-2.11/pith/conftype.h F_SHOW_DELAY_CUE, F_CANCEL_CONFIRM, F_AUTO_OPEN_NEXT_UNREAD, -Index: alpine-2.11/pith/pine.hlp +Index: alpine-2.20/pith/pine.hlp =================================================================== ---- alpine-2.11.orig/pith/pine.hlp -+++ alpine-2.11/pith/pine.hlp -@@ -3296,6 +3296,7 @@ There are also additional details on +--- alpine-2.20.orig/pith/pine.hlp ++++ alpine-2.20/pith/pine.hlp +@@ -3565,6 +3565,7 @@ There are also additional details on
  • FEATURE:
  • FEATURE:
  • FEATURE: @@ -57,7 +57,7 @@ Index: alpine-2.11/pith/pine.hlp
  • FEATURE:
  • FEATURE:
  • FEATURE: -@@ -30787,6 +30788,40 @@ but that is not implemented. +@@ -31183,6 +31184,40 @@ but that is not implemented.

    <End of help on this topic> @@ -98,10 +98,10 @@ Index: alpine-2.11/pith/pine.hlp ====== h_config_force_low_speed ===== -Index: alpine-2.11/pith/save.c +Index: alpine-2.20/pith/save.c =================================================================== ---- alpine-2.11.orig/pith/save.c -+++ alpine-2.11/pith/save.c +--- alpine-2.20.orig/pith/save.c ++++ alpine-2.20/pith/save.c @@ -1157,6 +1157,7 @@ long save_fetch_append_cb(MAILSTREAM *st snprintf(buf, sizeof(buf), "Message to save shrank: source msg # %ld may be saved incorrectly", diff --git a/chappa-insertpat.patch b/chappa-insertpat.patch index 845882b..6bfd587 100644 --- a/chappa-insertpat.patch +++ b/chappa-insertpat.patch @@ -3,10 +3,10 @@ pico/search.c | 4 ++++ 2 files changed, 16 insertions(+) -Index: alpine-2.11/pico/display.c +Index: alpine-2.20/pico/display.c =================================================================== ---- alpine-2.11.orig/pico/display.c -+++ alpine-2.11/pico/display.c +--- alpine-2.20.orig/pico/display.c ++++ alpine-2.20/pico/display.c @@ -1760,6 +1760,18 @@ mlreplyd(UCS *prompt, UCS *buf, int nbuf continue; @@ -26,11 +26,11 @@ Index: alpine-2.11/pico/display.c case (CTRL|'G') : /* CTRL-G help */ if(term.t_mrow == 0 && km_popped == 0){ movecursor(term.t_nrow-2, 0); -Index: alpine-2.11/pico/search.c +Index: alpine-2.20/pico/search.c =================================================================== ---- alpine-2.11.orig/pico/search.c -+++ alpine-2.11/pico/search.c -@@ -76,6 +76,10 @@ N_(" brackets. This string is th +--- alpine-2.20.orig/pico/search.c ++++ alpine-2.20/pico/search.c +@@ -81,6 +81,10 @@ N_(" brackets. This string is th N_("~ Hitting only ~R~e~t~u~r~n or at the prompt will cause the"), N_(" search to be made with the default value."), " ", diff --git a/chappa-maildir.patch b/chappa-maildir.patch index 4ac251a..6e5343a 100644 --- a/chappa-maildir.patch +++ b/chappa-maildir.patch @@ -6,22 +6,22 @@ imap/src/c-client/mail.h | 4 imap/src/osdep/unix/Makefile | 8 imap/src/osdep/unix/dummy.c | 48 - imap/src/osdep/unix/maildir.c | 2638 ++++++++++++++++++++++++++++++++++++++++++ + imap/src/osdep/unix/maildir.c | 2671 ++++++++++++++++++++++++++++++++++++++++++ imap/src/osdep/unix/maildir.h | 226 +++ imap/src/osdep/unix/os_cyg.h | 1 - pith/conf.c | 27 + pith/conf.c | 30 pith/conf.h | 4 pith/conftype.h | 6 pith/init.c | 3 - pith/pattern.c | 26 + pith/pattern.c | 30 pith/pine.hlp | 139 ++ - pith/send.c | 7 - 17 files changed, 3293 insertions(+), 15 deletions(-) + pith/send.c | 10 + 17 files changed, 3334 insertions(+), 17 deletions(-) -Index: alpine-2.11/README.maildir +Index: alpine-2.20/README.maildir =================================================================== --- /dev/null -+++ alpine-2.11/README.maildir ++++ alpine-2.20/README.maildir @@ -0,0 +1,149 @@ +--------------------------------------- + @@ -172,27 +172,27 @@ Index: alpine-2.11/README.maildir +point to the same place. + +Last Updated May 28, 2011 -Index: alpine-2.11/alpine/alpine.c +Index: alpine-2.20/alpine/alpine.c =================================================================== ---- alpine-2.11.orig/alpine/alpine.c -+++ alpine-2.11/alpine/alpine.c -@@ -558,6 +558,11 @@ main(int argc, char **argv) +--- alpine-2.20.orig/alpine/alpine.c ++++ alpine-2.20/alpine/alpine.c +@@ -560,6 +560,11 @@ main(int argc, char **argv) if(F_ON(F_MAILDROPS_PRESERVE_STATE, ps_global)) mail_parameters(NULL, SET_SNARFPRESERVE, (void *) TRUE); +#ifndef _WINDOWS -+ mail_parameters(NULL,SET_COURIERSTYLE, -+ (void *)(F_ON(F_COURIER_FOLDER_LIST, ps_global) ? 1 : 0)); ++ rv = F_ON(F_COURIER_FOLDER_LIST, ps_global) ? 1 : 0; ++ mail_parameters(NULL,SET_COURIERSTYLE, (void *) &rv); +#endif + rvl = 0L; if(pine_state->VAR_NNTPRANGE){ if(!SVAR_NNTPRANGE(pine_state, rvl, tmp_20k_buf, SIZEOF_20KBUF)) -Index: alpine-2.11/alpine/confscroll.c +Index: alpine-2.20/alpine/confscroll.c =================================================================== ---- alpine-2.11.orig/alpine/confscroll.c -+++ alpine-2.11/alpine/confscroll.c -@@ -5533,6 +5533,12 @@ fix_side_effects(struct pine *ps, struct +--- alpine-2.20.orig/alpine/confscroll.c ++++ alpine-2.20/alpine/confscroll.c +@@ -5556,6 +5556,12 @@ fix_side_effects(struct pine *ps, struct (void *)var->current_val.p); } #endif @@ -205,11 +205,11 @@ Index: alpine-2.11/alpine/confscroll.c else if(revert && standard_radio_var(ps, var)){ cur_rule_value(var, TRUE, FALSE); -Index: alpine-2.11/imap/src/c-client/mail.c +Index: alpine-2.20/imap/src/c-client/mail.c =================================================================== ---- alpine-2.11.orig/imap/src/c-client/mail.c -+++ alpine-2.11/imap/src/c-client/mail.c -@@ -991,7 +991,7 @@ long mail_create (MAILSTREAM *stream,cha +--- alpine-2.20.orig/imap/src/c-client/mail.c ++++ alpine-2.20/imap/src/c-client/mail.c +@@ -1011,7 +1011,7 @@ long mail_create (MAILSTREAM *stream,cha MAILSTREAM *ts; char *s,*t,tmp[MAILTMPLEN]; size_t i; @@ -218,7 +218,7 @@ Index: alpine-2.11/imap/src/c-client/mail.c /* never allow names with newlines */ if (s = strpbrk (mailbox,"\015\012")) { MM_LOG ("Can't create mailbox with such a name",ERROR); -@@ -1015,6 +1015,8 @@ long mail_create (MAILSTREAM *stream,cha +@@ -1035,6 +1035,8 @@ long mail_create (MAILSTREAM *stream,cha return NIL; } @@ -227,7 +227,7 @@ Index: alpine-2.11/imap/src/c-client/mail.c /* see if special driver hack */ if ((mailbox[0] == '#') && ((mailbox[1] == 'd') || (mailbox[1] == 'D')) && ((mailbox[2] == 'r') || (mailbox[2] == 'R')) && -@@ -1045,6 +1047,13 @@ long mail_create (MAILSTREAM *stream,cha +@@ -1065,6 +1067,13 @@ long mail_create (MAILSTREAM *stream,cha (((*mailbox == '{') || (*mailbox == '#')) && (stream = mail_open (NIL,mailbox,OP_PROTOTYPE | OP_SILENT)))) d = stream->dtb; @@ -241,11 +241,11 @@ Index: alpine-2.11/imap/src/c-client/mail.c else if ((*mailbox != '{') && (ts = default_proto (NIL))) d = ts->dtb; else { /* failed utterly */ sprintf (tmp,"Can't create mailbox %.80s: indeterminate format",mailbox); -Index: alpine-2.11/imap/src/c-client/mail.h +Index: alpine-2.20/imap/src/c-client/mail.h =================================================================== ---- alpine-2.11.orig/imap/src/c-client/mail.h -+++ alpine-2.11/imap/src/c-client/mail.h -@@ -353,6 +353,10 @@ +--- alpine-2.20.orig/imap/src/c-client/mail.h ++++ alpine-2.20/imap/src/c-client/mail.h +@@ -354,6 +354,10 @@ #define SET_SCANCONTENTS (long) 573 #define GET_MHALLOWINBOX (long) 574 #define SET_MHALLOWINBOX (long) 575 @@ -256,11 +256,11 @@ Index: alpine-2.11/imap/src/c-client/mail.h /* Driver flags */ -Index: alpine-2.11/imap/src/osdep/unix/Makefile +Index: alpine-2.20/imap/src/osdep/unix/Makefile =================================================================== ---- alpine-2.11.orig/imap/src/osdep/unix/Makefile -+++ alpine-2.11/imap/src/osdep/unix/Makefile -@@ -144,7 +144,7 @@ DEFAULTAUTHENTICATORS=ext md5 pla log +--- alpine-2.20.orig/imap/src/osdep/unix/Makefile ++++ alpine-2.20/imap/src/osdep/unix/Makefile +@@ -147,7 +147,7 @@ DEFAULTAUTHENTICATORS=ext md5 pla log # However, mh needs to be before any sysinbox formats (such as mmdf or unix) # since otherwise INBOX won't work correctly when mh_allow_inbox is set. # @@ -269,7 +269,7 @@ Index: alpine-2.11/imap/src/osdep/unix/Makefile CHUNKSIZE=65536 # Normally no need to change any of these -@@ -153,7 +153,7 @@ ARCHIVE=c-client.a +@@ -156,7 +156,7 @@ ARCHIVE=c-client.a BINARIES=osdep.o mail.o misc.o newsrc.o smanager.o utf8.o utf8aux.o siglocal.o \ dummy.o pseudo.o netmsg.o flstring.o fdstring.o \ rfc822.o nntp.o smtp.o imap4r1.o pop3.o \ @@ -278,7 +278,7 @@ Index: alpine-2.11/imap/src/osdep/unix/Makefile CFLAGS=-g CAT=cat -@@ -290,7 +290,7 @@ cvx: # Convex +@@ -293,7 +293,7 @@ cvx: # Convex cyg: # Cygwin - note that most local file drivers don't work!! $(BUILD) `$(CAT) SPECIALS` OS=$@ \ @@ -287,7 +287,7 @@ Index: alpine-2.11/imap/src/osdep/unix/Makefile SIGTYPE=psx CHECKPW=cyg LOGINPW=cyg CRXTYPE=std \ SPOOLDIR=/var \ ACTIVEFILE=/usr/local/news/lib/active \ -@@ -900,7 +900,7 @@ tenex.o: mail.h misc.h osdep.h dummy.h +@@ -911,7 +911,7 @@ tenex.o: mail.h misc.h osdep.h dummy.h unix.o: mail.h misc.h osdep.h unix.h pseudo.h dummy.h utf8.o: mail.h misc.h osdep.h utf8.h tmap.c widths.c utf8aux.o: mail.h misc.h osdep.h utf8.h @@ -296,11 +296,11 @@ Index: alpine-2.11/imap/src/osdep/unix/Makefile # OS-dependent -Index: alpine-2.11/imap/src/osdep/unix/dummy.c +Index: alpine-2.20/imap/src/osdep/unix/dummy.c =================================================================== ---- alpine-2.11.orig/imap/src/osdep/unix/dummy.c -+++ alpine-2.11/imap/src/osdep/unix/dummy.c -@@ -106,13 +106,19 @@ MAILSTREAM dummyproto = {&dummydriver}; +--- alpine-2.20.orig/imap/src/osdep/unix/dummy.c ++++ alpine-2.20/imap/src/osdep/unix/dummy.c +@@ -103,13 +103,19 @@ MAILSTREAM dummyproto = {&dummydriver}; * Accepts: mailbox name * Returns: our driver if name is valid, NIL otherwise */ @@ -323,7 +323,7 @@ Index: alpine-2.11/imap/src/osdep/unix/dummy.c /* indeterminate clearbox INBOX */ if (!*s) return &dummydriver; else if (!stat (s,&sbuf)) switch (sbuf.st_mode & S_IFMT) { -@@ -121,8 +127,9 @@ DRIVER *dummy_valid (char *name) +@@ -118,8 +124,9 @@ DRIVER *dummy_valid (char *name) return &dummydriver; } /* blackbox INBOX does not exist yet */ @@ -334,7 +334,7 @@ Index: alpine-2.11/imap/src/osdep/unix/dummy.c return NIL; } -@@ -454,6 +461,8 @@ long dummy_create (MAILSTREAM *stream,ch +@@ -452,6 +459,8 @@ long dummy_create (MAILSTREAM *stream,ch { char *s,tmp[MAILTMPLEN]; long ret = NIL; @@ -343,7 +343,7 @@ Index: alpine-2.11/imap/src/osdep/unix/dummy.c /* validate name */ if (!(compare_cstring (mailbox,"INBOX") && (s = dummy_file (tmp,mailbox)))) { sprintf (tmp,"Can't create %.80s: invalid name",mailbox); -@@ -519,6 +528,14 @@ long dummy_delete (MAILSTREAM *stream,ch +@@ -517,6 +526,14 @@ long dummy_delete (MAILSTREAM *stream,ch { struct stat sbuf; char *s,tmp[MAILTMPLEN]; @@ -358,7 +358,7 @@ Index: alpine-2.11/imap/src/osdep/unix/dummy.c if (!(s = dummy_file (tmp,mailbox))) { sprintf (tmp,"Can't delete - invalid name: %.80s",s); MM_LOG (tmp,ERROR); -@@ -544,12 +561,23 @@ long dummy_delete (MAILSTREAM *stream,ch +@@ -542,12 +559,23 @@ long dummy_delete (MAILSTREAM *stream,ch long dummy_rename (MAILSTREAM *stream,char *old,char *newname) { struct stat sbuf; @@ -385,7 +385,7 @@ Index: alpine-2.11/imap/src/osdep/unix/dummy.c MM_LOG (mbx,ERROR); return NIL; } -@@ -565,14 +593,16 @@ long dummy_rename (MAILSTREAM *stream,ch +@@ -563,14 +591,16 @@ long dummy_rename (MAILSTREAM *stream,ch } } /* rename of non-ex INBOX creates dest */ @@ -404,16 +404,16 @@ Index: alpine-2.11/imap/src/osdep/unix/dummy.c return T; /* return success */ } -Index: alpine-2.11/imap/src/osdep/unix/maildir.c +Index: alpine-2.20/imap/src/osdep/unix/maildir.c =================================================================== --- /dev/null -+++ alpine-2.11/imap/src/osdep/unix/maildir.c -@@ -0,0 +1,2638 @@ ++++ alpine-2.20/imap/src/osdep/unix/maildir.c +@@ -0,0 +1,2671 @@ +/* -+ * Maildir driver for Alpine 2.00 ++ * Maildir driver for Alpine 2.20 + * + * Written by Eduardo Chappa -+ * Last Update: May 29, 2011. ++ * Last Update: June 10, 2014 + * + */ + @@ -1589,7 +1589,7 @@ Index: alpine-2.11/imap/src/osdep/unix/maildir.c + char *s, c, err[MAILTMPLEN], tmp[MAILTMPLEN], tmp2[MAILTMPLEN], mbx[MAILTMPLEN]; + int fnlen, create_dir = 0, courier, mv; + struct stat sbuf; -+ long style = (long) maildir_parameters(GET_COURIERSTYLE, NIL); ++ long style = *(long *) maildir_parameters(GET_COURIERSTYLE, NIL); + + courier = IS_COURIER(mailbox); + strcpy(mbx, mailbox); @@ -1817,7 +1817,7 @@ Index: alpine-2.11/imap/src/osdep/unix/maildir.c + +long maildir_append (MAILSTREAM *stream,char *mailbox,append_t af,void *data) +{ -+ int fd, k; ++ int fd, k, done, fail; + STRING *message; + char c,*s, *flags, *date; + char tmp[MAILTMPLEN],file[MAILTMPLEN],path1[MAILTMPLEN],path2[MAILTMPLEN]; @@ -1825,6 +1825,7 @@ Index: alpine-2.11/imap/src/osdep/unix/maildir.c + long i, size = 0L, ret = LONGT, f; + unsigned long uf, ti; + static unsigned int transact = 0; ++ struct stat sbuf; + + if (!maildir_valid(mailbox)) { + snprintf (tmp, sizeof(tmp), "Not a valid Maildir mailbox: %s", mailbox); @@ -1848,29 +1849,58 @@ Index: alpine-2.11/imap/src/osdep/unix/maildir.c + if (!(*af)(stream, data, &flags, &date, &message)) return NIL; + + mm_critical (stream); /* go critical */ -+ /* call time(0) only once, use transact to distinguish instead */ -+ ti = time(0); + do { ++ fail = done = 0; /* we have not determined name of message file yet */ + if (!SIZE (message)) { /* guard against zero-length */ -+ mm_log ("Append of zero-length message",ERROR); ++ mm_log ("Append of zero-length message", ERROR); + ret = NIL; + break; + } ++ + if (date && !mail_parse_date(&elt,date)){ -+ snprintf (tmp, sizeof(tmp), "Bad date in append: %.80s",date); -+ mm_log (tmp,ERROR); -+ ret = NIL; -+ break; ++ snprintf (tmp, sizeof(tmp), "Bad date in append: %.80s", date); ++ mm_log (tmp, ERROR); ++ ret = NIL; ++ break; + } ++ ++ if(date){ ++ struct tm tm; ++ ++ tm.tm_sec = elt.seconds; ++ tm.tm_min = elt.minutes; ++ tm.tm_hour = elt.hours; ++ tm.tm_mday = elt.day; ++ tm.tm_mon = elt.month - 1; ++ tm.tm_year = BASEYEAR + elt.year - 1900; ++ ++ ti = mktime(&tm); ++ } else ti = time(0); ++ + f = mail_parse_flags (stream,flags,&uf); ++ do { + /* build file name we will use */ -+ snprintf (file, sizeof(file), "%lu.%d_%09u.%s%s%s%s%s%s", ++ snprintf (file, sizeof(file), "%lu.%d_%09u.%s%s%s%s%s%s", + ti, mypid, transact++, mdlocaldomain, (f ? MDSEP(2) : ""), + MDFLAG(Draft, f&fDRAFT), MDFLAG(Flagged, f&fFLAGGED), + MDFLAG(Replied, f&fANSWERED), MDFLAG(Seen, f&fSEEN)); + /* build tmp file name */ -+ if (maildir_file_path(mailbox, tmp, sizeof(tmp))) -+ MSGPATH(path1, tmp, file, Tmp); ++ if (maildir_file_path(mailbox, tmp, sizeof(tmp))) /* copy in TMP */ ++ MSGPATH(path1, tmp, file, Tmp); ++ /* build final filename to use */ ++ if (maildir_file_path(mailbox, tmp, sizeof(tmp))) ++ MSGPATH(path2, tmp, file, New); /* copy in NEW */ ++ if(stat(path1, &sbuf) < 0 && errno == ENOENT ++ && stat(path2, &sbuf) < 0 && errno == ENOENT) ++ done++; ++ else ++ fail++; ++ if(fail == 1000){ ++ snprintf (tmp, sizeof(tmp), "Failure to create append message name"); ++ mm_log (tmp, ERROR); ++ return NIL; ++ } ++ } while (done == 0); + + if ((fd = open (path1,O_WRONLY|O_CREAT|O_EXCL,S_IREAD|S_IWRITE)) < 0) { + snprintf (tmp, sizeof(tmp), "Can't open append mailbox: %s", strerror (errno)); @@ -1887,15 +1917,18 @@ Index: alpine-2.11/imap/src/osdep/unix/maildir.c + } + fs_give ((void **) &s); /* flush the buffer */ + close (fd); /* close the file */ -+ /* build final filename to use */ -+ if (maildir_file_path(mailbox, tmp, sizeof(tmp))) -+ MSGPATH(path2, tmp, file, New); ++ + if (rename (path1,path2) < 0) { + snprintf (tmp, sizeof(tmp), "Message append failed: %s", strerror (errno)); + mm_log (tmp, ERROR); + ret = NIL; + } + unlink (path1); ++ if(date){ ++ time_t tp[2]; ++ tp[0] = tp[1] = ti; ++ utime (path2,tp); ++ } + + if (ret) + if (!(*af) (stream,data,&flags,&date,&message)) ret = NIL; @@ -2093,11 +2126,11 @@ Index: alpine-2.11/imap/src/osdep/unix/maildir.c +void maildir_lsub (MAILSTREAM *stream,char *ref,char *pat) +{ + void *sdb = NIL; -+ char *s, test[MAILTMPLEN]; ++ char *s, test[MAILTMPLEN], tmp[MAILTMPLEN]; + /* get canonical form of name */ -+ if (maildir_canonicalize (test, ref, pat) && (s = sm_read (&sdb))) { ++ if (maildir_canonicalize (test, ref, pat) && (s = sm_read (tmp, &sdb))) { + do if (pmatch_full (s, test, '/')) mm_lsub (stream, '/', s, NIL); -+ while ((s = sm_read (&sdb)) != NULL); /* until no more subscriptions */ ++ while ((s = sm_read (tmp, &sdb)) != NULL); /* until no more subscriptions */ + } +} + @@ -2191,7 +2224,7 @@ Index: alpine-2.11/imap/src/osdep/unix/maildir.c + char c, curdir[MAILTMPLEN], tmp[MAILTMPLEN]; + char realname[MAILTMPLEN], realpat[MAILTMPLEN] = {'\0'}; + int i, found; -+ long style = (long) maildir_parameters(GET_COURIERSTYLE, NIL), j; ++ long style = *(long *) maildir_parameters(GET_COURIERSTYLE, NIL), j; + char *maildirpath = mdirpath(); + COURIER_S *cdir; + @@ -2780,7 +2813,7 @@ Index: alpine-2.11/imap/src/osdep/unix/maildir.c +void +courier_list_info(COURIER_S **cdirp, char *data, int i) +{ -+ long style = (long) maildir_parameters(GET_COURIERSTYLE, NIL); ++ long style = *(long *) maildir_parameters(GET_COURIERSTYLE, NIL); + COURIER_S *cdir = *cdirp; + + if(maildir_valid(cdir->data[i]->name)){ @@ -3047,10 +3080,10 @@ Index: alpine-2.11/imap/src/osdep/unix/maildir.c + LOCAL->uidtempfile = cpystr(tmp); + } +} -Index: alpine-2.11/imap/src/osdep/unix/maildir.h +Index: alpine-2.20/imap/src/osdep/unix/maildir.h =================================================================== --- /dev/null -+++ alpine-2.11/imap/src/osdep/unix/maildir.h ++++ alpine-2.20/imap/src/osdep/unix/maildir.h @@ -0,0 +1,226 @@ +/* + * A few definitions that try to make this module portable to other @@ -3278,10 +3311,10 @@ Index: alpine-2.11/imap/src/osdep/unix/maildir.h +void maildir_assign_uid(MAILSTREAM *stream, unsigned long msgno, unsigned long uid); +void maildir_uid_renew_tempfile(MAILSTREAM *stream); + -Index: alpine-2.11/imap/src/osdep/unix/os_cyg.h +Index: alpine-2.20/imap/src/osdep/unix/os_cyg.h =================================================================== ---- alpine-2.11.orig/imap/src/osdep/unix/os_cyg.h -+++ alpine-2.11/imap/src/osdep/unix/os_cyg.h +--- alpine-2.20.orig/imap/src/osdep/unix/os_cyg.h ++++ alpine-2.20/imap/src/osdep/unix/os_cyg.h @@ -47,6 +47,7 @@ #define setpgrp setpgid @@ -3290,11 +3323,11 @@ Index: alpine-2.11/imap/src/osdep/unix/os_cyg.h #define geteuid Geteuid uid_t Geteuid (void); -Index: alpine-2.11/pith/conf.c +Index: alpine-2.20/pith/conf.c =================================================================== ---- alpine-2.11.orig/pith/conf.c -+++ alpine-2.11/pith/conf.c -@@ -434,6 +434,9 @@ CONF_TXT_T cf_text_window_position[] = " +--- alpine-2.20.orig/pith/conf.c ++++ alpine-2.20/pith/conf.c +@@ -436,6 +436,9 @@ CONF_TXT_T cf_text_window_position[] = " CONF_TXT_T cf_text_newsrc_path[] = "Full path and name of NEWSRC file"; @@ -3304,7 +3337,7 @@ Index: alpine-2.11/pith/conf.c /*---------------------------------------------------------------------- These are the variables that control a number of pine functions. They -@@ -638,6 +641,10 @@ static struct variable variables[] = { +@@ -642,6 +645,10 @@ static struct variable variables[] = { NULL, cf_text_news_active}, {"news-spool-directory", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, NULL, cf_text_news_spooldir}, @@ -3315,7 +3348,7 @@ Index: alpine-2.11/pith/conf.c {"upload-command", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, NULL, cf_text_upload_cmd}, {"upload-command-prefix", 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, -@@ -2271,6 +2278,12 @@ init_vars(struct pine *ps, void (*cmds_f +@@ -2283,6 +2290,12 @@ init_vars(struct pine *ps, void (*cmds_f mail_parameters(NULL, SET_NEWSSPOOL, (void *)VAR_NEWS_SPOOL_DIR); @@ -3328,7 +3361,7 @@ Index: alpine-2.11/pith/conf.c /* guarantee a save default */ set_current_val(&vars[V_DEFAULT_SAVE_FOLDER], TRUE, TRUE); if(!VAR_DEFAULT_SAVE_FOLDER || !VAR_DEFAULT_SAVE_FOLDER[0]) -@@ -2909,6 +2922,10 @@ feature_list(int index) +@@ -2921,6 +2934,10 @@ feature_list(int index) F_SORT_DEFAULT_SAVE_ALPHA, h_config_sort_save_alpha, PREF_FLDR, 0}, {"vertical-folder-list", "Use Vertical Folder List", F_VERTICAL_FOLDER_LIST, h_config_vertical_list, PREF_FLDR, 0}, @@ -3339,20 +3372,30 @@ Index: alpine-2.11/pith/conf.c /* Addr book */ {"combined-addrbook-display", "Combined Address Book Display", -@@ -7034,6 +7051,12 @@ toggle_feature(struct pine *ps, struct v +@@ -7047,7 +7064,7 @@ toggle_feature(struct pine *ps, struct v + int just_flip_value, EditWhich ew) + { + char **vp, *p, **lval, ***alval; +- int og, on_before, was_set; ++ int og, on_before, was_set, i; + char *err; + long l; + +@@ -7100,6 +7117,13 @@ toggle_feature(struct pine *ps, struct v break; +#ifndef _WINDOWS + case F_COURIER_FOLDER_LIST: -+ mail_parameters(NULL,SET_COURIERSTYLE,(void *)(F_ON(f->id ,ps)? 1 : 0)); ++ i = F_ON(f->id ,ps) ? 1 : 0; ++ mail_parameters(NULL,SET_COURIERSTYLE, (void *) &i); + break; /* COURIER == 1, CCLIENT == 0, see maildir.h */ +#endif + case F_COLOR_LINE_IMPORTANT : case F_DATES_TO_LOCAL : clear_index_cache(ps->mail_stream, 0); -@@ -7819,6 +7842,10 @@ config_help(int var, int feature) +@@ -7887,6 +7911,10 @@ config_help(int var, int feature) return(h_config_newmailwidth); case V_NEWSRC_PATH : return(h_config_newsrc_path); @@ -3363,11 +3406,11 @@ Index: alpine-2.11/pith/conf.c case V_BROWSER : return(h_config_browser); #if defined(DOS) || defined(OS2) -Index: alpine-2.11/pith/conf.h +Index: alpine-2.20/pith/conf.h =================================================================== ---- alpine-2.11.orig/pith/conf.h -+++ alpine-2.11/pith/conf.h -@@ -255,6 +255,10 @@ +--- alpine-2.20.orig/pith/conf.h ++++ alpine-2.20/pith/conf.h +@@ -257,6 +257,10 @@ #define GLO_NEWS_ACTIVE_PATH vars[V_NEWS_ACTIVE_PATH].global_val.p #define VAR_NEWS_SPOOL_DIR vars[V_NEWS_SPOOL_DIR].current_val.p #define GLO_NEWS_SPOOL_DIR vars[V_NEWS_SPOOL_DIR].global_val.p @@ -3378,11 +3421,11 @@ Index: alpine-2.11/pith/conf.h #define VAR_DISABLE_DRIVERS vars[V_DISABLE_DRIVERS].current_val.l #define VAR_DISABLE_AUTHS vars[V_DISABLE_AUTHS].current_val.l #define VAR_REMOTE_ABOOK_METADATA vars[V_REMOTE_ABOOK_METADATA].current_val.p -Index: alpine-2.11/pith/conftype.h +Index: alpine-2.20/pith/conftype.h =================================================================== ---- alpine-2.11.orig/pith/conftype.h -+++ alpine-2.11/pith/conftype.h -@@ -117,6 +117,9 @@ typedef enum { V_PERSONAL_NAME = 0 +--- alpine-2.20.orig/pith/conftype.h ++++ alpine-2.20/pith/conftype.h +@@ -118,6 +118,9 @@ typedef enum { V_PERSONAL_NAME = 0 , V_NEWSRC_PATH , V_NEWS_ACTIVE_PATH , V_NEWS_SPOOL_DIR @@ -3392,7 +3435,7 @@ Index: alpine-2.11/pith/conftype.h , V_UPLOAD_CMD , V_UPLOAD_CMD_PREFIX , V_DOWNLOAD_CMD -@@ -393,6 +396,9 @@ typedef enum { +@@ -395,6 +398,9 @@ typedef enum { F_PASS_C1_CONTROL_CHARS, F_SINGLE_FOLDER_LIST, F_VERTICAL_FOLDER_LIST, @@ -3402,10 +3445,10 @@ Index: alpine-2.11/pith/conftype.h F_TAB_CHK_RECENT, F_AUTO_REPLY_TO, F_VERBOSE_POST, -Index: alpine-2.11/pith/init.c +Index: alpine-2.20/pith/init.c =================================================================== ---- alpine-2.11.orig/pith/init.c -+++ alpine-2.11/pith/init.c +--- alpine-2.20.orig/pith/init.c ++++ alpine-2.20/pith/init.c @@ -408,6 +408,9 @@ get_mail_list(CONTEXT_S *list_cntxt, cha && stricmp(filename, folder_base)){ #else @@ -3416,11 +3459,22 @@ Index: alpine-2.11/pith/init.c && strcmp(filename, folder_base)){ #endif #endif -Index: alpine-2.11/pith/pattern.c +Index: alpine-2.20/pith/pattern.c =================================================================== ---- alpine-2.11.orig/pith/pattern.c -+++ alpine-2.11/pith/pattern.c -@@ -5483,6 +5483,15 @@ match_pattern_folder_specific(PATTERN_S +--- alpine-2.20.orig/pith/pattern.c ++++ alpine-2.20/pith/pattern.c +@@ -49,7 +49,9 @@ static char rcsid[] = "$Id: pattern.c 12 + #include "../pith/icache.h" + #include "../pith/ablookup.h" + #include "../pith/keyword.h" +- ++#ifndef _WINDOWS ++int maildir_file_path(char *name, char *tmp, size_t sizeoftmp); ++#endif /* _WINDOWS */ + + /* + * Internal prototypes +@@ -5485,6 +5487,15 @@ match_pattern_folder_specific(PATTERN_S break; case '#': @@ -3428,7 +3482,7 @@ Index: alpine-2.11/pith/pattern.c + if(!struncmp(patfolder, "#md/", 4) + || !struncmp(patfolder, "#mc/", 4)){ + maildir_file_path(patfolder, tmp1, sizeof(tmp1)); -+ if(!strcmp(patfolder, stream->mailbox)) ++ if(!strcmp(tmp1, stream->mailbox)) + match++; + break; + } @@ -3436,7 +3490,7 @@ Index: alpine-2.11/pith/pattern.c if(!strcmp(patfolder, stream->mailbox)) match++; -@@ -7903,7 +7912,7 @@ move_filtered_msgs(MAILSTREAM *stream, M +@@ -7905,7 +7916,7 @@ move_filtered_msgs(MAILSTREAM *stream, M int we_cancel = 0, width; CONTEXT_S *save_context = NULL; char buf[MAX_SCREEN_COLS+1], sbuf[MAX_SCREEN_COLS+1]; @@ -3445,7 +3499,7 @@ Index: alpine-2.11/pith/pattern.c #define FILTMSG_MAX 30 if(!stream) -@@ -7937,6 +7946,16 @@ move_filtered_msgs(MAILSTREAM *stream, M +@@ -7939,6 +7950,16 @@ move_filtered_msgs(MAILSTREAM *stream, M if(F_OFF(F_QUELL_FILTER_MSGS, ps_global)) we_cancel = busy_cue(buf, NULL, 0); @@ -3462,7 +3516,7 @@ Index: alpine-2.11/pith/pattern.c if(!is_absolute_path(dstfldr) && !(save_context = default_save_context(ps_global->context_list))) save_context = ps_global->context_list; -@@ -8000,6 +8019,11 @@ move_filtered_msgs(MAILSTREAM *stream, M +@@ -8002,6 +8023,11 @@ move_filtered_msgs(MAILSTREAM *stream, M if(we_cancel) cancel_busy_cue(buf[0] ? 0 : -1); @@ -3474,11 +3528,11 @@ Index: alpine-2.11/pith/pattern.c return(buf[0] != '\0'); } -Index: alpine-2.11/pith/pine.hlp +Index: alpine-2.20/pith/pine.hlp =================================================================== ---- alpine-2.11.orig/pith/pine.hlp -+++ alpine-2.11/pith/pine.hlp -@@ -21664,6 +21664,102 @@ your account's home directory). +--- alpine-2.20.orig/pith/pine.hlp ++++ alpine-2.20/pith/pine.hlp +@@ -22060,6 +22060,102 @@ your account's home directory). <End of help on this topic> @@ -3581,7 +3635,7 @@ Index: alpine-2.11/pith/pine.hlp ====== h_config_literal_sig ===== -@@ -29690,6 +29786,49 @@ than across the columns as is the defaul +@@ -30086,6 +30182,49 @@ than across the columns as is the defaul

    <End of help on this topic> @@ -3631,11 +3685,21 @@ Index: alpine-2.11/pith/pine.hlp ====== h_config_verbose_post ===== -Index: alpine-2.11/pith/send.c +Index: alpine-2.20/pith/send.c =================================================================== ---- alpine-2.11.orig/pith/send.c -+++ alpine-2.11/pith/send.c -@@ -257,6 +257,13 @@ postponed_stream(MAILSTREAM **streamp, c +--- alpine-2.20.orig/pith/send.c ++++ alpine-2.20/pith/send.c +@@ -47,6 +47,9 @@ static char rcsid[] = "$Id: send.c 1204 + + #include "../c-client/smtp.h" + #include "../c-client/nntp.h" ++#ifndef _WINDOWS ++int maildir_file_path(char *name, char *tmp, size_t sizeoftmp); ++#endif /* _WINDOWS */ + + + /* this is used in pine_send and pine_simple_send */ +@@ -257,6 +260,13 @@ postponed_stream(MAILSTREAM **streamp, c if(exists & FEX_ISFILE){ context_apply(tmp, p_cntxt, mbox, sizeof(tmp)); diff --git a/chappa-unixnullbug.patch b/chappa-unixnullbug.patch index 0201085..b914394 100644 --- a/chappa-unixnullbug.patch +++ b/chappa-unixnullbug.patch @@ -2,11 +2,11 @@ imap/src/c-client/mail.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) -Index: alpine-2.11/imap/src/c-client/mail.c +Index: alpine-2.20/imap/src/c-client/mail.c =================================================================== ---- alpine-2.11.orig/imap/src/c-client/mail.c -+++ alpine-2.11/imap/src/c-client/mail.c -@@ -3361,13 +3361,13 @@ unsigned long mail_filter (char *text,un +--- alpine-2.20.orig/imap/src/c-client/mail.c ++++ alpine-2.20/imap/src/c-client/mail.c +@@ -3400,13 +3400,13 @@ unsigned long mail_filter (char *text,un long flags) { STRINGLIST *hdrs; @@ -22,7 +22,7 @@ Index: alpine-2.11/imap/src/c-client/mail.c while (src < end) { /* process header */ /* slurp header line name */ for (s = src,e = s + MAILTMPLEN - 1,e = (e < end ? e : end),t = tmp; -@@ -3406,6 +3406,10 @@ unsigned long mail_filter (char *text,un +@@ -3447,6 +3447,10 @@ unsigned long mail_filter (char *text,un } } *dst = '\0'; /* tie off destination */ diff --git a/lint.diff b/lint.diff new file mode 100644 index 0000000..a5597c6 --- /dev/null +++ b/lint.diff @@ -0,0 +1,69 @@ +From: Jan Engelhardt +Date: 2015-03-25 18:25:22.663262139 +0100 + +rpmlint: +W: alpine implicit-pointer-decl dmail.c:160 +W: alpine implicit-pointer-decl mlock.c:114 +W: alpine implicit-pointer-decl tmail.c:168 +E: alpine no-return-in-nonvoid-function imap.c:2790 + +gcc: +dmail.c:160:5: warning: implicit declaration of function 'isdigit' [-Wimplicit-function-declaration] +mlock.c:114:5: warning: implicit declaration of function 'time' [-Wimplicit-function-declaration] +tmail.c:168:7: warning: implicit declaration of function 'isdigit' [-Wimplicit-function-declaration] +imap.c:2790:1: warning: control reaches end of non-void function [-Wreturn-type] +--- + alpine/imap.c | 1 + + imap/src/dmail/dmail.c | 1 + + imap/src/mlock/mlock.c | 1 + + imap/src/tmail/tmail.c | 1 + + 4 files changed, 4 insertions(+) + +Index: alpine-2.20/alpine/imap.c +=================================================================== +--- alpine-2.20.orig/alpine/imap.c ++++ alpine-2.20/alpine/imap.c +@@ -2786,6 +2786,7 @@ if(F_OFF(F_DISABLE_PASSWORD_FILE_SAVING, + return(want_to(_("Preserve password on DISK for next login"), + 'y', 'x', NO_HELP, WT_NORM) + == 'y'); ++return 0; + #endif /* PASSFILE */ + } + +Index: alpine-2.20/imap/src/dmail/dmail.c +=================================================================== +--- alpine-2.20.orig/imap/src/dmail/dmail.c ++++ alpine-2.20/imap/src/dmail/dmail.c +@@ -24,6 +24,7 @@ + * + */ + ++#include + #include + #include + #include +Index: alpine-2.20/imap/src/mlock/mlock.c +=================================================================== +--- alpine-2.20.orig/imap/src/mlock/mlock.c ++++ alpine-2.20/imap/src/mlock/mlock.c +@@ -32,6 +32,7 @@ + #include + #include + #include ++#include + #include + #include + #include +Index: alpine-2.20/imap/src/tmail/tmail.c +=================================================================== +--- alpine-2.20.orig/imap/src/tmail/tmail.c ++++ alpine-2.20/imap/src/tmail/tmail.c +@@ -23,6 +23,7 @@ + * + */ + ++#include + #include + #include + #include diff --git a/operation-may-be-undefined-warning.diff b/operation-may-be-undefined-warning.diff index 2ef5489..0939361 100644 --- a/operation-may-be-undefined-warning.diff +++ b/operation-may-be-undefined-warning.diff @@ -1,26 +1,12 @@ --- - alpine/folder.c | 2 +- imap/src/c-client/mail.c | 10 ++++++++-- - 2 files changed, 9 insertions(+), 3 deletions(-) + 1 file changed, 8 insertions(+), 2 deletions(-) -Index: alpine-2.11/alpine/folder.c +Index: alpine-2.20/imap/src/c-client/mail.c =================================================================== ---- alpine-2.11.orig/alpine/folder.c -+++ alpine-2.11/alpine/folder.c -@@ -6132,7 +6132,7 @@ folder_select_count(long int *count, int - continue; - - case 14 : /* toggle comparison */ -- *cmp = ++(*cmp) % 3; -+ *cmp = ((*cmp) + 1) % 3; - continue; - - case -1 : /* cancel */ -Index: alpine-2.11/imap/src/c-client/mail.c -=================================================================== ---- alpine-2.11.orig/imap/src/c-client/mail.c -+++ alpine-2.11/imap/src/c-client/mail.c -@@ -2940,8 +2940,14 @@ long mail_parse_date (MESSAGECACHE *elt, +--- alpine-2.20.orig/imap/src/c-client/mail.c ++++ alpine-2.20/imap/src/c-client/mail.c +@@ -2979,8 +2979,14 @@ long mail_parse_date (MESSAGECACHE *elt, /* parse time */ d = strtoul (s+1,(char **) &s,10); if (*s != ':') return NIL;