1: /* $Header: addng.c,v 4.3.1.2 85/05/29 09:06:24 lwall Exp $
   2:  *
   3:  * $Log:	addng.c,v $
   4:  * Revision 4.3.1.2  85/05/29  09:06:24  lwall
   5:  * New newsgroups without spool directories incorrectly classified as "ancient".
   6:  *
   7:  * Revision 4.3.1.1  85/05/10  11:30:50  lwall
   8:  * Branch for patches.
   9:  *
  10:  * Revision 4.3  85/05/01  11:34:41  lwall
  11:  * Baseline for release with 4.3bsd.
  12:  *
  13:  */
  14: 
  15: #include "EXTERN.h"
  16: #include "common.h"
  17: #include "rn.h"
  18: #include "ngdata.h"
  19: #include "last.h"
  20: #include "util.h"
  21: #include "intrp.h"
  22: #include "only.h"
  23: #include "rcstuff.h"
  24: #include "server.h"
  25: #include "INTERN.h"
  26: #include "addng.h"
  27: #include <sys/time.h>
  28: 
  29: void
  30: addng_init()
  31: {
  32:     ;
  33: }
  34: 
  35: #ifdef FINDNEWNG
  36: /* generate a list of new newsgroups from active file */
  37: 
  38: bool
  39: newlist(munged,checkinlist)
  40: bool munged;                /* are we scanning the whole file? */
  41: bool checkinlist;
  42: {
  43:     char *tmpname;
  44:     register char *s;
  45:     long birthof();
  46: #ifdef SERVER
  47:     char ser_line[256];
  48:     struct tm *tmptr;
  49: #endif
  50: 
  51:     tmpname = savestr(filexp("/tmp/rnew.%$"));
  52:     tmpfp = fopen(tmpname,"w");
  53:     if (tmpfp == Nullfp) {
  54:     printf(cantcreate,tmpname) FLUSH;
  55:     return FALSE;
  56:     }
  57: #ifdef SERVER
  58:     tmptr = localtime(&lasttime);
  59:     sprintf(ser_line, "NEWGROUPS %02d%02d%02d %02d%02d%02d", tmptr->tm_year,
  60:     tmptr->tm_mon+1, tmptr->tm_mday, tmptr->tm_hour,
  61:     tmptr->tm_min, tmptr->tm_sec);
  62:     put_server(ser_line);
  63:     if (get_server(ser_line, sizeof(ser_line)) < 0) {
  64:     fprintf(stderr, "rrn: Unexpected close of server socket.\n");
  65:     finalize(1);
  66:     }
  67:     if (*ser_line != CHAR_OK) {
  68:     fclose(tmpfp);
  69:     UNLINK(tmpname);
  70:     free(tmpname);
  71:     return TRUE;
  72:     }
  73: 
  74:     while (get_server(ser_line, sizeof(ser_line)) >= 0) {
  75:     if (ser_line[0] == '.')
  76:         break;
  77:         if (strnEQ(ser_line, "to.", 3))
  78:         continue;
  79:         if (find_ng(ser_line) == nextrcline &&
  80:         (checkinlist ? (inlist(ser_line)) : (1))) { /* if not in .newsrc */
  81:         fprintf(tmpfp,"%s\n", ser_line);    /* and younger than  */
  82:                         /* the last time we checked */
  83:                     /* then remember said newsgroup */
  84:         }
  85: #else   /* not SERVER */
  86:     while (fgets(buf,LBUFLEN,actfp) != Nullch) {
  87:     if (s = index(buf,' ')) {
  88:         *s++ = '\0';
  89:         if (strnEQ(buf,"to.",3))
  90:         continue;
  91:         if (find_ng(buf) == nextrcline &&
  92:             (checkinlist ?
  93:             (inlist(buf)) :
  94:             (birthof(buf,(ART_NUM)atol(s)) > lasttime)
  95:             )
  96:         ) {
  97:                     /* if not in .newsrc and younger */
  98:                     /* than the last time we checked */
  99:         fprintf(tmpfp,"%s\n",buf);
 100:                     /* then remember said newsgroup */
 101:         }
 102: #ifdef FASTNEW
 103:         else {          /* not really a new group */
 104:         if (!munged) {      /* did we assume not munged? */
 105:             fclose(tmpfp);  /* then go back, knowing that */
 106:             UNLINK(tmpname);
 107:             free(tmpname);
 108:             return TRUE;    /* active file was indeed munged */
 109:         }
 110:         }
 111: #endif
 112:     }
 113: #ifdef DEBUGGING
 114:     else
 115:         printf("Bad active record: %s\n",buf) FLUSH;
 116: #endif
 117: #endif	/* SERVER */
 118:     }
 119: 
 120:     /* we have successfully generated the list */
 121: 
 122:     fclose(tmpfp);
 123:     tmpfp = fopen(tmpname,"r");
 124:     UNLINK(tmpname);            /* be nice to the world */
 125:     if (tmpfp == Nullfp) {
 126:     printf(cantopen,tmpname) FLUSH;
 127:     return FALSE;
 128:     }
 129:     while (fgets(buf,LBUFLEN,tmpfp) != Nullch) {
 130:     buf[strlen(buf)-1] = '\0';
 131:     get_ng(buf,TRUE);       /* add newsgroup, maybe */
 132:     }
 133:     fclose(tmpfp);          /* be nice to ourselves */
 134:     free(tmpname);
 135:     return FALSE;           /* do not call us again */
 136: }
 137: 
 138: /* return creation time of newsgroup */
 139: 
 140: long
 141: birthof(ngnam,ngsize)
 142: char *ngnam;
 143: ART_NUM ngsize;
 144: {
 145:     char tst[128];
 146:     long time();
 147: 
 148:     sprintf(tst, ngsize ? "%s/%s/1" : "%s/%s" ,spool,getngdir(ngnam));
 149:     if (stat(tst,&filestat) < 0)
 150:     return (ngsize ? 0L : time(0)); /* not there, assume something good */
 151:     else
 152:     return filestat.st_mtime;
 153: }
 154: 
 155: bool
 156: scanactive()
 157: {
 158:     NG_NUM oldnext = nextrcline;    /* remember # lines in newsrc */
 159: 
 160:     fseek(actfp,0L,0);
 161:     newlist(TRUE,TRUE);
 162:     if (nextrcline != oldnext) {    /* did we add any new groups? */
 163:     return TRUE;
 164:     }
 165:     return FALSE;
 166: }
 167: 
 168: #endif

Defined functions

addng_init defined in line 29; used 2 times
birthof defined in line 140; used 3 times
newlist defined in line 38; used 4 times

Defined variables

bool defined in line 38; never used
Last modified: 1986-03-21
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1321
Valid CSS Valid XHTML 1.0 Strict