OSDN Git Service

xread/write can use full_read/write (smaller code)
authorDenis Vlasenko <vda.linux@googlemail.com>
Thu, 12 Oct 2006 22:44:13 +0000 (22:44 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Thu, 12 Oct 2006 22:44:13 +0000 (22:44 -0000)
libbb/full_read.c
libbb/full_write.c
libbb/xfuncs.c

index b5837d5..068d166 100644 (file)
@@ -24,7 +24,7 @@ ssize_t full_read(int fd, void *buf, size_t len)
 
        total = 0;
 
-       while (len > 0) {
+       while (len) {
                cc = safe_read(fd, buf, len);
 
                if (cc < 0)
index d812d04..563f4a8 100644 (file)
@@ -23,7 +23,7 @@ ssize_t full_write(int fd, const void *buf, size_t len)
 
        total = 0;
 
-       while (len > 0) {
+       while (len) {
                cc = safe_write(fd, buf, len);
 
                if (cc < 0)
index d22cd27..efc9194 100644 (file)
@@ -113,24 +113,20 @@ int xopen3(const char *pathname, int flags, int mode)
 // Die with an error message if we can't read the entire buffer.
 void xread(int fd, void *buf, size_t count)
 {
-       while (count) {
-               ssize_t size = safe_read(fd, buf, count);
-               if (size < 1)
+       if (count) {
+               ssize_t size = full_read(fd, buf, count);
+               if (size != count)
                        bb_error_msg_and_die("short read");
-               count -= size;
-               buf = ((char *) buf) + size;
        }
 }
 
 // Die with an error message if we can't write the entire buffer.
 void xwrite(int fd, void *buf, size_t count)
 {
-       while (count) {
-               ssize_t size = safe_write(fd, buf, count);
-               if (size < 1)
+       if (count) {
+               ssize_t size = full_write(fd, buf, count);
+               if (size != count)
                        bb_error_msg_and_die("short write");
-               count -= size;
-               buf = ((char *) buf) + size;
        }
 }