The following commit has been merged in the master branch:
commit c1481ac891e430a8e24ebfba5bc9f54b5166b769
Author: Guillem Jover <[email protected]>
Date: Mon Mar 15 07:21:10 2010 +0100
libdpkg: Handle I/O errors in buffer_copy()
Make buffer_read and buffer_write behave as normal read/write functions,
return -1 on error, and let the caller handle the error.
Split the checks in buffer_copy for errors from buffer_read and
buffer_write to be able to give more accurate error messages.
diff --git a/lib/dpkg/buffer.c b/lib/dpkg/buffer.c
index da22d9f..ccd610c 100644
--- a/lib/dpkg/buffer.c
+++ b/lib/dpkg/buffer.c
@@ -110,18 +110,15 @@ buffer_write(struct buffer_data *data, const void *buf,
off_t length,
break;
case BUFFER_WRITE_FD:
ret = write(data->arg.i, buf, length);
- if (ret < 0 && errno != EINTR)
- ohshite(_("failed in buffer_write(fd) (%i, ret=%li):
%s"),
- data->arg.i, (long)ret, desc);
break;
case BUFFER_WRITE_NULL:
break;
case BUFFER_WRITE_STREAM:
ret = fwrite(buf, 1, length, (FILE *)data->arg.ptr);
if (feof((FILE *)data->arg.ptr))
- ohshite(_("eof in buffer_write(stream): %s"), desc);
- if(ferror((FILE *)data->arg.ptr))
- ohshite(_("error in buffer_write(stream): %s"), desc);
+ return -1;
+ if (ferror((FILE *)data->arg.ptr))
+ return -1;
break;
case BUFFER_WRITE_MD5:
MD5Update(&(((struct buffer_write_md5ctx
*)data->arg.ptr)->ctx), buf, length);
@@ -143,15 +140,13 @@ buffer_read(struct buffer_data *data, void *buf, off_t
length,
switch (data->type) {
case BUFFER_READ_FD:
ret = read(data->arg.i, buf, length);
- if(ret < 0 && errno != EINTR)
- ohshite(_("failed in buffer_read(fd): %s"), desc);
break;
case BUFFER_READ_STREAM:
ret = fread(buf, 1, length, (FILE *)data->arg.ptr);
if (feof((FILE *)data->arg.ptr))
return ret;
if (ferror((FILE *)data->arg.ptr))
- ohshite(_("error in buffer_read(stream): %s"), desc);
+ return -1;
break;
default:
internerr("unknown data type '%i' in buffer_read\n",
@@ -257,10 +252,12 @@ buffer_copy(struct buffer_data *read_data, struct
buffer_data *write_data,
}
}
- if (bytesread < 0 || byteswritten < 0)
- ohshite(_("failed in buffer_copy (%s)"), desc);
+ if (bytesread < 0)
+ ohshite(_("failed to read on buffer copy for %s"), desc);
+ if (byteswritten < 0)
+ ohshite(_("failed in write on buffer copy for %s"), desc);
if (limit > 0)
- ohshit(_("short read in buffer_copy (%s)"), desc);
+ ohshit(_("short read on buffer copy for %s"), desc);
free(buf);
--
dpkg's main repository
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]