Fixed a little bug when the newsrc wasn't found.
[noose.git] / newsrc.c
blobe060f4f901ec0bc88f94227714125307cb0ab5dc
1 /*
2 * newsrc.c
3 * Created: Sun Feb 25 22:07:34 2001 by tek@wiw.org
4 * Revised: Sun Feb 25 22:07:34 2001 (pending)
5 * Copyright 2001 Julian E. C. Squires (tek@wiw.org)
6 * This program comes with ABSOLUTELY NO WARRANTY.
7 * $Id: newsrc.c,v 1.3 2001/02/28 14:52:01 tek Exp $
8 *
9 */
11 #include <errno.h>
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <string.h>
16 #include "noose.h"
18 int newsrc_filter(char *rcfile, char *group, rangelist_t **rl);
19 int newsrc_getsubscribedgroups(char *newsrc, int *ngroups, char ***groups);
21 int newsrc_filter(char *rcfile, char *group, rangelist_t **rl)
23 FILE *fp;
24 char *buffer, *p;
25 int buflen = 80, lineno, begin, end;
27 fp = fopen(rcfile, "r");
28 if(fp == NULL) {
29 fprintf(stderr, "%s: %s\n", PROGNAME, strerror(errno));
30 return -1;
33 buffer = malloc(buflen);
34 if(buffer == NULL) {
35 fprintf(stderr, "%s: Out of memory.\n", PROGNAME);
36 return -1;
39 lineno = 1;
40 do {
41 fgets(buffer, buflen, fp);
42 while(buffer[strlen(buffer)-1] != '\n' && !feof(fp)) {
43 buflen *= 2;
44 buffer = realloc(buffer, buflen);
45 if(buffer == NULL) {
46 fprintf(stderr, "%s: Out of memory.\n", PROGNAME);
47 return -1;
49 fgets(buffer+strlen(buffer)-1, buflen-strlen(buffer)-1, fp);
51 lineno++;
52 } while(strncmp(buffer, group, strlen(group)) != 0 && !feof(fp));
54 if(!feof(fp)) {
55 for(p = buffer; *p != ' ' && *p; p++);
56 p++;
58 p = strtok(p, ",\n");
59 do {
60 begin = atoi(p);
61 if(strchr(p, '-') != NULL) {
62 end = atoi(strchr(p, '-')+1);
63 } else
64 end = begin;
65 rl_exclude(rl, begin, end);
66 } while(p = strtok(NULL, ",\n"), p != NULL);
69 free(buffer);
70 fclose(fp);
71 return 0;
74 int newsrc_getsubscribedgroups(char *rcfile, int *ngroups, char ***groups)
76 FILE *fp;
77 char *buffer, *p;
78 int buflen = 80, lineno;
80 fp = fopen(rcfile, "r");
81 if(fp == NULL) {
82 fprintf(stderr, "%s: %s\n", PROGNAME, strerror(errno));
83 return -1;
86 buffer = malloc(buflen);
87 if(buffer == NULL) {
88 fprintf(stderr, "%s: Out of memory.\n", PROGNAME);
89 return -1;
92 *groups = NULL;
93 *ngroups = 0;
94 lineno = 1;
95 do {
96 fgets(buffer, buflen, fp);
97 while(buffer[strlen(buffer)-1] != '\n' && !feof(fp)) {
98 buflen *= 2;
99 buffer = realloc(buffer, buflen);
100 if(buffer == NULL) {
101 fprintf(stderr, "%s: Out of memory at %s line %d.\n",
102 PROGNAME, rcfile, lineno);
103 return -1;
105 fgets(buffer+strlen(buffer)-1, buflen-strlen(buffer)-1, fp);
108 if(buffer[strlen(buffer)-1] == '\n')
109 buffer[strlen(buffer)-1] = 0;
111 for(p = buffer; *p != ' ' && *p; p++);
112 if(*(p-1) == ':') { /* subscribed */
113 (*ngroups)++;
114 *groups = realloc(*groups, sizeof(char *)*(*ngroups));
115 *(p-1) = 0;
116 (*groups)[*ngroups-1] = strdup(buffer);
118 } else if(*(p-1) == '!') { /* not subscribed */
119 } else { /* usually a blank line or similar */
121 lineno++;
122 } while(!feof(fp));
124 return 0;
127 /* EOF newsrc.c */