📄 artio.c
字号:
/* $Id: artio.c,v 3.0 1992/02/01 03:09:32 davison Trn $ *//* This software is Copyright 1991 by Stan Barber. * * Permission is hereby granted to copy, reproduce, redistribute or otherwise * use this software as long as: there is no monetary profit gained * specifically from the use or reproduction of this software, it is not * sold, rented, traded or otherwise marketed, and this copyright notice is * included prominently in any copy made. * * The author make no claims as to the fitness or correctness of this software * for any use whatsoever, and it is provided as is. Any use of this software * is at the user's own risk. */#include "EXTERN.h"#include "common.h"#include "cache.h"#include "rthread.h"#include "head.h"#include "nntp.h"#include "art.h"#include "bits.h"#include "final.h"#include "INTERN.h"#include "artio.h"voidartio_init(){ ;}/* open an article, unless it's already open */FILE *artopen(artnum)ART_NUM artnum;{#ifndef USE_NNTP char artname[MAXFILENAME]; /* filename of current article */#endif ARTICLE *ap = find_article(artnum); if (!ap || !artnum || (ap->flags & (AF_MISSING|AF_FAKE)) == AF_MISSING) { errno = ENOENT; return Nullfp; } if (openart == artnum) { /* this article is already open? */ fseek(artfp,0L,0); /* just get to the beginning */ return artfp; /* and say we succeeded */ } if (artfp != Nullfp) { /* it was somebody else? */ fclose(artfp); /* put them out of their misery */ openart = 0; /* and remember them no more */ }retry_open:#ifdef USE_NNTP artfp = nntp_body(artnum);#else sprintf(artname,"%ld",(long)artnum); artfp = fopen(artname,"r");#endif if (!artfp) { if (errno == ETIMEDOUT) goto retry_open; uncache_article(ap,FALSE); } else {#ifdef LINKART char tmpbuf[256]; char *s; if (!fstat(fileno(artfp),&filestat) && filestat.st_size < sizeof tmpbuf) { fgets(tmpbuf,sizeof tmpbuf,artfp); if (*tmpbuf == '/') { /* is a "link" to another article */ fclose(artfp); if (s=index(tmpbuf,'\n')) *s = '\0'; if (!(artfp = fopen(tmpbuf,"r"))) { uncache_article(ap,FALSE); } else { if (*linkartname) free(linkartname); linkartname = savestr(tmpbuf); } } else fseek(artfp,0L,0); /* get back to the beginning */ }#endif openart = artnum; /* remember what we did here */ } return artfp; /* and return either fp or NULL */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -