⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientactive.c

📁 早期freebsd实现
💻 C
字号:
/*  $Revision: 1.9 $***/#include <stdio.h>#include <errno.h>#include <sys/types.h>#include "configdata.h"#include "paths.h"#include "clibrary.h"#include "libinn.h"#include "nntp.h"#include "macros.h"STATIC char	CApathname[sizeof _PATH_TEMPACTIVE];STATIC FILE	*CAfp;/***  Get a copy of the active file for a client host to use, locally or**  remotely.*/FILE *CAopen(FromServer, ToServer)    FILE	*FromServer;    FILE	*ToServer;{    /* Use a local (or NFS-mounted) copy if available.  Make sure we don't     * try to delete it when we close it. */    if ((CAfp = fopen(_PATH_CLIENTACTIVE, "r")) != NULL) {	CApathname[0] = '\0';	return CAfp;    }    /* Use the active file from the server */    return CAlistopen(FromServer, ToServer, (char *)NULL);}/***  Internal library routine.*/FILE *CA_listopen(pathname, FromServer, ToServer, request)    char	*pathname;    FILE	*FromServer;    FILE	*ToServer;    char	*request;{    char	buff[BUFSIZ];    char	*p;    int		oerrno;    FILE	*F;    (void)unlink(pathname);    if ((F = fopen(pathname, "w")) == NULL)	return NULL;    /* Send a LIST command to and capture the output. */    if (request == NULL)	(void)fprintf(ToServer, "list\r\n");    else	(void)fprintf(ToServer, "list %s\r\n", request);    (void)fflush(ToServer);    /* Get the server's reply to our command. */    if (fgets(buff, sizeof buff, FromServer) == NULL     || !EQn(buff, NNTP_LIST_FOLLOWS, STRLEN(NNTP_LIST_FOLLOWS))) {	oerrno = errno;	CAclose();	errno = oerrno;	return NULL;    }    /* Slurp up the rest of the response. */    while (fgets(buff, sizeof buff, FromServer) != NULL) {	if ((p = strchr(buff, '\r')) != NULL)	    *p = '\0';	if ((p = strchr(buff, '\n')) != NULL)	    *p = '\0';	if (buff[0] == '.' && buff[1] == '\0') {	    if (ferror(F) || fflush(F) == EOF || fclose(F) == EOF)		break;	    return fopen(pathname, "r");	}	(void)fprintf(F, "%s\n", buff);    }    /* Ran out of input before finding the terminator; quit. */    oerrno = errno;    (void)fclose(F);    CAclose();    errno = oerrno;    return NULL;}/***  Use the NNTP list command to get a file from a server.  Default is**  the active file, otherwise ask for whatever is in the request param.*/FILE *CAlistopen(FromServer, ToServer, request)    FILE	*FromServer;    FILE	*ToServer;    char	*request;{    /* Gotta talk to the server -- see if we can. */    if (FromServer == NULL || ToServer == NULL)	return NULL;    (void)strcpy(CApathname, _PATH_TEMPACTIVE);    (void)mktemp(CApathname);    return CAfp = CA_listopen(CApathname, FromServer, ToServer, request);}/***  Close the file opened by CAopen or CAlistopen.*/voidCAclose(){    if (CAfp) {	(void)fclose(CAfp);	CAfp = NULL;    }    if (CApathname[0]) {	(void)unlink(CApathname);	CApathname[0] = '\0';    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -