or other application using the libvirt API.\n\
-->\n\n";
- if (fd < 0 || !name || !cmd)
+ if (fd < 0 || !name || !cmd) {
+ errno = EINVAL;
return -1;
+ }
len = strlen(prologue);
if (safewrite(fd, prologue, len) != len)
#include <stdarg.h>
#include <limits.h>
#include <math.h> /* for isnan() */
+#include <sys/stat.h>
#include "virterror_internal.h"
#include "xml.h"
#include "buf.h"
#include "util.h"
#include "memory.h"
+#include "virfile.h"
#define VIR_FROM_THIS VIR_FROM_XML
}
goto cleanup;
}
+
+
+struct virXMLRewritFileData {
+ const char *warnName;
+ const char *warnCommand;
+ const char *xml;
+};
+
+static int
+virXMLRewriteFile(int fd, void *opaque)
+{
+ struct virXMLRewritFileData *data = opaque;
+
+ if (data->warnName && data->warnCommand) {
+ if (virEmitXMLWarning(fd, data->warnName, data->warnCommand) < 0)
+ return -1;
+ }
+
+ if (safewrite(fd, data->xml, strlen(data->xml)) < 0)
+ return -1;
+
+ return 0;
+}
+
+int
+virXMLSaveFile(const char *path,
+ const char *warnName,
+ const char *warnCommand,
+ const char *xml)
+{
+ struct virXMLRewritFileData data = { warnName, warnCommand, xml };
+
+ return virFileRewrite(path, S_IRUSR | S_IWUSR, virXMLRewriteFile, &data);
+}
# define virXMLParseFileCtxt(filename, pctxt) \
virXMLParseHelper(VIR_FROM_THIS, filename, NULL, NULL, pctxt)
+int virXMLSaveFile(const char *path,
+ const char *warnName,
+ const char *warnCommand,
+ const char *xml);
+
#endif /* __VIR_XML_H__ */