On Fri, Nov 06, 2009 at 04:28:05AM +0100, Matthias Bolte wrote: > - Make reading ID from file working for IDs > 127 > - Fix inverse error check for writing ID to file > - Use feof() to distinguish EOF from real error of fread() > - Don't interpret libssh2 error codes as number of bytes > --- > src/phyp/phyp_driver.c | 19 ++++++++++++------- > 1 files changed, 12 insertions(+), 7 deletions(-) > > diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c > index 1529c24..43430a9 100644 > --- a/src/phyp/phyp_driver.c > +++ b/src/phyp/phyp_driver.c > @@ -1735,7 +1735,7 @@ phypUUIDTable_ReadFile(virConnectPtr conn) > int fd = -1; > char local_file[] = "./uuid_table"; > int rc = 0; > - char buffer[1024]; > + int id; > > if ((fd = open(local_file, O_RDONLY)) == -1) { > VIR_WARN("%s", "Unable to write information to local file."); > @@ -1746,13 +1746,13 @@ phypUUIDTable_ReadFile(virConnectPtr conn) > if (VIR_ALLOC_N(uuid_table->lpars, uuid_table->nlpars) >= 0) { > for (i = 0; i < uuid_table->nlpars; i++) { > > - rc = read(fd, buffer, sizeof(int)); > + rc = read(fd, &id, sizeof(int)); > if (rc == sizeof(int)) { > if (VIR_ALLOC(uuid_table->lpars[i]) < 0) { > virReportOOMError(conn); > goto err; > } > - uuid_table->lpars[i]->id = (*buffer); > + uuid_table->lpars[i]->id = id; > } else { > VIR_WARN("%s", > "Unable to read from information to local file."); > @@ -1790,7 +1790,7 @@ phypUUIDTable_WriteFile(virConnectPtr conn) > > for (i = 0; i < uuid_table->nlpars; i++) { > if (safewrite(fd, &uuid_table->lpars[i]->id, > - sizeof(uuid_table->lpars[i]->id)) == > + sizeof(uuid_table->lpars[i]->id)) != > sizeof(uuid_table->lpars[i]->id)) { > VIR_ERROR("%s", "Unable to write information to local file."); > goto err; Oops I missed that one :-) > @@ -1944,8 +1944,13 @@ phypUUIDTable_Push(virConnectPtr conn) > do { > nread = fread(buffer, 1, sizeof(buffer), fd); > if (nread <= 0) { > - /* end of file */ > - break; > + if (feof(fd)) { > + /* end of file */ > + break; > + } else { > + VIR_ERROR("Failed to read from '%s'", local_file); > + goto err; > + } > } > ptr = buffer; > sent = 0; > @@ -1955,7 +1960,7 @@ phypUUIDTable_Push(virConnectPtr conn) > rc = libssh2_channel_write(channel, ptr, nread); > if (LIBSSH2_ERROR_EAGAIN == rc) { /* must loop around */ > continue; > - } else { > + } else if (rc > 0) { > /* rc indicates how many bytes were written this time */ > sent += rc; > } ACK ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list