Jim Paris <jim@xxxxxxxx> wrote: > Jim Meyering wrote: >> + /* Record failure if any of these fails, >> + and be careful always to close the stream. */ >> + if ((fseek(fp, 0, SEEK_END) < 0) >> + + (fprintf(fp, "\n#UUID: %s\n", uuidstr) < 0); >> + + (fclose(fp) == EOF)) >> + ret = -1; > > I don't think you want to fprintf() if the fseek() fails? Good catch. Thanks. I've fixed it this way. [Hmm.. normally I would have saved and restored errno around the unchecked fclose call, but I see that the sole caller of openvzSetUUID always ignores this function's return value. Sigh... ] diff --git a/src/openvz_conf.c b/src/openvz_conf.c index a274223..f0f579a 100644 --- a/src/openvz_conf.c +++ b/src/openvz_conf.c @@ -680,7 +680,6 @@ openvzSetUUID(int vpsid) char uuidstr[VIR_UUID_STRING_BUFLEN]; unsigned char uuid[VIR_UUID_BUFLEN]; char *conf_dir; - int fd, ret; conf_dir = openvzLocateConfDir(); if (conf_dir == NULL) @@ -688,23 +687,27 @@ openvzSetUUID(int vpsid) sprintf(conf_file, "%s/%d.conf", conf_dir, vpsid); free(conf_dir); - fd = open(conf_file, O_RDWR); - if(fd == -1) + if (openvzGetVPSUUID(vpsid, uuidstr)) return -1; - ret = openvzGetVPSUUID(vpsid, uuidstr); - if(ret == -1) - return -1; + if (uuidstr[0] == 0) { + FILE *fp = fopen(conf_file, "a"); + if (fp == NULL) + return -1; - if(uuidstr[0] == 0) { virUUIDGenerate(uuid); virUUIDFormat(uuid, uuidstr); - lseek(fd, 0, SEEK_END); - write(fd, "\n#UUID: ", 8); - write(fd, uuidstr, strlen(uuidstr)); - write(fd, "\n", 1); - close(fd); + /* Record failure if fseek, fprintf or fclose fails, + and be careful always to close the stream. */ + if (fseek(fp, 0, SEEK_END) < 0) { + fclose(fp); + return -1; + } + + if ((fprintf(fp, "\n#UUID: %s\n", uuidstr) < 0) + + (fclose(fp) == EOF)) + return -1; } return 0; -- 1.5.4.2.134.g82883 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list