15int ddiff_save(
UniHunk_t *diffs,
const char *filename )
18 xmlTextWriterPtr writer;
21 .type = HUNK_TARGET_NONE,
25 writer = xmlNewTextWriterDoc( &doc, 0 );
26 if ( writer == NULL ) {
27 WARN( _(
"testXmlwriterDoc: Error creating the xml writer" ) );
36 xmlw_startElem( writer,
"unidiff" );
39 xmlw_attr( writer,
"name",
"test diff" );
42 for (
int i = 0; i <
array_size( diffs ); i++ ) {
49 if ( target.
type != HUNK_TARGET_NONE )
50 xmlw_endElem( writer );
52 switch ( target.
type ) {
53 case HUNK_TARGET_SYSTEM:
54 xmlw_startElem( writer,
"system" );
56 case HUNK_TARGET_SPOB:
57 xmlw_startElem( writer,
"spob" );
59 case HUNK_TARGET_TECH:
60 xmlw_startElem( writer,
"tech" );
62 case HUNK_TARGET_FACTION:
63 xmlw_startElem( writer,
"faction" );
67 WARN( _(
"Trying to save unknown target type '%d'!" ),
69 xmlw_startElem( writer,
"unknown" );
72 xmlw_attr( writer,
"name",
"%s", h->
target.
u.
name );
78 xmlw_elemEmpty( writer, tag );
80 case HUNK_DATA_STRING:
81 xmlw_elem( writer, tag,
"%s", h->
u.name );
84 xmlw_elem( writer, tag,
"%d", h->
u.data );
87 xmlw_elem( writer, tag,
"%f", h->
u.fdata );
89 case HUNK_DATA_POINTER:
90 WARN( _(
"Hunk '%s' is trying to save pointer data!" ),
94 if ( target.
type != HUNK_TARGET_NONE ) {
97 xmlw_attr_raw( writer, attr->name, (
const xmlChar *)attr->value );
101 if ( target.
type != HUNK_TARGET_NONE )
102 xmlw_endElem( writer );
104 xmlw_endElem( writer );
108 xmlFreeTextWriter( writer );
111 if ( xmlSaveFileEnc( filename, doc,
"UTF-8" ) < 0 ) {
112 WARN(
"Failed to write '%s'!", filename );
Provides macros to work with dynamic arrays.
static ALWAYS_INLINE int array_size(const void *array)
Returns number of elements in the array.
void xmlw_setParams(xmlTextWriterPtr writer)
Sets up the standard xml write parameters.
Represents the hunk's target.
union UniHunkTarget_t::@042061014075140046260132141131357236050307054376 u
Represents a single hunk in the diff.
union UniHunk_t::@305371200110240060025050140203231327261371246122 u
const char * diff_hunkTag(UniHunkType_t t)
Gets the XML tag of a hunk.
const char * diff_hunkName(UniHunkType_t t)
Gets the human readable name of a hunk.