Hi, Vsevolod, Could you help me identify what's wrong with my patching patch-1.3.27.vvv.nntp?
There are a couple of failures reported for 3 files. (patch.err) I have inspected browser.c. and its .rej but can not why - it looks it should work. (browser.c.rej, buffy.c.rej and compose.c.rej) Is it because I have an incompatible patch tool? 1. mutt-1.3.27i.tar.gz and patch-1.3.27.vvv.nntp are just downloaded yesterday. 2. my patch is patch-2.5.4-9mdk 3. my diff is diffutils-2.7-29mdk 4. It's Mandrake 8.1 box with locale zh_TW.Big. Many thanks. best regards, charlie
$ patch -p0 < ../rpm/mutt/patch-1.3.27.vvv.nntp patching file mutt-1.3.27/ChangeLog.nntp patching file mutt-1.3.27/OPS patching file mutt-1.3.27/PATCHES patching file mutt-1.3.27/acconfig.h patching file mutt-1.3.27/account.c patching file mutt-1.3.27/account.h patching file mutt-1.3.27/attach.h patching file mutt-1.3.27/browser.c Hunk #4 FAILED at 323. Hunk #6 FAILED at 450. Hunk #7 FAILED at 539. Hunk #12 FAILED at 984. Hunk #13 FAILED at 1046. Hunk #14 FAILED at 1116. Hunk #15 FAILED at 1371. 7 out of 15 hunks FAILED -- saving rejects to file mutt-1.3.27/browser.c.rej patching file mutt-1.3.27/browser.h patching file mutt-1.3.27/buffy.c Hunk #2 succeeded at 278 with fuzz 2. Hunk #3 FAILED at 299. Hunk #4 FAILED at 379. 2 out of 4 hunks FAILED -- saving rejects to file mutt-1.3.27/buffy.c.rej patching file mutt-1.3.27/commands.c patching file mutt-1.3.27/complete.c patching file mutt-1.3.27/compose.c Hunk #10 FAILED at 598. Hunk #11 FAILED at 828. Hunk #12 FAILED at 838. Hunk #13 succeeded at 868 with fuzz 2. 3 out of 13 hunks FAILED -- saving rejects to file mutt-1.3.27/compose.c.rej patching file mutt-1.3.27/config.h.in patching file mutt-1.3.27/configure.in patching file mutt-1.3.27/curs_main.c Hunk #5 succeeded at 657 with fuzz 1. Hunk #6 succeeded at 710 with fuzz 2. Hunk #7 FAILED at 915. Hunk #8 FAILED at 1134. Hunk #9 FAILED at 1181. Hunk #10 FAILED at 1219. Hunk #11 succeeded at 1526 with fuzz 1. Hunk #12 succeeded at 1875 with fuzz 2. Hunk #13 succeeded at 1920 with fuzz 2. patch: **** malformed patch at line 2112: ue?")) != M_YES)
*************** *** 299,306 **** return (src); } static void add_folder (MUTTMENU *m, struct browser_state *state, - const char *name, const struct stat *s, int new) { if (state->entrylen == state->entrymax) { --- 323,408 ---- return (src); } + #ifdef USE_NNTP + static const char * + newsgroup_format_str (char *dest, size_t destlen, char op, const char *src, + const char *fmt, const char *ifstring, const char *elsestring, + unsigned long data, format_flag flags) + { + char fn[SHORT_STRING], tmp[SHORT_STRING]; + FOLDER *folder = (FOLDER *) data; + + switch (op) + { + case 'C': + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, folder->num + 1); + break; + + case 'f': + strncpy (fn, folder->ff->name, sizeof(fn) - 1); + snprintf (tmp, sizeof (tmp), "%%%ss", fmt); + snprintf (dest, destlen, tmp, fn); + break; + + case 'N': + snprintf (tmp, sizeof (tmp), "%%%sc", fmt); + if (folder->ff->nd->subscribed) + snprintf (dest, destlen, tmp, ' '); + else + snprintf (dest, destlen, tmp, folder->ff->new ? 'N' : 'u'); + break; + + case 'M': + snprintf (tmp, sizeof (tmp), "%%%sc", fmt); + if (folder->ff->nd->deleted) + snprintf (dest, destlen, tmp, 'D'); + else + snprintf (dest, destlen, tmp, folder->ff->nd->allowed ? ' ' : '-'); + break; + + case 's': + if (flags & M_FORMAT_OPTIONAL) + { + if (folder->ff->nd->unread != 0) + mutt_FormatString (dest, destlen, ifstring, newsgroup_format_str, + data, flags); + else + mutt_FormatString (dest, destlen, elsestring, newsgroup_format_str, + data, flags); + } + else if (Context && Context->data == folder->ff->nd) + { + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, Context->unread); + } + else + { + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, folder->ff->nd->unread); + } + break; + + case 'd': + if (folder->ff->nd->desc != NULL) + { + snprintf (tmp, sizeof (tmp), "%%%ss", fmt); + snprintf (dest, destlen, tmp, folder->ff->nd->desc); + } + else + { + snprintf (tmp, sizeof (tmp), "%%%ss", fmt); + snprintf (dest, destlen, tmp, ""); + } + break; + } + return (src); + } + #endif /* USE_NNTP */ + static void add_folder (MUTTMENU *m, struct browser_state *state, + const char *name, const struct stat *s, + void *data, int new) { if (state->entrylen == state->entrymax) { *************** *** 344,352 **** menu->data = state->entry; } static int examine_directory (MUTTMENU *menu, struct browser_state *state, char *d, const char *prefix) { struct stat s; DIR *dp; struct dirent *de; --- 450,484 ---- menu->data = state->entry; } + /* get list of all files/newsgroups with mask */ static int examine_directory (MUTTMENU *menu, struct browser_state *state, char *d, const char *prefix) { + #ifdef USE_NNTP + if (option (OPTNEWS)) + { + LIST *tmp; + NNTP_DATA *data; + NNTP_SERVER *news = CurrentNewsSrv; + + /* mutt_buffy_check (0); */ + init_state (state, menu); + + for (tmp = news->list; tmp; tmp = tmp->next) + { + if (!(data = (NNTP_DATA *)tmp->data)) + continue; + if (prefix && *prefix && strncmp (prefix, data->group, + strlen (prefix)) != 0) + continue; + if (!((regexec (Mask.rx, data->group, 0, NULL, 0) == 0) ^ Mask.not)) + continue; + add_folder (menu, state, data->group, NULL, data, data->new); + } + } + else + #endif /* USE_NNTP */ + { struct stat s; DIR *dp; struct dirent *de; *************** *** 407,466 **** tmp = Incoming; while (tmp && mutt_strcmp (buffer, tmp->path)) tmp = tmp->next; - add_folder (menu, state, de->d_name, &s, (tmp) ? tmp->new : 0); } - closedir (dp); browser_sort (state); return 0; } static int examine_mailboxes (MUTTMENU *menu, struct browser_state *state) { struct stat s; char buffer[LONG_STRING]; - BUFFY *tmp = Incoming; - if (!Incoming) - return (-1); - mutt_buffy_check (0); - init_state (state, menu); - do - { - #ifdef USE_IMAP - if (mx_is_imap (tmp->path)) { - add_folder (menu, state, tmp->path, NULL, tmp->new); - continue; } #endif - #ifdef USE_POP - if (mx_is_pop (tmp->path)) { - add_folder (menu, state, tmp->path, NULL, tmp->new); - continue; - } #endif - if (lstat (tmp->path, &s) == -1) - continue; - if ((! S_ISREG (s.st_mode)) && (! S_ISDIR (s.st_mode)) && - (! S_ISLNK (s.st_mode))) - continue; - strfcpy (buffer, NONULL(tmp->path), sizeof (buffer)); - mutt_pretty_mailbox (buffer); - add_folder (menu, state, buffer, &s, tmp->new); } - while ((tmp = tmp->next)); browser_sort (state); return 0; } int select_file_search (MUTTMENU *menu, regex_t *re, int n) { return (regexec (re, ((struct folder_file *) menu->data)[n].name, 0, NULL, 0)); } --- 539,633 ---- tmp = Incoming; while (tmp && mutt_strcmp (buffer, tmp->path)) tmp = tmp->next; + add_folder (menu, state, de->d_name, &s, NULL, (tmp) ? tmp->new : 0); + } + closedir (dp); } browser_sort (state); return 0; } + /* get list of mailboxes/subscribed newsgroups */ static int examine_mailboxes (MUTTMENU *menu, struct browser_state *state) { struct stat s; char buffer[LONG_STRING]; + #ifdef USE_NNTP + if (option (OPTNEWS)) + { + LIST *tmp; + NNTP_DATA *data; + NNTP_SERVER *news = CurrentNewsSrv; + /* mutt_buffy_check (0); */ + init_state (state, menu); + for (tmp = news->list; tmp; tmp = tmp->next) { + if ((data = (NNTP_DATA *) tmp->data) != NULL && (data->new || + (data->subscribed && (!option (OPTSHOWONLYUNREAD) || data->unread)))) + add_folder (menu, state, data->group, NULL, data, data->new); } + } + else #endif + { + BUFFY *tmp = Incoming; + + if (!Incoming) + return (-1); + mutt_buffy_check (0); + + init_state (state, menu); + + do { + #ifdef USE_IMAP + if (mx_is_imap (tmp->path)) + { + add_folder (menu, state, tmp->path, NULL, NULL, tmp->new); + continue; + } #endif + #ifdef USE_POP + if (mx_is_pop (tmp->path)) + { + add_folder (menu, state, tmp->path, NULL, NULL, tmp->new); + continue; + } + #endif + #ifdef USE_NNTP + if (mx_is_nntp (tmp->path)) + { + add_folder (menu, state, tmp->path, NULL, NULL, tmp->new); + continue; + } + #endif + if (lstat (tmp->path, &s) == -1) + continue; + if ((! S_ISREG (s.st_mode)) && (! S_ISDIR (s.st_mode)) && + (! S_ISLNK (s.st_mode))) + continue; + strfcpy (buffer, NONULL(tmp->path), sizeof (buffer)); + mutt_pretty_mailbox (buffer); + add_folder (menu, state, buffer, &s, NULL, tmp->new); + } + while ((tmp = tmp->next)); } browser_sort (state); return 0; } int select_file_search (MUTTMENU *menu, regex_t *re, int n) { + #ifdef USE_NNTP + if (option (OPTNEWS)) + return (regexec (re, ((struct folder_file *) menu->data)[n].desc, 0, NULL, 0)); + #endif return (regexec (re, ((struct folder_file *) menu->data)[n].name, 0, NULL, 0)); } *************** *** 772,778 **** } } if (buffy) { strfcpy (f, state.entry[menu->current].name, flen); mutt_expand_path (f, flen); --- 984,994 ---- } } + #ifdef USE_NNTP + if (buffy || option (OPTNEWS)) /* news have not path */ + #else if (buffy) + #endif { strfcpy (f, state.entry[menu->current].name, flen); mutt_expand_path (f, flen); *************** *** 830,843 **** break; #ifdef USE_IMAP - case OP_BROWSER_SUBSCRIBE: - imap_subscribe (state.entry[menu->current].name, 1); - break; - - case OP_BROWSER_UNSUBSCRIBE: - imap_subscribe (state.entry[menu->current].name, 0); - break; - case OP_BROWSER_TOGGLE_LSUB: if (option (OPTIMAPLSUB)) { --- 1046,1051 ---- break; #ifdef USE_IMAP case OP_BROWSER_TOGGLE_LSUB: if (option (OPTIMAPLSUB)) { *************** *** 908,913 **** case OP_CHANGE_DIRECTORY: strfcpy (buf, LastDir, sizeof (buf)); #ifdef USE_IMAP if (!state.imap_browse) --- 1116,1126 ---- case OP_CHANGE_DIRECTORY: + #ifdef USE_NNTP + if (option (OPTNEWS)) + break; + #endif + strfcpy (buf, LastDir, sizeof (buf)); #ifdef USE_IMAP if (!state.imap_browse) *************** *** 1158,1163 **** else mutt_error _("Error trying to view file"); } } } --- 1371,1560 ---- else mutt_error _("Error trying to view file"); } + break; + + #ifdef USE_NNTP + case OP_CATCHUP: + case OP_UNCATCHUP: + if (option (OPTNEWS)) + { + struct folder_file *f = &state.entry[menu->current]; + NNTP_DATA *nd; + + if (i == OP_CATCHUP) + nd = mutt_newsgroup_catchup (CurrentNewsSrv, f->name); + else + nd = mutt_newsgroup_uncatchup (CurrentNewsSrv, f->name); + + if (nd) + { + /* FOLDER folder; + struct folder_file ff; + char buffer[_POSIX_PATH_MAX + SHORT_STRING]; + + folder.ff = &ff; + folder.ff->name = f->name; + folder.ff->st = NULL; + folder.ff->is_new = nd->new; + folder.ff->nd = nd; + safe_free ((void **) &f->desc); + mutt_FormatString (buffer, sizeof (buffer), NONULL(GroupFormat), + newsgroup_format_str, (unsigned long) &folder, + M_FORMAT_ARROWCURSOR); + f->desc = safe_strdup (buffer); */ + if (menu->current + 1 < menu->max) + menu->current++; + menu->redraw = REDRAW_MOTION_RESYNCH; + } + } + break; + + case OP_LOAD_ACTIVE: + if (!option (OPTNEWS)) + break; + + { + LIST *tmp; + NNTP_DATA *data; + + for (tmp = CurrentNewsSrv->list; tmp; tmp = tmp->next) + { + if ((data = (NNTP_DATA *)tmp->data)) + data->deleted = 1; + } + } + nntp_get_active (CurrentNewsSrv); + + destroy_state (&state); + if (buffy) + examine_mailboxes (menu, &state); + else + examine_directory (menu, &state, NULL, NULL); + init_menu (&state, menu, title, sizeof (title), buffy); + break; + #endif /* USE_NNTP */ + + #if defined USE_IMAP || defined USE_NNTP + case OP_BROWSER_SUBSCRIBE: + case OP_BROWSER_UNSUBSCRIBE: + #endif + #ifdef USE_NNTP + case OP_SUBSCRIBE_PATTERN: + case OP_UNSUBSCRIBE_PATTERN: + if (option (OPTNEWS)) + { + regex_t *rx = (regex_t *) safe_malloc (sizeof (regex_t)); + char *s = buf; + int j = menu->current; + NNTP_DATA *nd; + NNTP_SERVER *news = CurrentNewsSrv; + + if (i == OP_SUBSCRIBE_PATTERN || i == OP_UNSUBSCRIBE_PATTERN) + { + char tmp[STRING]; + int err; + + buf[0] = 0; + if (i == OP_SUBSCRIBE_PATTERN) + snprintf (tmp, sizeof (tmp), _("Subscribe pattern: ")); + else + snprintf (tmp, sizeof (tmp), _("Unsubscribe pattern: ")); + if (mutt_get_field (tmp, buf, sizeof (buf), 0) != 0 || !buf[0]) + { + FREE (&rx); + break; + } + + if ((err = REGCOMP (rx, s, REG_NOSUB)) != 0) + { + regerror (err, rx, buf, sizeof (buf)); + regfree (rx); + safe_free ((void **) &rx); + mutt_error ("%s", buf); + break; + } + menu->redraw = REDRAW_FULL; + j = 0; + } + else if (!state.entrylen) + { + mutt_error _("No newsgroups match the mask"); + break; + } + + for ( ; j < state.entrylen; j++) + { + struct folder_file *f = &state.entry[j]; + + if (i == OP_BROWSER_SUBSCRIBE || i == OP_BROWSER_UNSUBSCRIBE || + regexec (rx, f->name, 0, NULL, 0) == 0) + { + if (i == OP_BROWSER_SUBSCRIBE || i == OP_SUBSCRIBE_PATTERN) + nd = mutt_newsgroup_subscribe (news, f->name); + else + nd = mutt_newsgroup_unsubscribe (news, f->name); + /* if (nd) + { + FOLDER folder; + char buffer[_POSIX_PATH_MAX + SHORT_STRING]; + + folder.name = f->name; + folder.f = NULL; + folder.new = nd->new; + folder.nd = nd; + safe_free ((void **) &f->desc); + mutt_FormatString (buffer, sizeof (buffer), NONULL(GroupFormat), + newsgroup_format_str, (unsigned long) &folder, + M_FORMAT_ARROWCURSOR); + f->desc = safe_strdup (buffer); + } */ + } + if (i == OP_BROWSER_SUBSCRIBE || i == OP_BROWSER_UNSUBSCRIBE) + { + if (menu->current + 1 < menu->max) + menu->current++; + menu->redraw = REDRAW_MOTION_RESYNCH; + break; + } + } + if (i == OP_SUBSCRIBE_PATTERN) + { + LIST *grouplist = NULL; + + if (news) + grouplist = news->list; + for (; grouplist; grouplist = grouplist->next) + { + nd = (NNTP_DATA *) grouplist->data; + if (nd && nd->group && !nd->subscribed) + { + if (regexec (rx, nd->group, 0, NULL, 0) == 0) + { + mutt_newsgroup_subscribe (news, nd->group); + add_folder (menu, &state, nd->group, NULL, nd, nd->new); + } + } + } + init_menu (&state, menu, title, sizeof (title), buffy); + } + mutt_newsrc_update (news); + nntp_clear_cacheindex (news); + if (i != OP_BROWSER_SUBSCRIBE && i != OP_BROWSER_UNSUBSCRIBE) + regfree (rx); + safe_free ((void **) &rx); + } + #ifdef USE_IMAP + else + #endif /* USE_IMAP && USE_NNTP */ + #endif /* USE_NNTP */ + #ifdef USE_IMAP + { + if (i == OP_BROWSER_SUBSCRIBE) + imap_subscribe (state.entry[menu->current].name, 1); + else + imap_subscribe (state.entry[menu->current].name, 0); + } + #endif /* USE_IMAP */ } }
*************** *** 291,315 **** /* check to see if the folder is the currently selected folder * before polling */ if (!Context || !Context->path || - #if defined USE_IMAP || defined USE_POP - (( #ifdef USE_IMAP - tmp->magic == M_IMAP #endif #ifdef USE_POP - #ifdef USE_IMAP - || - #endif - tmp->magic == M_POP - #endif - ) ? mutt_strcmp (tmp->path, Context->path) : #endif - (sb.st_dev != contex_sb.st_dev || sb.st_ino != contex_sb.st_ino) - #if defined USE_IMAP || defined USE_POP - ) #endif - ) - { switch (tmp->magic) { --- 299,319 ---- /* check to see if the folder is the currently selected folder * before polling */ if (!Context || !Context->path || + ( + (0 #ifdef USE_IMAP + || tmp->magic == M_IMAP #endif #ifdef USE_POP + || tmp->magic == M_POP #endif + #ifdef USE_NNTP + || tmp->magic == M_NNTP #endif + ) ? mutt_strcmp (tmp->path, Context->path) : + (sb.st_dev != contex_sb.st_dev || sb.st_ino != contex_sb.st_ino) + ) + ) { switch (tmp->magic) { *************** *** 375,380 **** #ifdef USE_POP case M_POP: break; #endif } --- 379,389 ---- #ifdef USE_POP case M_POP: + break; + #endif + + #ifdef USE_NNTP + case M_NNTP: break; #endif }
*************** *** 532,545 **** menu->redraw = edit_address_list (HDR_FROM, &msg->env->from); break; case OP_COMPOSE_EDIT_TO: - menu->redraw = edit_address_list (HDR_TO, &msg->env->to); break; case OP_COMPOSE_EDIT_BCC: - menu->redraw = edit_address_list (HDR_BCC, &msg->env->bcc); break; case OP_COMPOSE_EDIT_CC: - menu->redraw = edit_address_list (HDR_CC, &msg->env->cc); break; case OP_COMPOSE_EDIT_SUBJECT: if (msg->env->subject) strfcpy (buf, msg->env->subject, sizeof (buf)); --- 598,678 ---- menu->redraw = edit_address_list (HDR_FROM, &msg->env->from); break; case OP_COMPOSE_EDIT_TO: + #ifdef USE_NNTP + if (!news) + #endif + menu->redraw = edit_address_list (HDR_TO, &msg->env->to); break; case OP_COMPOSE_EDIT_BCC: + #ifdef USE_NNTP + if (!news) + #endif + menu->redraw = edit_address_list (HDR_BCC, &msg->env->bcc); break; case OP_COMPOSE_EDIT_CC: + #ifdef USE_NNTP + if (!news) + #endif + menu->redraw = edit_address_list (HDR_CC, &msg->env->cc); + break; + #ifdef USE_NNTP + case OP_COMPOSE_EDIT_NEWSGROUPS: + if (news) + { + if (msg->env->newsgroups) + strfcpy (buf, msg->env->newsgroups, sizeof (buf)); + else + buf[0] = 0; + if (mutt_get_field ("Newsgroups: ", buf, sizeof (buf), 0) == 0 && buf[0]) + { + safe_free ((void **) &msg->env->newsgroups); + mutt_remove_trailing_ws (buf); + msg->env->newsgroups = safe_strdup (mutt_skip_whitespace (buf)); + move (HDR_TO, HDR_XOFFSET); + clrtoeol (); + if (msg->env->newsgroups) + printw ("%-*.*s", W, W, msg->env->newsgroups); + } + } + break; + + case OP_COMPOSE_EDIT_FOLLOWUP_TO: + if (news) + { + buf[0] = 0; + if (msg->env->followup_to) + strfcpy (buf, msg->env->followup_to, sizeof (buf)); + if (mutt_get_field ("Followup-To: ", buf, sizeof (buf), 0) == 0 && buf[0]) + { + safe_free ((void **) &msg->env->followup_to); + mutt_remove_trailing_ws (buf); + msg->env->followup_to = safe_strdup (mutt_skip_whitespace (buf)); + move (HDR_CC, HDR_XOFFSET); + clrtoeol(); + if (msg->env->followup_to) + printw ("%-*.*s", W, W, msg->env->followup_to); + } + } break; + + case OP_COMPOSE_EDIT_X_COMMENT_TO: + if (news && option (OPTXCOMMENTTO)) + { + buf[0] = 0; + if (msg->env->x_comment_to) + strfcpy (buf, msg->env->x_comment_to, sizeof (buf)); + if (mutt_get_field ("X-Comment-To: ", buf, sizeof (buf), 0) == 0 && buf[0]) + { + safe_free ((void **) &msg->env->x_comment_to); + msg->env->x_comment_to = safe_strdup (buf); + move (HDR_BCC, HDR_XOFFSET); + clrtoeol(); + if (msg->env->x_comment_to) + printw ("%-*.*s", W, W, msg->env->x_comment_to); + } + } + break; + #endif case OP_COMPOSE_EDIT_SUBJECT: if (msg->env->subject) strfcpy (buf, msg->env->subject, sizeof (buf)); *************** *** 695,700 **** break; case OP_COMPOSE_ATTACH_MESSAGE: { char *prompt; HEADER *h; --- 828,836 ---- break; case OP_COMPOSE_ATTACH_MESSAGE: + #ifdef USE_NNTP + case OP_COMPOSE_ATTACH_NEWS_MESSAGE: + #endif { char *prompt; HEADER *h; *************** *** 702,708 **** fname[0] = 0; prompt = _("Open mailbox to attach message from"); if (Context) { strfcpy (fname, NONULL (Context->path), sizeof (fname)); mutt_pretty_mailbox (fname); --- 838,859 ---- fname[0] = 0; prompt = _("Open mailbox to attach message from"); + #ifdef USE_NNTP + unset_option (OPTNEWS); + if (op == OP_COMPOSE_ATTACH_NEWS_MESSAGE) + { + if (!(CurrentNewsSrv = mutt_select_newsserver (NewsServer))) + break; + + prompt = _("Open newsgroup to attach message from"); + set_option (OPTNEWS); + } + #endif + if (Context) + #ifdef USE_NNTP + if ((op == OP_COMPOSE_ATTACH_MESSAGE) ^ (Context->magic == M_NNTP)) + #endif { strfcpy (fname, NONULL (Context->path), sizeof (fname)); mutt_pretty_mailbox (fname);