import HEAD into svn+ssh://svn.samba.org/home/svn/samba/trunk
[metze/old/v3-2-winbind-ndr.git] / source / aparser / util.c
1 #include "parser.h"
2
3
4 /*******************************************************************
5  Count the number of characters (not bytes) in a unicode string.
6 ********************************************************************/
7 size_t strlen_w(void *src)
8 {
9         size_t len;
10
11         for (len = 0; SVAL(src, len*2); len++) ;
12
13         return len;
14 }
15
16 /****************************************************************************
17 expand a pointer to be a particular size
18 ****************************************************************************/
19 void *Realloc(void *p,size_t size)
20 {
21   void *ret=NULL;
22
23   if (size == 0) {
24     if (p) free(p);
25     DEBUG(5,("Realloc asked for 0 bytes\n"));
26     return NULL;
27   }
28
29   if (!p)
30     ret = (void *)malloc(size);
31   else
32     ret = (void *)realloc(p,size);
33
34   if (!ret)
35     DEBUG(0,("Memory allocation error: failed to expand to %d bytes\n",(int)size));
36
37   return(ret);
38 }
39
40
41 char *tab_depth(int depth)
42 {
43         static pstring spaces;
44         memset(spaces, ' ', depth * 4);
45         spaces[depth * 4] = 0;
46         return spaces;
47 }
48
49 void print_asc(int level, uchar const *buf, int len)
50 {
51         int i;
52         for (i = 0; i < len; i++)
53         {
54                 DEBUGADD(level, ("%c", isprint(buf[i]) ? buf[i] : '.'));
55         }
56 }
57
58 void dump_data(int level, char *buf1, int len)
59 {
60         uchar const *buf = (uchar const *)buf1;
61         int i = 0;
62         if (buf == NULL)
63         {
64                 DEBUG(level, ("dump_data: NULL, len=%d\n", len));
65                 return;
66         }
67         if (len < 0)
68                 return;
69         if (len == 0)
70         {
71                 DEBUG(level, ("\n"));
72                 return;
73         }
74
75         DEBUG(level, ("[%03X] ", i));
76         for (i = 0; i < len;)
77         {
78                 DEBUGADD(level, ("%02X ", (int)buf[i]));
79                 i++;
80                 if (i % 8 == 0)
81                         DEBUGADD(level, (" "));
82                 if (i % 16 == 0)
83                 {
84                         print_asc(level, &buf[i - 16], 8);
85                         DEBUGADD(level, (" "));
86                         print_asc(level, &buf[i - 8], 8);
87                         DEBUGADD(level, ("\n"));
88                         if (i < len)
89                                 DEBUGADD(level, ("[%03X] ", i));
90                 }
91         }
92
93         if (i % 16 != 0)        /* finish off a non-16-char-length row */
94         {
95                 int n;
96
97                 n = 16 - (i % 16);
98                 DEBUGADD(level, (" "));
99                 if (n > 8)
100                         DEBUGADD(level, (" "));
101                 while (n--)
102                         DEBUGADD(level, ("   "));
103
104                 n = MIN(8, i % 16);
105                 print_asc(level, &buf[i - (i % 16)], n);
106                 DEBUGADD(level, (" "));
107                 n = (i % 16) - n;
108                 if (n > 0)
109                         print_asc(level, &buf[i - n], n);
110                 DEBUGADD(level, ("\n"));
111         }
112 }