The Assimilation Project
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
dump.c
Go to the documentation of this file.
1 
22 #include <stdlib.h>
23 #include <stdio.h>
24 #include <string.h>
25 #include <ctype.h>
26 #include <glib.h>
27 #include <lldp.h>
28 #include <server_dump.h>
29 
30 
31 //const gboolean is_all_ascii(const void*, const void *);
32 //void dump_mem(const void *, const void *);
33 
35 WINEXPORT gboolean
36 is_all_ascii(const void* vmem, const void* vend)
37 {
38  const guchar* mem = vmem;
39  const guchar* end = vend;
40  int len = end - mem;
41  if (len == 0) {
42  return FALSE;
43  }
44  for (; mem < end; ++mem) {
45  const guchar* uc = mem;
46  if (isspace(*uc) || (isascii(*uc) && !iscntrl(*uc)) || (mem == end-1 && *uc == 0x00 && len > 1)) {
47  continue;
48  }
49  return FALSE;
50  }
51  if (len == 1) {
52  --mem;
53  fprintf(stderr, "STRING WITH 1 CHAR 0x%02x is ASCII\n", *((const unsigned char *)mem));
54  }
55  return TRUE;
56 }
57 
59 void
60 dump_mem(const void* vstart, const void* vend)
61 {
62  const guchar* start = vstart;
63  const guchar* end = vend;
64  const guchar* vp;
65 
66  if (is_all_ascii(start, end)) {
67  fprintf(stdout, "{\"");
68  while (start < end) {
69  char startchar = *((const char *)start);
70  ++start;
71  if (startchar == 0x00) {
72  break;
73  }
74  fprintf(stdout, "%c", startchar);
75  }
76  fprintf(stdout, "\"}");
77  fflush(stdout);
78  return;
79  }
80  fprintf(stdout, "{");
81  for (vp=start; vp < (const guchar*)end; ++vp) {
82  fprintf(stdout, "%s0x%02x"
83  , vp == start ? "" : ", "
84  , (unsigned)(*vp));
85 
86  }
87  fprintf(stdout, "}");
88 }