"Daniel P. Berrange" <berrange(a)redhat.com> wrote:
...
+int virStoragePoolObjSaveDef(virConnectPtr conn,
+ virStorageDriverStatePtr driver,
+ virStoragePoolObjPtr pool,
+ virStoragePoolDefPtr def) {
+ char *xml;
+ int fd = -1, ret = -1;
+ int towrite;
slightly better to use ssize_t.
see below.
...
+ if ((fd = open(pool->configFile,
+ O_WRONLY | O_CREAT | O_TRUNC,
+ S_IRUSR | S_IWUSR )) < 0) {
+ virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ "cannot create config file %s: %s",
+ pool->configFile, strerror(errno));
+ goto cleanup;
+ }
+
+ towrite = strlen(xml);
Here, you'd expect towrite to be of type size_t.
But in comparing with write's return value, you want ssize_t.
No big deal in any case, because we won't be generating 2^31-byte-long
XML strings.
+ if (write(fd, xml, towrite) != towrite) {
write should always be used in a loop,
since it can succeed and write less than requested.
Here, it's fine to use fopen/fwrite/fclose instead.
+ virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ "cannot write config file %s: %s",
+ pool->configFile, strerror(errno));