cis_config
FormatSerialize.h
1 #include <../tools.h>
2 #include <SerializeBase.h>
3 #include <../dataio/AsciiTable.h>
4 
5 #ifndef CISFORMATSERIALIZE_H_
6 #define CISFORMATSERIALIZE_H_
7 
8 
19 static inline
20 int serialize_format(const seri_t s, char *buf, const size_t buf_siz,
21  int *args_used, va_list ap) {
22  args_used[0] = 0;
23  char *fmt = (char*)s.info;
24  int ret = vsnprintf(buf, buf_siz, fmt, ap);
25  cislog_debug("serialize_format: vsnprintf returns %d", ret);
26  if (ret < 0) {
27  cislog_error("serialize_format: vsnprintf encoding error");
28  ret = -1;
29  } else {
30  args_used[0] = count_formats(fmt);
31  }
32  return ret;
33 };
34 
43 static inline
44 int deserialize_format(const seri_t s, const char *buf, const size_t buf_siz,
45  va_list ap) {
46  // Prevent C4100 warning on windows by referencing param
47 #ifdef _WIN32
48  buf_siz;
49 #endif
50  // Simplify format
51  char *fmt0 = (char*)s.info;
52  size_t fmt_siz = 2*strlen(fmt0) + 1;
53  char *fmt = (char*)malloc(sizeof(char) * fmt_siz);
54  if (fmt == NULL) {
55  cislog_error("deserialize_format: Failed to allocate buffer for simplified format.");
56  return -1;
57  }
58  strcpy(fmt, fmt0);
59  int sret = simplify_formats(fmt, fmt_siz);
60  if (sret < 0) {
61  cislog_error("deserialize_format: simplify_formats returned %d", sret);
62  free(fmt);
63  return -1;
64  }
65  cislog_debug("deserialize_format: simplify_formats returns %d", sret);
66  int nfmt = count_formats(fmt);
67  cislog_debug("deserialize_format: Simplified format contains %d fields", nfmt);
68  // Interpret message
69  sret = vsscanf(buf, fmt, ap);
70  if (sret != nfmt) {
71  cislog_error("deserialize_format: vsscanf filled %d variables, but there are %d formats",
72  sret, nfmt);
73  free(fmt);
74  return -1;
75  }
76  cislog_debug("deserialize_format: vsscanf returns %d", sret);
77  free(fmt);
78  return sret;
79 };
80 
81 
82 #endif /*CISFORMATSERIALIZE_H_*/
Serializer structure.
Definition: SerializeBase.h:15