Annotation of 43BSD/contrib/nntp/rrn/addng.c, revision 1.1

1.1     ! root        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
        !           169: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.