From: pdmef Date: Sat, 13 Aug 2005 20:30:48 +0000 (+0000) Subject: Rocco Rutte: X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=commitdiff_plain;h=ca1036a5694287e6ccf6d95af9e33a7e1d5a75fd;ds=sidebyside Rocco Rutte: - update vvv.nntp git-svn-id: svn://svn.berlios.de/mutt-ng/trunk@399 e385b8ad-14ed-0310-8656-cc95a2468c6d --- diff --git a/commands.c b/commands.c index 2a4c7be..3eea904 100644 --- a/commands.c +++ b/commands.c @@ -823,126 +823,6 @@ int mutt_save_message (HEADER * h, int delete, return -1; } -int mutt_update_list_file (char *filename, char *section, char *key, - char *line) -{ - FILE *ifp; - FILE *ofp; - char buf[HUGE_STRING]; - char oldfile[_POSIX_PATH_MAX]; - char *c; - int ext = 0, done = 0, r = 0; - - snprintf (oldfile, sizeof (oldfile), "%s.bak", filename); - debug_print (1, ("Renaming %s to %s\n", filename, oldfile)); - - /* if file not exist, create it */ - if ((ifp = safe_fopen (filename, "a"))) - fclose (ifp); - if (_mutt_rename_file (filename, oldfile, 1)) { - mutt_perror (_("Unable to create backup file")); - - return (-1); - } - debug_print (1, ("Opening %s\n", oldfile)); - if (!(ifp = safe_fopen (oldfile, "r"))) { - mutt_perror (_("Unable to open backup file for reading")); - - return (-1); - } - debug_print (1, ("Opening %s\n", filename)); - if (!(ofp = safe_fopen (filename, "w"))) { - fclose (ifp); - mutt_perror (_("Unable to open new file for writing")); - - return (-1); - } - if (mx_lock_file (filename, fileno (ofp), 1, 0, 1)) { - fclose (ofp); - fclose (ifp); - mutt_error (_("Unable to lock %s, old file saved as %s"), filename, - oldfile); - return (-1); - } - - if (section) { - while (r != EOF && !done && fgets (buf, sizeof (buf), ifp)) { - r = fputs (buf, ofp); - c = buf; - while (*c && *c != '\n') - c++; - c[0] = 0; /* strip EOL */ - if (!strncmp (buf, "#: ", 3) && !str_casecmp (buf + 3, section)) - done++; - } - if (r != EOF && !done) { - snprintf (buf, sizeof (buf), "#: %s\n", section); - r = fputs (buf, ofp); - } - done = 0; - } - - while (r != EOF && fgets (buf, sizeof (buf), ifp)) { - if (ext) { - c = buf; - while (*c && (*c != '\r') && (*c != '\n')) - c++; - c--; - if (*c != '\\') - ext = 0; - } - else if ((section && !strncmp (buf, "#: ", 3))) { - if (!done && line) { - fputs (line, ofp); - fputc ('\n', ofp); - } - r = fputs (buf, ofp); - done++; - break; - } - else if (key && !strncmp (buf, key, str_len (key)) && - (!*key || buf[str_len (key)] == ' ')) { - c = buf; - ext = 0; - while (*c && (*c != '\r') && (*c != '\n')) - c++; - c--; - if (*c == '\\') - ext = 1; - if (!done && line) { - r = fputs (line, ofp); - if (*key) - r = fputc ('\n', ofp); - done++; - } - } - else { - r = fputs (buf, ofp); - } - } - - while (r != EOF && fgets (buf, sizeof (buf), ifp)) - r = fputs (buf, ofp); - - /* If there wasn't a line to replace, put it on the end of the file */ - if (r != EOF && !done && line) { - fputs (line, ofp); - r = fputc ('\n', ofp); - } - mx_unlock_file (filename, fileno (ofp), 0); - fclose (ofp); - fclose (ifp); - if (r != EOF) { - unlink (oldfile); - return 0; - } - unlink (filename); - mutt_error (_("Cannot write new %s, old file saved as %s"), filename, - oldfile); - return (-1); -} - - void mutt_version (void) { mutt_message (mutt_make_version ()); diff --git a/nntp/newsrc.c b/nntp/newsrc.c index 8c5e736..ef9537e 100644 --- a/nntp/newsrc.c +++ b/nntp/newsrc.c @@ -627,6 +627,108 @@ void newsrc_gen_entries (CONTEXT * ctx) } } +static int mutt_update_list_file (char *filename, char *section, + char *key, char *line) { + FILE *ifp; + FILE *ofp; + char buf[HUGE_STRING]; + char tmpfile[_POSIX_PATH_MAX]; + char *c; + int ext = 0, done = 0, r = 0; + + /* if file not exist, create it */ + if ((ifp = safe_fopen (filename, "a"))) + fclose (ifp); + debug_print (1, ("Opening %s\n", filename)); + if (!(ifp = safe_fopen (filename, "r"))) { + mutt_error (_("Unable to open %s for reading"), filename); + return -1; + } + if (mx_lock_file (filename, fileno (ifp), 0, 0, 1)) { + fclose (ifp); + mutt_error (_("Unable to lock %s"), filename); + return -1; + } + snprintf (tmpfile, sizeof(tmpfile), "%s.tmp", filename); + debug_print (1, ("Opening %s\n", tmpfile)); + if (!(ofp = fopen (tmpfile, "w"))) { + fclose (ifp); + mutt_error (_("Unable to open %s for writing"), tmpfile); + return -1; + } + + if (section) { + while (r != EOF && !done && fgets (buf, sizeof (buf), ifp)) { + r = fputs (buf, ofp); + c = buf; + while (*c && *c != '\n') c++; + c[0] = 0; /* strip EOL */ + if (!strncmp (buf, "#: ", 3) && !str_casecmp (buf+3, section)) + done++; + } + if (r != EOF && !done) { + snprintf (buf, sizeof(buf), "#: %s\n", section); + r = fputs (buf, ofp); + } + done = 0; + } + + while (r != EOF && fgets (buf, sizeof (buf), ifp)) { + if (ext) { + c = buf; + while (*c && (*c != '\r') && (*c != '\n')) c++; + c--; + if (*c != '\\') ext = 0; + } else if ((section && !strncmp (buf, "#: ", 3))) { + if (!done && line) { + fputs (line, ofp); + fputc ('\n', ofp); + } + r = fputs (buf, ofp); + done++; + break; + } else if (key && !strncmp (buf, key, strlen(key)) && + (!*key || buf[strlen(key)] == ' ')) { + c = buf; + ext = 0; + while (*c && (*c != '\r') && (*c != '\n')) c++; + c--; + if (*c == '\\') ext = 1; + if (!done && line) { + r = fputs (line, ofp); + if (*key) + r = fputc ('\n', ofp); + done++; + } + } else { + r = fputs (buf, ofp); + } + } + + while (r != EOF && fgets (buf, sizeof (buf), ifp)) + r = fputs (buf, ofp); + + /* If there wasn't a line to replace, put it on the end of the file */ + if (r != EOF && !done && line) { + fputs (line, ofp); + r = fputc ('\n', ofp); + } + mx_unlock_file (filename, fileno (ifp), 0); + fclose (ofp); + fclose (ifp); + if (r == EOF) { + unlink (tmpfile); + mutt_error (_("Can't write %s"), tmpfile); + return -1; + } + if (rename (tmpfile, filename) < 0) { + unlink (tmpfile); + mutt_error (_("Can't rename %s to %s"), tmpfile, filename); + return -1; + } + return 0; +} + int mutt_newsrc_update (NNTP_SERVER * news) { char *buf, *line; diff --git a/nntp/nntp.c b/nntp/nntp.c index ed934eb..de68916 100644 --- a/nntp/nntp.c +++ b/nntp/nntp.c @@ -162,12 +162,6 @@ static int nntp_attempt_features (NNTP_SERVER * serv) char buf[LONG_STRING]; CONNECTION *conn = serv->conn; - mutt_socket_write (conn, "LISTGROUP\r\n"); - if (mutt_socket_readln (buf, sizeof (buf), conn) < 0) - return (nntp_connect_error (serv)); - if (str_ncmp ("500", buf, 3)) - serv->hasLISTGROUP = 1; - mutt_socket_write (conn, "XOVER\r\n"); if (mutt_socket_readln (buf, sizeof (buf), conn) < 0) return nntp_connect_error (serv); @@ -180,6 +174,12 @@ static int nntp_attempt_features (NNTP_SERVER * serv) if (str_ncmp ("500", buf, 3)) serv->hasXPAT = 1; + mutt_socket_write (conn, "LISTGROUP\r\n"); + if (mutt_socket_readln (buf, sizeof (buf), conn) < 0) + return (nntp_connect_error (serv)); + if (str_ncmp ("500", buf, 3)) + serv->hasLISTGROUP = 1; + mutt_socket_write (conn, "XGTITLE +\r\n"); if (mutt_socket_readln (buf, sizeof (buf), conn) < 0) return nntp_connect_error (serv); @@ -674,19 +674,8 @@ static int nntp_fetch_headers (CONTEXT * ctx, unsigned int first, } } else { - /* mutt_nntp_query() issues a 'GROUP nntp_data->group' - * command on its own if !*buf */ - buf[0] = '\0'; - mutt_nntp_query (nntp_data, buf, sizeof (buf)); - if (sscanf (buf + 4, "%d %u %u %s", &num, &fc.first, &fc.last, buf) != 4) { - mutt_error (_("GROUP command failed: %s"), buf); - mem_free (&fc.messages); - return (-1); - } - else { - for (num = fc.first; num < fc.last; num++) - _nntp_fetch_numbers (num, &fc); - } + for (num = 0; num < last - first + 1; num++) + fc.messages[num] = 1; } /* CACHE: must be loaded xover cache here */ @@ -1034,24 +1023,20 @@ void nntp_logout_all (void) { char buf[LONG_STRING]; CONNECTION *conn; - CONNECTION *tmp; conn = mutt_socket_head (); while (conn) { - tmp = conn; - + CONNECTION* next = conn->next; if (conn->account.type == M_ACCT_TYPE_NNTP) { mutt_message (_("Closing connection to %s..."), conn->account.host); mutt_socket_write (conn, "QUIT\r\n"); mutt_socket_readln (buf, sizeof (buf), conn); mutt_clear_error (); mutt_socket_close (conn); - - mutt_socket_free (tmp); + mutt_socket_free (conn); } - - conn = conn->next; + conn = next; } } diff --git a/protos.h b/protos.h index a022cec..9dd0480 100644 --- a/protos.h +++ b/protos.h @@ -271,7 +271,6 @@ int mutt_skipchars (const char *, const char *); int mutt_strwidth (const char *); int mutt_compose_menu (HEADER *, char *, size_t, HEADER *); int mutt_thread_set_flag (HEADER *, int, int, int); -int mutt_update_list_file (char *, char *, char *, char *); int mutt_user_is_recipient (HEADER *); void mutt_update_num_postponed (void); int mutt_wait_filter (pid_t);