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

📄 cache_file.c

📁 Connect DDNS Client Use GNUDIP
💻 C
字号:
/* ============================================================================ * Copyright (C) 1999-2000 Angus Mackay. All rights reserved;  * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE * AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * ============================================================================ *//* * cache_file.c * */#ifdef HAVE_CONFIG_H#  include <config.h>#endif#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#if HAVE_SYS_STAT_H#  include <sys/stat.h>#endif#if HAVE_ERRNO_H#  include <errno.h>#endif#include <cache_file.h>#if HAVE_STRERRORextern int errno;#  define error_string strerror(errno)#elif HAVE_SYS_ERRLISTextern const char *const sys_errlist[];extern int errno;#  define error_string (sys_errlist[errno])#else#  define error_string "error message not found"#endif#ifdef DEBUG#define dprintf(x) if( options & OPT_DEBUG ) \{ \  fprintf(stderr, "%s,%d: ", __FILE__, __LINE__); \    fprintf x; \}#else#  define dprintf(x)#endif#if HAVE_STRERRORextern int errno;#  define error_string strerror(errno)#elif HAVE_SYS_ERRLISTextern const char *const sys_errlist[];extern int errno;#  define error_string (sys_errlist[errno])#else#  define error_string "error message not found"#endif#define OPT_DEBUG       0x0001extern int options;int read_cache_file(char *file, time_t *date, char **ipaddr){  FILE *fp = NULL;  char buf[BUFSIZ+1];  char *p;  char *datestr;  char *ipstr;#if HAVE_STAT  struct stat st;#endif  // safety first  buf[BUFSIZ] = '\0';  // indicate failure  *date = 0;  *ipaddr = NULL;#if HAVE_STAT  if(stat(file, &st) != 0)  {    if(errno == ENOENT)    {      return(0);    }    return(-1);  }#endif  if((fp=fopen(file, "r")) == NULL)  {    return(-1);  }  if(fgets(buf, BUFSIZ, fp) != NULL)  {    /* chomp new line */    p = buf;    while(*p != '\0' && *p != '\r' && *p != '\n') { p++; }    *p = '\0';    /* find the first comma */    p = buf;    while(*p != '\0' && *p != ',') { p++; }    if(*p == '\0')    {      fprintf(stderr, "malformed cache file\n");      goto ERR;    }    // slap in a null    *p++ = '\0';    datestr = buf;    ipstr = p;    *date = strtoul(datestr, NULL, 10);    *ipaddr = strdup(ipstr);  }  else  {    *date = 0;    *ipaddr = NULL;  }  fclose(fp);  return 0;ERR:  if(fp) { fclose(fp); }  return(-1);}int write_cache_file(char *file, time_t date, char *ipaddr){  FILE *fp = NULL;  if((fp=fopen(file, "w")) == NULL)  {    return(-1);  }  fprintf(fp, "%ld,%s\n", date, ipaddr);  fclose(fp);  return 0;}

⌨️ 快捷键说明

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