[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