00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "defs.h"
00022
00023
00024
00025
00026
00027
00028
00029 ssize_t writeall(int fd, const void *buf, size_t nbyte)
00030 {
00031 ssize_t nwritten = 0, n;
00032
00033 do {
00034 if ((n = write(fd, &((const char *)buf)[nwritten],
00035 nbyte - nwritten)) == -1) {
00036 if (errno == EINTR)
00037 continue;
00038 else
00039 return -1;
00040 }
00041 nwritten += n;
00042 } while (nwritten < nbyte);
00043 return nwritten;
00044 }
00045
00046 ssize_t readall(int fd, void *buf, size_t nbyte)
00047 {
00048 ssize_t nread = 0, n;
00049
00050 do {
00051 if ((n = read(fd, &((char *)buf)[nread], nbyte - nread)) == -1) {
00052 if (errno == EINTR)
00053 continue;
00054 else
00055 return -1;
00056 }
00057 if (n == 0)
00058 return nread;
00059 nread += n;
00060 } while (nread < nbyte);
00061 return nread;
00062 }
00063