#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <X11/Xos.h>
#include <X11/X.h>
#include <X11/Xmd.h>
#include <X11/Xdmcp.h>
#include <stdint.h>
#include <stdlib.h>
static void *
xmalloc(size_t size)
{
return malloc(size ? size : 1);
}
static void *
xrealloc(void *ptr, size_t size)
{
return realloc(ptr, size ? size : 1);
}
int
XdmcpAllocARRAY8 (ARRAY8Ptr array, int length)
{
CARD8Ptr newData;
if (length > UINT16_MAX)
return FALSE;
newData = (CARD8Ptr) xmalloc(length * sizeof (CARD8));
if (!newData)
return FALSE;
array->length = (CARD16) length;
array->data = newData;
return TRUE;
}
int
XdmcpAllocARRAY16 (ARRAY16Ptr array, int length)
{
CARD16Ptr newData;
if (length > UINT8_MAX)
return FALSE;
newData = (CARD16Ptr) xmalloc(length * sizeof (CARD16));
if (!newData)
return FALSE;
array->length = (CARD8) length;
array->data = newData;
return TRUE;
}
int
XdmcpAllocARRAY32 (ARRAY32Ptr array, int length)
{
CARD32Ptr newData;
if (length > UINT8_MAX)
return FALSE;
newData = (CARD32Ptr) xmalloc(length * sizeof (CARD32));
if (!newData)
return FALSE;
array->length = (CARD8) length;
array->data = newData;
return TRUE;
}
int
XdmcpAllocARRAYofARRAY8 (ARRAYofARRAY8Ptr array, int length)
{
ARRAY8Ptr newData;
if (length > UINT8_MAX)
return FALSE;
newData = (ARRAY8Ptr) xmalloc(length * sizeof (ARRAY8));
if (!newData)
return FALSE;
array->length = (CARD8) length;
array->data = newData;
return TRUE;
}
int
XdmcpARRAY8Equal (const ARRAY8Ptr array1, const ARRAY8Ptr array2)
{
if (array1->length != array2->length)
return FALSE;
if (memcmp(array1->data, array2->data, array1->length) != 0)
return FALSE;
return TRUE;
}
int
XdmcpCopyARRAY8 (const ARRAY8Ptr src, ARRAY8Ptr dst)
{
dst->length = src->length;
dst->data = (CARD8 *) xmalloc(dst->length * sizeof (CARD8));
if (!dst->data)
return FALSE;
memmove (dst->data, src->data, src->length * sizeof (CARD8));
return TRUE;
}
int
XdmcpReallocARRAY8 (ARRAY8Ptr array, int length)
{
CARD8Ptr newData;
if (length > UINT16_MAX)
return FALSE;
newData = (CARD8Ptr) xrealloc(array->data, length * sizeof (CARD8));
if (!newData)
return FALSE;
array->length = (CARD16) length;
array->data = newData;
return TRUE;
}
int
XdmcpReallocARRAYofARRAY8 (ARRAYofARRAY8Ptr array, int length)
{
ARRAY8Ptr newData;
if (length > UINT8_MAX)
return FALSE;
newData = (ARRAY8Ptr) xrealloc(array->data, length * sizeof (ARRAY8));
if (!newData)
return FALSE;
array->length = (CARD8) length;
array->data = newData;
return TRUE;
}
int
XdmcpReallocARRAY16 (ARRAY16Ptr array, int length)
{
CARD16Ptr newData;
if (length > UINT8_MAX)
return FALSE;
newData = (CARD16Ptr) xrealloc(array->data, length * sizeof (CARD16));
if (!newData)
return FALSE;
array->length = (CARD8) length;
array->data = newData;
return TRUE;
}
int
XdmcpReallocARRAY32 (ARRAY32Ptr array, int length)
{
CARD32Ptr newData;
if (length > UINT8_MAX)
return FALSE;
newData = (CARD32Ptr) xrealloc(array->data, length * sizeof (CARD32));
if (!newData)
return FALSE;
array->length = (CARD8) length;
array->data = newData;
return TRUE;
}
void
XdmcpDisposeARRAY8 (ARRAY8Ptr array)
{
free(array->data);
array->length = 0;
array->data = NULL;
}
void
XdmcpDisposeARRAY16 (ARRAY16Ptr array)
{
free(array->data);
array->length = 0;
array->data = NULL;
}
void
XdmcpDisposeARRAY32 (ARRAY32Ptr array)
{
free(array->data);
array->length = 0;
array->data = NULL;
}
void
XdmcpDisposeARRAYofARRAY8 (ARRAYofARRAY8Ptr array)
{
int i;
if (array->data != NULL) {
for (i = 0; i < (int)array->length; i++)
XdmcpDisposeARRAY8 (&array->data[i]);
free(array->data);
}
array->length = 0;
array->data = NULL;
}