gwenhywfar  4.99.8beta
ahc.c
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Mon Mar 01 2004
3  copyright : (C) 2004-2010 by Martin Preuss
4  email : martin@libchipcard.de
5 
6  ***************************************************************************
7  * Please see toplevel file COPYING for license details *
8  ***************************************************************************/
9 
10 #ifdef HAVE_CONFIG_H
11 # include <config.h>
12 #endif
13 
14 
15 
16 #include "args.h"
17 #include "typemaker_p.h"
18 #include <gwenhywfar/debug.h>
19 #include <gwenhywfar/logger.h>
20 #include <gwenhywfar/xml.h>
21 #include <gwenhywfar/syncio_file.h>
22 
23 #include <stdlib.h>
24 #include <assert.h>
25 
26 #include <sys/types.h>
27 #include <sys/stat.h>
28 #include <fcntl.h>
29 #include <errno.h>
30 #include <string.h>
31 #include <ctype.h>
32 
33 
34 
35 
37  int rv;
38  const char *f;
39  GWEN_BUFFER *fname;
40  GWEN_BUFFER *hbuf;
41  const char *s;
42  const char *nacc;
43  const char *constAcc;
44  const char *constName;
45  const char *fromDbAcc;
46  const char *fromDbName;
47  const char *dupAcc;
48  const char *dupName;
49  GWEN_SYNCIO *sio;
50  int err;
51  GWEN_XMLNODE *n;
52  const char *id;
53  const char *prefix;
54 
55  id=get_struct_property(node, "id", 0);
56  if (!id) {
57  DBG_ERROR(0, "No id for struct");
58  return -1;
59  }
60 
61  prefix=get_struct_property(node, "prefix", 0);
62  if (!prefix) {
63  DBG_ERROR(0, "No prefix for struct");
64  return -1;
65  }
66 
67  f=get_struct_property(node, "filename", 0);
68  if (!f) {
69  DBG_ERROR(0, "No filename given");
70  return -1;
71  }
72 
73  nacc=get_struct_property(node, "access", "public");
74  constAcc=get_struct_property(node, "constructor-access", nacc);
75  constName=get_struct_property(node, "constructor-name", 0);
76  fromDbAcc=get_struct_property(node, "fromdb-access", nacc);
77  fromDbName=get_struct_property(node, "fromdb-name", 0);
78  dupAcc=get_struct_property(node, "dup-access", nacc);
79  dupName=get_struct_property(node, "fromdb-name", 0);
80 
81  fname=GWEN_Buffer_new(0, 256, 0, 1);
82  GWEN_Buffer_AppendString(fname, f);
83  GWEN_Buffer_AppendString(fname, ".h");
84 
94  rv=GWEN_SyncIo_Connect(sio);
95  if (rv<0) {
96  DBG_ERROR(0, "open(%s): %s",
97  GWEN_Buffer_GetStart(fname),
98  strerror(errno));
99  GWEN_Buffer_free(fname);
100  GWEN_SyncIo_free(sio);
101  return -1;
102  }
103  GWEN_Buffer_free(fname);
104 
105  /* Insert the auto-generation warning */
106  GWEN_SyncIo_WriteString(sio, "/* This file is auto-generated from \"");
107  GWEN_SyncIo_WriteString(sio, f);
108  GWEN_SyncIo_WriteLine(sio, ".xml\" by the typemaker");
109  GWEN_SyncIo_WriteLine(sio, " tool of Gwenhywfar. ");
110  GWEN_SyncIo_WriteLine(sio, " Do not edit this file -- all changes will be lost! */");
111 
112  hbuf=GWEN_Buffer_new(0, 256, 0, 1);
113  s=f;
114  while(*s) {
115  GWEN_Buffer_AppendByte(hbuf, toupper(*s));
116  s++;
117  }
118  GWEN_Buffer_AppendString(hbuf, "_H");
119 
120  GWEN_SyncIo_WriteString(sio, "#ifndef ");
122  GWEN_SyncIo_WriteString(sio, "#define ");
124  GWEN_SyncIo_WriteLine(sio, "");
125 
126  rv=write_apidoc_c(args, node, sio, "public");
127  if (rv) {
128  DBG_INFO(0, "here (%d)", rv);
129  return rv;
130  }
131 
132  if (strcasecmp(nacc, "public")==0) {
133  GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus");
134  GWEN_SyncIo_WriteLine(sio, "extern \"C\" {");
135  GWEN_SyncIo_WriteLine(sio, "#endif");
136  GWEN_SyncIo_WriteLine(sio, "");
137  GWEN_SyncIo_WriteString(sio, "typedef struct ");
138  GWEN_SyncIo_WriteString(sio, id);
139  GWEN_SyncIo_WriteString(sio, " ");
140  GWEN_SyncIo_WriteString(sio, id);
141  GWEN_SyncIo_WriteLine(sio, ";");
142  GWEN_SyncIo_WriteLine(sio, "");
143  GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus");
144  GWEN_SyncIo_WriteLine(sio, "} /* __cplusplus */");
145  GWEN_SyncIo_WriteLine(sio, "#endif");
146  GWEN_SyncIo_WriteLine(sio, "");
147  }
148 
149  GWEN_SyncIo_WriteLine(sio, "#include <gwenhywfar/db.h>");
150 
151  if (strcasecmp(get_struct_property(node, "inherit", ""),
152  "public")==0) {
153  GWEN_SyncIo_WriteLine(sio, "#include <gwenhywfar/inherit.h>");
154  }
155 
156  if (strcasecmp(get_struct_property(node, "list", ""),
157  "public")==0) {
158  GWEN_SyncIo_WriteLine(sio, "#include <gwenhywfar/misc.h>");
159  }
160 
161  if (strcasecmp(get_struct_property(node, "list2", ""),
162  "public")==0) {
163  GWEN_SyncIo_WriteLine(sio, "#include <gwenhywfar/list2.h>");
164  }
165 
166  n=GWEN_XMLNode_FindFirstTag(node, "pre-headers", 0, 0);
167  if (n) {
168  GWEN_XMLNODE *nn;
169 
170  GWEN_SyncIo_WriteLine(sio, "/* pre-headers */");
172  while(nn) {
173  rv=write_hp_group_c(args, nn, sio);
174  if (rv) {
175  GWEN_Buffer_free(hbuf);
176  return -1;
177  }
179  } /* while */
180  GWEN_SyncIo_WriteLine(sio, "");
181  }
182 
183  n=GWEN_XMLNode_FindFirstTag(node, "headers", 0, 0);
184  if (n) {
185  GWEN_XMLNODE *nn;
186 
187  GWEN_SyncIo_WriteLine(sio, "/* headers */");
189  while(nn) {
190  rv=write_hp_group_c(args, nn, sio);
191  if (rv) {
192  GWEN_Buffer_free(hbuf);
193  DBG_INFO(0, "here (%d)", rv);
194  return -1;
195  }
197  } /* while */
198  GWEN_SyncIo_WriteLine(sio, "");
199  }
200 
201  GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus");
202  GWEN_SyncIo_WriteLine(sio, "extern \"C\" {");
203  GWEN_SyncIo_WriteLine(sio, "#endif");
204  GWEN_SyncIo_WriteLine(sio, "");
205 
206  if (write_h_enums(args, node, sio, "public")) {
207  DBG_ERROR(0, "Error writing enum types");
208  return -1;
209  }
210 
211  if (write_h_funcs(args, node, sio, "public")) {
212  DBG_ERROR(0, "Error writing function types");
213  return -1;
214  }
215 
216  if (strcasecmp(get_struct_property(node, "inherit", ""),
217  "public")==0) {
218  if (args->domain)
219  GWEN_SyncIo_WriteString(sio, "GWEN_INHERIT_FUNCTION_LIB_DEFS(");
220  else
221  GWEN_SyncIo_WriteString(sio, "GWEN_INHERIT_FUNCTION_DEFS(");
222  GWEN_SyncIo_WriteString(sio, id);
223  if (args->domain) {
224  GWEN_SyncIo_WriteString(sio, ", ");
225  GWEN_SyncIo_WriteString(sio, args->domain);
226  }
227  GWEN_SyncIo_WriteLine(sio, ")");
228  }
229 
230  if (strcasecmp(get_struct_property(node, "list", ""),
231  "public")==0) {
232  if (args->domain)
233  GWEN_SyncIo_WriteString(sio, "GWEN_LIST_FUNCTION_LIB_DEFS(");
234  else
235  GWEN_SyncIo_WriteString(sio, "GWEN_LIST_FUNCTION_DEFS(");
236  GWEN_SyncIo_WriteString(sio, id);
237  GWEN_SyncIo_WriteString(sio, ", ");
238  GWEN_SyncIo_WriteString(sio, prefix);
239  if (args->domain) {
240  GWEN_SyncIo_WriteString(sio, ", ");
241  GWEN_SyncIo_WriteString(sio, args->domain);
242  }
243  GWEN_SyncIo_WriteLine(sio, ")");
244 
245  if (dupAcc && strcasecmp(dupAcc, "none")!=0) {
246  if (args->domain) {
247  GWEN_SyncIo_WriteString(sio, args->domain);
248  GWEN_SyncIo_WriteString(sio, " ");
249  }
250  GWEN_SyncIo_WriteString(sio, id);
251  GWEN_SyncIo_WriteString(sio, "_LIST *");
252  GWEN_SyncIo_WriteString(sio, prefix);
253  GWEN_SyncIo_WriteString(sio, "_List_dup(const ");
254  GWEN_SyncIo_WriteString(sio, id);
255  GWEN_SyncIo_WriteLine(sio, "_LIST *stl);");
256  GWEN_SyncIo_WriteLine(sio, "");
257  }
258  }
259 
260  if (strcasecmp(get_struct_property(node, "list2", ""),
261  "public")==0) {
262  if (args->domain)
263  GWEN_SyncIo_WriteString(sio, "GWEN_LIST2_FUNCTION_LIB_DEFS(");
264  else
265  GWEN_SyncIo_WriteString(sio, "GWEN_LIST2_FUNCTION_DEFS(");
266  GWEN_SyncIo_WriteString(sio, id);
267  GWEN_SyncIo_WriteString(sio, ", ");
268  GWEN_SyncIo_WriteString(sio, prefix);
269  if (args->domain) {
270  GWEN_SyncIo_WriteString(sio, ", ");
271  GWEN_SyncIo_WriteString(sio, args->domain);
272  }
273  GWEN_SyncIo_WriteLine(sio, ")");
274  GWEN_SyncIo_WriteLine(sio, "");
275 
277  "/** Destroys all objects stored in the given "
278  "LIST2 and the list itself");
279  GWEN_SyncIo_WriteLine(sio, "*/");
280  if (args->domain) {
281  GWEN_SyncIo_WriteString(sio, args->domain);
282  GWEN_SyncIo_WriteString(sio, " ");
283  }
284  GWEN_SyncIo_WriteString(sio, "void ");
285  GWEN_SyncIo_WriteString(sio, prefix);
286  GWEN_SyncIo_WriteString(sio, "_List2_freeAll(");
287  GWEN_SyncIo_WriteString(sio, id);
288  GWEN_SyncIo_WriteLine(sio, "_LIST2 *stl);");
289 
290  GWEN_SyncIo_WriteLine(sio, "");
291  }
292 
293  n=GWEN_XMLNode_FindFirstTag(node, "post-headers", 0, 0);
294  if (n) {
295  GWEN_XMLNODE *nn;
296 
297  GWEN_SyncIo_WriteLine(sio, "/* post-headers */");
299  while(nn) {
300  rv=write_hp_group_c(args, nn, sio);
301  if (rv) {
302  GWEN_Buffer_free(hbuf);
303  DBG_INFO(0, "here (%d)", rv);
304  return -1;
305  }
307  } /* while */
308  GWEN_SyncIo_WriteLine(sio, "");
309  }
310 
311 
312  if (strcasecmp(constAcc, "public")==0) {
314  "/** Creates a new object.");
315  GWEN_SyncIo_WriteLine(sio, "*/");
316  if (args->domain) {
317  GWEN_SyncIo_WriteString(sio, args->domain);
318  GWEN_SyncIo_WriteString(sio, " ");
319  }
320  GWEN_SyncIo_WriteString(sio, id);
321  GWEN_SyncIo_WriteString(sio, " *");
322  GWEN_SyncIo_WriteString(sio, prefix);
323  if (constName)
324  GWEN_SyncIo_WriteString(sio, constName);
325  else
326  GWEN_SyncIo_WriteString(sio, "_new");
327  GWEN_SyncIo_WriteLine(sio, "(void);");
328  }
329 
330  /* FromDb */
331  if (strcasecmp(fromDbAcc, "public")==0) {
333  "/** Creates an object from the data in the"
334  " given GWEN_DB_NODE");
335  GWEN_SyncIo_WriteLine(sio, "*/");
336  if (args->domain) {
337  GWEN_SyncIo_WriteString(sio, args->domain);
338  GWEN_SyncIo_WriteString(sio, " ");
339  }
340  GWEN_SyncIo_WriteString(sio, id);
341  GWEN_SyncIo_WriteString(sio, " *");
342  GWEN_SyncIo_WriteString(sio, prefix);
343  if (fromDbName)
344  GWEN_SyncIo_WriteString(sio, fromDbName);
345  else
346  GWEN_SyncIo_WriteString(sio, "_fromDb");
347  GWEN_SyncIo_WriteLine(sio, "(GWEN_DB_NODE *db);");
348  }
349 
350  /* dup */
351  if (strcasecmp(dupAcc, "public")==0) {
353  "/** Creates and returns a deep copy of the"
354  "given object.");
355  GWEN_SyncIo_WriteLine(sio, "*/");
356  if (args->domain) {
357  GWEN_SyncIo_WriteString(sio, args->domain);
358  GWEN_SyncIo_WriteString(sio, " ");
359  }
360  GWEN_SyncIo_WriteString(sio, id);
361  GWEN_SyncIo_WriteString(sio, " *");
362  GWEN_SyncIo_WriteString(sio, prefix);
363  if (dupName)
364  GWEN_SyncIo_WriteString(sio, dupName);
365  else
366  GWEN_SyncIo_WriteString(sio, "_dup");
367  GWEN_SyncIo_WriteString(sio, "(const ");
368  GWEN_SyncIo_WriteString(sio, id);
369  GWEN_SyncIo_WriteLine(sio, "*st);");
370  }
371 
372  if (strcasecmp(nacc, "public")==0) {
374  "/** Destroys the given object.");
375  GWEN_SyncIo_WriteLine(sio, "*/");
376  if (args->domain) {
377  GWEN_SyncIo_WriteString(sio, args->domain);
378  GWEN_SyncIo_WriteString(sio, " ");
379  }
380  GWEN_SyncIo_WriteString(sio, "void ");
381  GWEN_SyncIo_WriteString(sio, prefix);
382  GWEN_SyncIo_WriteString(sio, "_free(");
383  GWEN_SyncIo_WriteString(sio, id);
384  GWEN_SyncIo_WriteLine(sio, " *st);");
385 
387  "/** Increments the usage counter of the "
388  "given object, so an additional free() is"
389  " needed to destroy the object.");
390  GWEN_SyncIo_WriteLine(sio, "*/");
391  if (args->domain) {
392  GWEN_SyncIo_WriteString(sio, args->domain);
393  GWEN_SyncIo_WriteString(sio, " ");
394  }
395  GWEN_SyncIo_WriteString(sio, "void ");
396  GWEN_SyncIo_WriteString(sio, prefix);
397  GWEN_SyncIo_WriteString(sio, "_Attach(");
398  GWEN_SyncIo_WriteString(sio, id);
399  GWEN_SyncIo_WriteLine(sio, " *st);");
400 
401  /* ReadDb */
402  GWEN_SyncIo_WriteLine(sio, "/** Reads data from a GWEN_DB.");
403  GWEN_SyncIo_WriteLine(sio, "*/");
404  if (args->domain) {
405  GWEN_SyncIo_WriteString(sio, args->domain);
406  GWEN_SyncIo_WriteString(sio, " ");
407  }
408  GWEN_SyncIo_WriteString(sio, "int ");
409  GWEN_SyncIo_WriteString(sio, prefix);
410  GWEN_SyncIo_WriteString(sio, "_ReadDb(");
411  GWEN_SyncIo_WriteString(sio, id);
412  GWEN_SyncIo_WriteLine(sio, " *st, GWEN_DB_NODE *db);");
413 
414  /* ToDb */
416  "/** Stores an object in the"
417  " given GWEN_DB_NODE");
418  GWEN_SyncIo_WriteLine(sio, "*/");
419  if (args->domain) {
420  GWEN_SyncIo_WriteString(sio, args->domain);
421  GWEN_SyncIo_WriteString(sio, " ");
422  }
423  GWEN_SyncIo_WriteString(sio, "int ");
424  GWEN_SyncIo_WriteString(sio, prefix);
425  GWEN_SyncIo_WriteString(sio, "_toDb(const ");
426  GWEN_SyncIo_WriteString(sio, id);
427  GWEN_SyncIo_WriteLine(sio, "*st, GWEN_DB_NODE *db);");
428 
430  "/** Returns 0 if this object has not been"
431  " modified, !=0 otherwise");
432  GWEN_SyncIo_WriteLine(sio, "*/");
433  if (args->domain) {
434  GWEN_SyncIo_WriteString(sio, args->domain);
435  GWEN_SyncIo_WriteString(sio, " ");
436  }
437  GWEN_SyncIo_WriteString(sio, "int ");
438  GWEN_SyncIo_WriteString(sio, prefix);
439  GWEN_SyncIo_WriteString(sio, "_IsModified(const ");
440  GWEN_SyncIo_WriteString(sio, id);
441  GWEN_SyncIo_WriteLine(sio, " *st);");
442 
444  "/** Sets the modified state of the given "
445  "object");
446  GWEN_SyncIo_WriteLine(sio, "*/");
447  if (args->domain) {
448  GWEN_SyncIo_WriteString(sio, args->domain);
449  GWEN_SyncIo_WriteString(sio, " ");
450  }
451  GWEN_SyncIo_WriteString(sio, "void ");
452  GWEN_SyncIo_WriteString(sio, prefix);
453  GWEN_SyncIo_WriteString(sio, "_SetModified(");
454  GWEN_SyncIo_WriteString(sio, id);
455  GWEN_SyncIo_WriteLine(sio, " *st, int i);");
456  }
457 
458  rv=write_h_setget_c(args, node, sio, "public");
459  if (rv) {
460  GWEN_Buffer_free(hbuf);
462  GWEN_SyncIo_free(sio);
463  DBG_INFO(0, "here (%d)", rv);
464  return rv;
465  }
466 
467  err=GWEN_SyncIo_WriteLine(sio, "");
468  if (err) {
469  DBG_ERROR_ERR(0, err);
470  GWEN_Buffer_free(hbuf);
471  return -1;
472  }
473 
474  err=GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus");
475  if (err) {
476  DBG_ERROR_ERR(0, err);
477  GWEN_Buffer_free(hbuf);
478  return -1;
479  }
480  err=GWEN_SyncIo_WriteLine(sio, "} /* __cplusplus */");
481  if (err) {
482  DBG_ERROR_ERR(0, err);
483  GWEN_Buffer_free(hbuf);
484  return -1;
485  }
486  err=GWEN_SyncIo_WriteLine(sio, "#endif");
487  if (err) {
488  DBG_ERROR_ERR(0, err);
489  GWEN_Buffer_free(hbuf);
490  return -1;
491  }
492  err=GWEN_SyncIo_WriteLine(sio, "");
493  if (err) {
494  DBG_ERROR_ERR(0, err);
495  GWEN_Buffer_free(hbuf);
496  return -1;
497  }
498 
499  /* write trailing endif */
500  err=GWEN_SyncIo_WriteLine(sio, "");
501  if (err) {
502  DBG_ERROR_ERR(0, err);
503  GWEN_Buffer_free(hbuf);
504  return -1;
505  }
506 
507  err=GWEN_SyncIo_WriteString(sio, "#endif /* ");
508  if (err) {
509  DBG_ERROR_ERR(0, err);
510  GWEN_Buffer_free(hbuf);
511  return -1;
512  }
514  if (err) {
515  DBG_ERROR_ERR(0, err);
516  GWEN_Buffer_free(hbuf);
517  return -1;
518  }
519  err=GWEN_SyncIo_WriteLine(sio, " */");
520  if (err) {
521  DBG_ERROR_ERR(0, err);
522  GWEN_Buffer_free(hbuf);
523  return -1;
524  }
525 
526  err=GWEN_SyncIo_Disconnect(sio);
527  if (err) {
528  DBG_ERROR_ERR(0, err);
529  GWEN_SyncIo_free(sio);
530  GWEN_Buffer_free(hbuf);
531  return -1;
532  }
533 
534  GWEN_Buffer_free(hbuf);
535  return 0;
536 }
537 
538 
539 
541  GWEN_XMLNODE *n;
542  int rv;
543 
544  n=GWEN_XMLNode_FindFirstTag(node, "type", 0, 0);
545  while (n) {
546  const char *nacc;
547 
548  nacc=get_struct_property(n, "access", "public");
549  if (strcasecmp(nacc, "public")==0) {
550  rv=write_ha_file_c(args, n);
551  if (rv) {
552  DBG_INFO(0, "here (%d)", rv);
553  return rv;
554  }
555  }
556  n=GWEN_XMLNode_FindNextTag(n, "type", 0, 0);
557  }
558  return 0;
559 }
560 
561 
562 
563 
564 
565 
566 
567 
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:223
int GWEN_SyncIo_Connect(GWEN_SYNCIO *sio)
Definition: syncio.c:94
#define GWEN_SYNCIO_FILE_FLAGS_WRITE
Definition: syncio_file.h:54
#define GWEN_SYNCIO_FILE_FLAGS_READ
Definition: syncio_file.h:53
GWEN_XMLNODE * GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
Definition: xml.c:712
#define GWEN_SYNCIO_FILE_FLAGS_UREAD
Definition: syncio_file.h:58
int write_ha_files_c(ARGUMENTS *args, GWEN_XMLNODE *node)
Definition: ahc.c:540
#define DBG_ERROR_ERR(dbg_logger, dbg_err)
Definition: debug.h:108
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:38
#define GWEN_SYNCIO_FILE_FLAGS_GREAD
Definition: syncio_file.h:62
int GWEN_SyncIo_WriteLine(GWEN_SYNCIO *sio, const char *s)
Definition: syncio.c:382
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
Definition: xml.c:695
struct GWEN_SYNCIO GWEN_SYNCIO
Definition: syncio.h:40
const char * get_struct_property(GWEN_XMLNODE *node, const char *pname, const char *defval)
int write_h_funcs(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc)
GWEN_XMLNODE * GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n)
Definition: xml.c:635
int write_ha_file_c(ARGUMENTS *args, GWEN_XMLNODE *node)
Definition: ahc.c:36
#define GWEN_SYNCIO_FILE_FLAGS_GWRITE
Definition: syncio_file.h:63
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
Definition: buffer.c:380
int write_hp_group_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
Definition: phc.c:217
#define GWEN_SYNCIO_FILE_FLAGS_UWRITE
Definition: syncio_file.h:59
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:83
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:41
void GWEN_SyncIo_free(GWEN_SYNCIO *sio)
Definition: syncio.c:76
void GWEN_SyncIo_AddFlags(GWEN_SYNCIO *sio, uint32_t fl)
Definition: syncio.c:169
const char * domain
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
Definition: xml.c:629
int GWEN_SyncIo_WriteString(GWEN_SYNCIO *sio, const char *s)
Definition: syncio.c:368
int GWEN_SyncIo_Disconnect(GWEN_SYNCIO *sio)
Definition: syncio.c:105
int write_h_enums(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc)
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:164
int write_h_setget_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc)
GWENHYWFAR_API GWEN_SYNCIO * GWEN_SyncIo_File_new(const char *path, GWEN_SYNCIO_FILE_CREATIONMODE cm)
int write_apidoc_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc)
struct GWEN__XMLNODE GWEN_XMLNODE
Definition: xml.h:148
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:1014