[Libvir] PATCH: 9/16: main internal storage driver
Jim Meyering
jim at meyering.net
Mon Feb 18 20:43:49 UTC 2008
"Daniel P. Berrange" <berrange at 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));
More information about the libvir-list
mailing list