1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-25 23:21:54 +03:00
samba-mirror/source3/aparser/util.c
Andrew Tridgell eee003da6a started adding support for relative, plus options for autoalignment
so the same parser generator can be uses for cifs and rpc
(This used to be commit c7829fa0d8)
2000-06-09 02:59:50 +00:00

113 lines
2.2 KiB
C

#include "parser.h"
/*******************************************************************
Count the number of characters (not bytes) in a unicode string.
********************************************************************/
size_t strlen_w(void *src)
{
size_t len;
for (len = 0; SVAL(src, len*2); len++) ;
return len;
}
/****************************************************************************
expand a pointer to be a particular size
****************************************************************************/
void *Realloc(void *p,size_t size)
{
void *ret=NULL;
if (size == 0) {
if (p) free(p);
DEBUG(5,("Realloc asked for 0 bytes\n"));
return NULL;
}
if (!p)
ret = (void *)malloc(size);
else
ret = (void *)realloc(p,size);
if (!ret)
DEBUG(0,("Memory allocation error: failed to expand to %d bytes\n",(int)size));
return(ret);
}
char *tab_depth(int depth)
{
static pstring spaces;
memset(spaces, ' ', depth * 4);
spaces[depth * 4] = 0;
return spaces;
}
void print_asc(int level, uchar const *buf, int len)
{
int i;
for (i = 0; i < len; i++)
{
DEBUGADD(level, ("%c", isprint(buf[i]) ? buf[i] : '.'));
}
}
void dump_data(int level, char *buf1, int len)
{
uchar const *buf = (uchar const *)buf1;
int i = 0;
if (buf == NULL)
{
DEBUG(level, ("dump_data: NULL, len=%d\n", len));
return;
}
if (len < 0)
return;
if (len == 0)
{
DEBUG(level, ("\n"));
return;
}
DEBUG(level, ("[%03X] ", i));
for (i = 0; i < len;)
{
DEBUGADD(level, ("%02X ", (int)buf[i]));
i++;
if (i % 8 == 0)
DEBUGADD(level, (" "));
if (i % 16 == 0)
{
print_asc(level, &buf[i - 16], 8);
DEBUGADD(level, (" "));
print_asc(level, &buf[i - 8], 8);
DEBUGADD(level, ("\n"));
if (i < len)
DEBUGADD(level, ("[%03X] ", i));
}
}
if (i % 16 != 0) /* finish off a non-16-char-length row */
{
int n;
n = 16 - (i % 16);
DEBUGADD(level, (" "));
if (n > 8)
DEBUGADD(level, (" "));
while (n--)
DEBUGADD(level, (" "));
n = MIN(8, i % 16);
print_asc(level, &buf[i - (i % 16)], n);
DEBUGADD(level, (" "));
n = (i % 16) - n;
if (n > 0)
print_asc(level, &buf[i - n], n);
DEBUGADD(level, ("\n"));
}
}