Bloody perror messes with errno; need to save errno.
This commit is contained in:
parent
d40fb3a2e1
commit
e410ad52ba
@ -25,6 +25,14 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
void perror_wrapper(char * msg)
|
||||||
|
{
|
||||||
|
int prev=errno;
|
||||||
|
perror(msg);
|
||||||
|
errno=prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int write_all(int fd, void *buf, int size)
|
int write_all(int fd, void *buf, int size)
|
||||||
{
|
{
|
||||||
int written = 0;
|
int written = 0;
|
||||||
@ -34,7 +42,7 @@ int write_all(int fd, void *buf, int size)
|
|||||||
if (ret == -1 && errno == EINTR)
|
if (ret == -1 && errno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
if (ret <= 0) {
|
if (ret <= 0) {
|
||||||
perror("write");
|
perror_wrapper("write");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
written += ret;
|
written += ret;
|
||||||
@ -57,7 +65,7 @@ int read_all(int fd, void *buf, int size)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
perror("read");
|
perror_wrapper("read");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
got_read += ret;
|
got_read += ret;
|
||||||
@ -77,11 +85,11 @@ int copy_fd_all(int fdout, int fdin)
|
|||||||
if (!ret)
|
if (!ret)
|
||||||
break;
|
break;
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
perror("read");
|
perror_wrapper("read");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!write_all(fdout, buf, ret)) {
|
if (!write_all(fdout, buf, ret)) {
|
||||||
perror("write");
|
perror_wrapper("write");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user