Files
core/PdfReader/Src/MemoryUtils.h
Ilya.Kirillov ab923555c2 Добавлен проектный файл Qt. Сделаны изменения, чтобы проект компилировался под Qt.
git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@62570 954022d7-b5bf-4e40-9824-e11837661b57
2016-05-21 00:03:08 +03:00

109 lines
2.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _PDF_READER_MEMORY_UTILS_H
#define _PDF_READER_MEMORY_UTILS_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef INT_MAX
#define INT_MIN (-2147483647 - 1) /* minimum (signed) int value */
#define INT_MAX 2147483647 /* maximum (signed) int value */
#endif
namespace PdfReader
{
//------------------------------------------------------------------------
// Аналогично malloc, но с обработкой ошибок.
static void *MemUtilsMalloc(int nSize)
{
void *pResult;
if (nSize <= 0)
return NULL;
if (!(pResult = malloc(nSize)))
{
// TO DO: Выдать ошибку выделения памяти
}
return pResult;
}
// Тоже что и realloc, но с обработкой ошибок.
// Если <pData> NULL, вызывается функция malloc вместо realloc.
static void *MemUtilsRealloc(void *pData, int nSize)
{
void *pResult;
if (nSize <= 0)
{
if (pData)
free(pData);
return NULL;
}
if (pData)
pResult = realloc(pData, nSize);
else
pResult = malloc(nSize);
if (!pResult)
{
// TO DO: Выдать ошибку выделения памяти
}
return pResult;
}
// Тоже самое, что и MemUtilsMalloc and MemUtilsRelloc, толькоt
// учитывает количество элементов и размер элемента. В результате
// выделяется память размером nObjectsCount * nObjectSize байт.
// Кроме того присутствует обработка ошибок и проверка того, чтобы
// суммарный размер не превышал предел для int.
static void *MemUtilsMallocArray(int nObjectsCount, int nObjectSize)
{
if (0 == nObjectsCount)
return NULL;
int nSize = nObjectsCount * nObjectSize;
if (nObjectSize <= 0 || nObjectsCount < 0 || nObjectsCount >= INT_MAX / nObjectSize)
{
// TO DO: Выдать ошибку выделения памяти
}
return MemUtilsMalloc(nSize);
}
// Тоже что и free, но проверяет и игнорирует NULL-указатели.
static void MemUtilsFree(void *pData)
{
if (pData)
free(pData);
}
static void *MemUtilsReallocArray(void *pData, int nObjectsCount, int nObjectSize)
{
if (0 == nObjectsCount)
{
if (pData)
MemUtilsFree(pData);
return NULL;
}
int nSize = nObjectsCount * nObjectSize;
if (nObjectSize <= 0 || nObjectsCount < 0 || nObjectsCount >= INT_MAX / nObjectSize)
{
// TO DO: Выдать ошибку выделения памяти
}
return MemUtilsRealloc(pData, nSize);
}
// Выделяем память и копируем туда строку.
static char *CopyString(char *sString)
{
char *sResult = (char *)MemUtilsMalloc(strlen(sString) + 1);
strcpy(sResult, sString);
return sResult;
}
}
#endif // _PDF_READER_MEMORY_UTILS_H