mxml-set.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include "config.h"
00035 #include "mxml.h"
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 int
00047 mxmlSetCustom(
00048 mxml_node_t *node,
00049 void *data,
00050 mxml_custom_destroy_cb_t destroy)
00051 {
00052
00053
00054
00055
00056 if (!node || node->type != MXML_CUSTOM)
00057 return (-1);
00058
00059
00060
00061
00062
00063 if (node->value.custom.data && node->value.custom.destroy)
00064 (*(node->value.custom.destroy))(node->value.custom.data);
00065
00066 node->value.custom.data = data;
00067 node->value.custom.destroy = destroy;
00068
00069 return (0);
00070 }
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081 int
00082 mxmlSetCDATA(mxml_node_t *node,
00083 const char *data)
00084 {
00085
00086
00087
00088
00089 if (!node || node->type != MXML_ELEMENT || !data ||
00090 strncmp(node->value.element.name, "![CDATA[", 8))
00091 return (-1);
00092
00093
00094
00095
00096
00097 if (node->value.element.name)
00098 free(node->value.element.name);
00099
00100 node->value.element.name = _mxml_strdupf("![CDATA[%s]]", data);
00101
00102 return (0);
00103 }
00104
00105
00106
00107
00108
00109
00110
00111
00112 int
00113 mxmlSetElement(mxml_node_t *node,
00114 const char *name)
00115 {
00116
00117
00118
00119
00120 if (!node || node->type != MXML_ELEMENT || !name)
00121 return (-1);
00122
00123
00124
00125
00126
00127 if (node->value.element.name)
00128 free(node->value.element.name);
00129
00130 node->value.element.name = strdup(name);
00131
00132 return (0);
00133 }
00134
00135
00136
00137
00138
00139
00140
00141
00142 int
00143 mxmlSetInteger(mxml_node_t *node,
00144 int integer)
00145 {
00146
00147
00148
00149
00150 if (!node || node->type != MXML_INTEGER)
00151 return (-1);
00152
00153
00154
00155
00156
00157 node->value.integer = integer;
00158
00159 return (0);
00160 }
00161
00162
00163
00164
00165
00166
00167
00168
00169 int
00170 mxmlSetOpaque(mxml_node_t *node,
00171 const char *opaque)
00172 {
00173
00174
00175
00176
00177 if (!node || node->type != MXML_OPAQUE || !opaque)
00178 return (-1);
00179
00180
00181
00182
00183
00184 if (node->value.opaque)
00185 free(node->value.opaque);
00186
00187 node->value.opaque = strdup(opaque);
00188
00189 return (0);
00190 }
00191
00192
00193
00194
00195
00196
00197
00198
00199 int
00200 mxmlSetReal(mxml_node_t *node,
00201 double real)
00202 {
00203
00204
00205
00206
00207 if (!node || node->type != MXML_REAL)
00208 return (-1);
00209
00210
00211
00212
00213
00214 node->value.real = real;
00215
00216 return (0);
00217 }
00218
00219
00220
00221
00222
00223
00224
00225
00226 int
00227 mxmlSetText(mxml_node_t *node,
00228 int whitespace,
00229 const char *string)
00230 {
00231
00232
00233
00234
00235 if (!node || node->type != MXML_TEXT || !string)
00236 return (-1);
00237
00238
00239
00240
00241
00242 if (node->value.text.string)
00243 free(node->value.text.string);
00244
00245 node->value.text.whitespace = whitespace;
00246 node->value.text.string = strdup(string);
00247
00248 return (0);
00249 }
00250
00251
00252
00253
00254
00255
00256
00257
00258 int
00259 mxmlSetTextf(mxml_node_t *node,
00260 int whitespace,
00261 const char *format,
00262 ...)
00263 {
00264 va_list ap;
00265
00266
00267
00268
00269
00270
00271 if (!node || node->type != MXML_TEXT || !format)
00272 return (-1);
00273
00274
00275
00276
00277
00278 if (node->value.text.string)
00279 free(node->value.text.string);
00280
00281 va_start(ap, format);
00282
00283 node->value.text.whitespace = whitespace;
00284 node->value.text.string = _mxml_strdupf(format, ap);
00285
00286 va_end(ap);
00287
00288 return (0);
00289 }