📄 xmalloc.c
字号:
/* * xmalloc.c * Copyright (C) 1998-2005 A.J. van Os * * Description: * Extended malloc and friends */#include <stdlib.h>#include <string.h>#include "antiword.h"static char *szMessage = "Memory allocation failed, unable to continue";#if defined(__dos) && !defined(__DJGPP__)static char *szDosMessage = "DOS can't allocate this kind of memory, unable to continue";#endif /* __dos && !__DJGPP__ *//* * xmalloc - Allocates dynamic memory * * See malloc(3), but unlike malloc(3) xmalloc does not return in case * of error. */void *xmalloc(size_t tSize){ void *pvTmp; TRACE_MSG("xmalloc"); if (tSize == 0) { tSize = 1; } pvTmp = malloc(tSize); if (pvTmp == NULL) { DBG_MSG("xmalloc returned NULL"); DBG_DEC(tSize); werr(1, szMessage); } return pvTmp;} /* end of xmalloc *//* * xcalloc - Allocates and zeros dynamic memory * * See calloc(3), but unlike calloc(3) xcalloc does not return in case of error */void *xcalloc(size_t tNmemb, size_t tSize){ void *pvTmp; TRACE_MSG("xcalloc");#if defined(__dos) && !defined(__DJGPP__) if ((ULONG)tNmemb * (ULONG)tSize > 0xffffUL) { DBG_DEC((ULONG)tNmemb * (ULONG)tSize); werr(1, szDosMessage); }#endif /* __dos && !__DJGPP__ */ if (tNmemb == 0 || tSize == 0) { tNmemb = 1; tSize = 1; } pvTmp = calloc(tNmemb, tSize); if (pvTmp == NULL) { DBG_MSG("xcalloc returned NULL"); werr(1, szMessage); } return pvTmp;} /* end of xcalloc *//* * xrealloc - Changes the size of a memory object * * See realloc(3), but unlike realloc(3) xrealloc does not return in case * of error. */void *xrealloc(void *pvArg, size_t tSize){ void *pvTmp; TRACE_MSG("xrealloc"); pvTmp = realloc(pvArg, tSize); if (pvTmp == NULL) { DBG_MSG("realloc returned NULL"); werr(1, szMessage); } return pvTmp;} /* end of xrealloc *//* * xstrdup - Duplicate a string * * See strdup(3), but unlike strdup(3) xstrdup does not return in case * of error. * * NOTE: * Does not use strdup(3), because some systems don't have it. */char *xstrdup(const char *szArg){ char *szTmp; TRACE_MSG("xstrdup"); szTmp = xmalloc(strlen(szArg) + 1); strcpy(szTmp, szArg); return szTmp;} /* end of xstrdup *//* * xfree - Deallocates dynamic memory * * See free(3). * * returns NULL; * This makes p=xfree(p) possible, free memory and overwrite the pointer to it. */void *xfree(void *pvArg){ TRACE_MSG("xfree"); if (pvArg != NULL) { free(pvArg); } return NULL;} /* end of xfree */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -