~mdw
/
disorder
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
update control buttons when disconnection detected
[disorder]
/
server
/
normalize.c
diff --git
a/server/normalize.c
b/server/normalize.c
index
7e5fbe8
..
ddbd725
100644
(file)
--- a/
server/normalize.c
+++ b/
server/normalize.c
@@
-47,26
+47,27
@@
* @param n Number of bytes to copy
*/
static void copy(int infd, int outfd, size_t n) {
* @param n Number of bytes to copy
*/
static void copy(int infd, int outfd, size_t n) {
- char buffer[4096]
, *ptr
;
-
int r, w
;
+ char buffer[4096];
+
ssize_t written
;
while(n > 0) {
while(n > 0) {
- r = read(infd, buffer, sizeof buffer);
- if(r < 0) {
+ const ssize_t readden = read(infd, buffer,
+ n > sizeof buffer ? sizeof buffer : n);
+ if(readden < 0) {
if(errno == EINTR)
continue;
else
fatal(errno, "read error");
}
if(errno == EINTR)
continue;
else
fatal(errno, "read error");
}
- if(r == 0)
+ if(r
eadden
== 0)
fatal(0, "unexpected EOF");
fatal(0, "unexpected EOF");
- n -= r;
-
ptr = buffer
;
- while(
r > 0
) {
-
w = write(outfd, ptr, r - (ptr - buffer)
);
+ n -= r
eadden
;
+
written = 0
;
+ while(
written < readden
) {
+
const ssize_t w = write(outfd, buffer + written, readden - written
);
if(w < 0)
fatal(errno, "write error");
if(w < 0)
fatal(errno, "write error");
-
ptr
+= w;
+
written
+= w;
}
}
}
}
}
}