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

📄 rpl_fopen.c

📁 此源码通过实例演示了makefile的书写规则和方法
💻 C
字号:
#if HAVE_CONFIG_H#  include <config.h>#endif#include <stdio.h>/* Use the system size_t if it has one, or fallback to config.h */#if STDC_HEADERS || HAVE_STDDEF_H#  include <stddef.h>#endif#if HAVE_SYS_TYPES_H#  include <sys/types.h>#endif/* One of the following headers will have prototypes for malloc   and free on most systems.  If not, we don't add explicit   prototypes which may generate a compiler warning in some   cases -- explicit  prototypes would certainly cause   compilation to fail with a type clash on some platforms. */#if STDC_HEADERS || HAVE_STDLIB_H#  include <stdlib.h>#endif#if HAVE_MEMORY_H#  include <memory.h>#endif#if HAVE_STRING_H#  include <string.h>#else#  if HAVE_STRINGS_H#    include <strings.h>#  endif /* !HAVE_STRINGS_H */#endif /* !HAVE_STRING_H */#if ! HAVE_STRCHR/* BSD based systems have index() instead of strchr() */#  if HAVE_INDEX#    define strchr index#  else /* ! HAVE_INDEX *//* Very old C libraries have neither index() or strchr() */#    define strchr rpl_strchrstatic inline const char *strchr (const char *str, int ch);static inline const char *strchr (const char *str, int ch){  const char *p = str;  while (p && *p && *p != (char) ch)    {      ++p;    }  return (*p == (char) ch) ? p : 0;}#  endif /* HAVE_INDEX */#endif /* HAVE_STRCHR *//* BSD based systems have bcopy() instead of strcpy() */#if ! HAVE_STRCPY# define strcpy(dest, src)	bcopy(src, dest, strlen(src) + 1)#endif/* Very old C libraries have no strdup(). */#if ! HAVE_STRDUP# define strdup(str)		strcpy(malloc(strlen(str) + 1), str)#endifchar*rpl_fopen (const char *pathname, char *mode){    char *result = NULL;    char *p = mode;    /* Scan to the end of mode until we find 'b' or 't'. */     while (*p && *p != 'b' && *p != 't')      {        ++p;      }    if (!*p)      {        fprintf(stderr,            "*WARNING* rpl_fopen called without mode 'b' or 't'\n");      }#if USE_FOPEN_BINARY && USE_FOPEN_TEXT    result = fopen(pathname, mode);#else    {        char ignore[3]= "bt";        char *newmode = strdup(mode);        char *q       = newmode;        p = newmode;#  if ! USE_FOPEN_TEXT        strcpy(ignore, "b")#  endif#  if ! USE_FOPEN_BINARY        strcpy(ignore, "t")#  endif        /* Copy characters from mode to newmode missing out           `b' and/or `t'. */        while (*p)          {            while (strchr(ignore, *p))              {                ++p;              }            *q++ = *p++;          }        *q = '\0';        result = fopen(pathname, newmode);        free(newmode);    }#endif /* USE_FOPEN_BINARY && USE_FOPEN_TEXT */    return result;}

⌨️ 快捷键说明

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