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(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/