equal
deleted
inserted
replaced
118 int tn = 0; |
118 int tn = 0; |
119 |
119 |
120 for (;;) { |
120 for (;;) { |
121 int n = read(fd, buf, sizeof(buf)); |
121 int n = read(fd, buf, sizeof(buf)); |
122 tn += n; |
122 tn += n; |
123 if ((n < 0) && (errno != EAGAIN)) |
123 if ((n < 0) && (errno != EAGAIN && errno != EWOULDBLOCK)) |
124 JNU_ThrowIOExceptionWithLastError(env, "Drain"); |
124 JNU_ThrowIOExceptionWithLastError(env, "Drain"); |
125 if (n == (int)sizeof(buf)) |
125 if (n == (int)sizeof(buf)) |
126 continue; |
126 continue; |
127 return (tn > 0) ? JNI_TRUE : JNI_FALSE; |
127 return (tn > 0) ? JNI_TRUE : JNI_FALSE; |
128 } |
128 } |
134 int res; |
134 int res; |
135 char buf[1]; |
135 char buf[1]; |
136 |
136 |
137 res = read(fd, buf, 1); |
137 res = read(fd, buf, 1); |
138 if (res < 0) { |
138 if (res < 0) { |
139 if (errno == EAGAIN) { |
139 if (errno == EAGAIN || errno == EWOULDBLOCK) { |
140 res = 0; |
140 res = 0; |
141 } else if (errno == EINTR) { |
141 } else if (errno == EINTR) { |
142 return IOS_INTERRUPTED; |
142 return IOS_INTERRUPTED; |
143 } else { |
143 } else { |
144 JNU_ThrowIOExceptionWithLastError(env, "read"); |
144 JNU_ThrowIOExceptionWithLastError(env, "read"); |
185 return IOS_EOF; /* EOF is -1 in javaland */ |
185 return IOS_EOF; /* EOF is -1 in javaland */ |
186 } else { |
186 } else { |
187 return 0; |
187 return 0; |
188 } |
188 } |
189 } |
189 } |
190 else if (errno == EAGAIN) |
190 else if (errno == EAGAIN || errno == EWOULDBLOCK) |
191 return IOS_UNAVAILABLE; |
191 return IOS_UNAVAILABLE; |
192 else if (errno == EINTR) |
192 else if (errno == EINTR) |
193 return IOS_INTERRUPTED; |
193 return IOS_INTERRUPTED; |
194 else { |
194 else { |
195 const char *msg = reading ? "Read failed" : "Write failed"; |
195 const char *msg = reading ? "Read failed" : "Write failed"; |
210 return IOS_EOF; /* EOF is -1 in javaland */ |
210 return IOS_EOF; /* EOF is -1 in javaland */ |
211 } else { |
211 } else { |
212 return 0; |
212 return 0; |
213 } |
213 } |
214 } |
214 } |
215 else if (errno == EAGAIN) |
215 else if (errno == EAGAIN || errno == EWOULDBLOCK) |
216 return IOS_UNAVAILABLE; |
216 return IOS_UNAVAILABLE; |
217 else if (errno == EINTR) |
217 else if (errno == EINTR) |
218 return IOS_INTERRUPTED; |
218 return IOS_INTERRUPTED; |
219 else { |
219 else { |
220 const char *msg = reading ? "Read failed" : "Write failed"; |
220 const char *msg = reading ? "Read failed" : "Write failed"; |