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

📄 malloc.c

📁 nsis是一个流传比较广的程序安装和解安装封装软件
💻 C
字号:
/* * malloc.c: safe wrappers around malloc, realloc, free, strdup */#include <stdlib.h>#include <stdarg.h>#include <string.h>#include "halibut.h"#ifdef LOGALLOC#define LOGPARAMS char *file, int line,static FILE *logallocfp = NULL;static int logline = 2;         /* off by 1: `null pointer is' */static void loginc(void){}static void logallocinit(void){  if (!logallocfp)  {    logallocfp = fopen("malloc.log", "w");    if (!logallocfp)    {      fprintf(stderr, "panic: unable to open malloc.log\n");      exit(10);    }    setvbuf(logallocfp, NULL, _IOLBF, BUFSIZ);    fprintf(logallocfp, "null pointer is %p\n", NULL);  }}static void logprintf(char *fmt, ...){  va_list ap;  va_start(ap, fmt);  vfprintf(logallocfp, fmt, ap);  va_end(ap);}#define LOGPRINT(x) ( logallocinit(), logprintf x )#define LOGINC do { loginc(); logline++; } while (0)#else#define LOGPARAMS#define LOGPRINT(x)#define LOGINC ((void)0)#endif/* * smalloc should guarantee to return a useful pointer - Halibut * can do nothing except die when it's out of memory anyway. */void *(smalloc) (LOGPARAMS int size) {  void *p;  LOGINC;  LOGPRINT(("%s %d malloc(%ld)", file, line, (long) size));  p = malloc(size);  if (!p)    fatal(err_nomemory);  LOGPRINT((" returns %p\n", p));  return p;}/* * sfree should guaranteeably deal gracefully with freeing NULL */void (sfree) (LOGPARAMS void *p) {  if (p)  {    LOGINC;    LOGPRINT(("%s %d free(%p)\n", file, line, p));    free(p);  }}/* * srealloc should guaranteeably be able to realloc NULL */void *(srealloc) (LOGPARAMS void *p, int size) {  void *q;  if (p)  {    LOGINC;    LOGPRINT(("%s %d realloc(%p,%ld)", file, line, p, (long) size));    q = realloc(p, size);    LOGPRINT((" returns %p\n", q));  } else  {    LOGINC;    LOGPRINT(("%s %d malloc(%ld)", file, line, (long) size));    q = malloc(size);    LOGPRINT((" returns %p\n", q));  }  if (!q)    fatal(err_nomemory);  return q;}/* * dupstr is like strdup, but with the never-return-NULL property * of smalloc (and also reliably defined in all environments :-) */char *dupstr(char *s){  char *r = smalloc(1 + strlen(s));  strcpy(r, s);  return r;}/* * Duplicate a linked list of words */word *dup_word_list(word * w){  word *head, **eptr = &head;  while (w)  {    word *newwd = mknew(word);    *newwd = *w;                /* structure copy */    newwd->text = ustrdup(w->text);    if (w->alt)      newwd->alt = dup_word_list(w->alt);    *eptr = newwd;    newwd->next = NULL;    eptr = &newwd->next;    w = w->next;  }  return head;}/* * Free a linked list of words */void free_word_list(word * w){  word *t;  while (w)  {    t = w;    w = w->next;    sfree(t->text);    if (t->alt)      free_word_list(t->alt);    sfree(t);  }}/* * Free a linked list of paragraphs */void free_para_list(paragraph * p){  paragraph *t;  while (p)  {    t = p;    p = p->next;    sfree(t->keyword);    free_word_list(t->words);    sfree(t);  }}

⌨️ 快捷键说明

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