static int slurp_newsrc (nntp_server_t * news)
{
- FILE *fp;
- char *buf;
- struct stat sb;
+ FILE *fp;
+ char *buf = NULL;
+ size_t n = 0;
+ struct stat sb;
- news->stat = stat (news->newsrc, &sb);
- news->size = sb.st_size;
- news->mtime = sb.st_mtime;
+ news->stat = stat(news->newsrc, &sb);
+ news->size = sb.st_size;
+ news->mtime = sb.st_mtime;
- if ((fp = safe_fopen (news->newsrc, "r")) == NULL)
- return -1;
- /* hmm, should we use dotlock? */
- if (mx_lock_file (news->newsrc, fileno (fp), 0, 0, 1)) {
- m_fclose(&fp);
- return -1;
- }
+ if ((fp = safe_fopen(news->newsrc, "r")) == NULL)
+ return -1;
- buf = p_new(char, sb.st_size + 1);
- while (fgets(buf, sb.st_size + 1, fp))
- nntp_parse_newsrc_line(news, buf);
- p_delete(&buf);
+ /* hmm, should we use dotlock? */
+ if (mx_lock_file(news->newsrc, fileno (fp), 0, 0, 1)) {
+ m_fclose(&fp);
+ return -1;
+ }
- mx_unlock_file (news->newsrc, fileno (fp), 0);
- m_fclose(&fp);
- return 0;
+ while (getline(&buf, &n, fp)) {
+ nntp_parse_newsrc_line(news, buf);
+ }
+ p_delete(&buf);
+
+ mx_unlock_file (news->newsrc, fileno (fp), 0);
+ m_fclose(&fp);
+ return 0;
}
static void nntp_cache_expand (char *dst, const char *src)