Rocco Rutte:
authorpdmef <pdmef@e385b8ad-14ed-0310-8656-cc95a2468c6d>
Sat, 13 Aug 2005 20:30:48 +0000 (20:30 +0000)
committerpdmef <pdmef@e385b8ad-14ed-0310-8656-cc95a2468c6d>
Sat, 13 Aug 2005 20:30:48 +0000 (20:30 +0000)
- update vvv.nntp

git-svn-id: svn://svn.berlios.de/mutt-ng/trunk@399 e385b8ad-14ed-0310-8656-cc95a2468c6d

commands.c
nntp/newsrc.c
nntp/nntp.c
protos.h

index 2a4c7be..3eea904 100644 (file)
@@ -823,126 +823,6 @@ int mutt_save_message (HEADER * h, int delete,
   return -1;
 }
 
   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 ());
 void mutt_version (void)
 {
   mutt_message (mutt_make_version ());
index 8c5e736..ef9537e 100644 (file)
@@ -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;
 int mutt_newsrc_update (NNTP_SERVER * news)
 {
   char *buf, *line;
index ed934eb..de68916 100644 (file)
@@ -162,12 +162,6 @@ static int nntp_attempt_features (NNTP_SERVER * serv)
   char buf[LONG_STRING];
   CONNECTION *conn = serv->conn;
 
   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);
   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;
 
   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);
   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 {
     }
   }
   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 */
   }
 
   /* CACHE: must be loaded xover cache here */
@@ -1034,24 +1023,20 @@ void nntp_logout_all (void)
 {
   char buf[LONG_STRING];
   CONNECTION *conn;
 {
   char buf[LONG_STRING];
   CONNECTION *conn;
-  CONNECTION *tmp;
 
   conn = mutt_socket_head ();
 
   while (conn) {
 
   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);
     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;
   }
 }
 
   }
 }
 
index a022cec..9dd0480 100644 (file)
--- 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_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);
 int mutt_user_is_recipient (HEADER *);
 void mutt_update_num_postponed (void);
 int mutt_wait_filter (pid_t);