@@ -20,7 +20,7 @@ namespace LIBC_NAMESPACE_DECL {
2020
2121FileIOResult File::write_unlocked (const void *data, size_t len) {
2222 if (!write_allowed ()) {
23- err = true ;
23+ error_code = EBADF ;
2424 return {0 , EBADF};
2525 }
2626
@@ -45,16 +45,16 @@ FileIOResult File::write_unlocked_nbf(const uint8_t *data, size_t len) {
4545 FileIOResult write_result = platform_write (this , buf, write_size);
4646 pos = 0 ; // Buffer is now empty so reset pos to the beginning.
4747 // If less bytes were written than expected, then an error occurred.
48- if (write_result < write_size) {
49- err = true ;
48+ if (write_result. has_error () || write_result < write_size) {
49+ error_code = write_result. has_error () ? write_result. error : EIO ;
5050 // No bytes from data were written, so return 0.
51- return {0 , write_result. error };
51+ return {0 , error_code };
5252 }
5353 }
5454
5555 FileIOResult write_result = platform_write (this , data, len);
56- if (write_result < len)
57- err = true ;
56+ if (write_result. has_error () || write_result < len)
57+ error_code = write_result. has_error () ? write_result. error : EIO ;
5858 return write_result;
5959}
6060
@@ -106,9 +106,9 @@ FileIOResult File::write_unlocked_fbf(const uint8_t *data, size_t len) {
106106 // If less bytes were written than expected, then an error occurred. Return
107107 // the number of bytes that have been written from |data|.
108108 if (buf_result.has_error () || bytes_written < write_size) {
109- err = true ;
109+ error_code = buf_result. has_error () ? buf_result. error : EIO ;
110110 return {bytes_written <= init_pos ? 0 : bytes_written - init_pos,
111- buf_result. error };
111+ error_code };
112112 }
113113
114114 // The second piece is handled basically the same as the first, although we
@@ -128,8 +128,8 @@ FileIOResult File::write_unlocked_fbf(const uint8_t *data, size_t len) {
128128 // If less bytes were written than expected, then an error occurred. Return
129129 // the number of bytes that have been written from |data|.
130130 if (result.has_error () || bytes_written < remainder.size ()) {
131- err = true ;
132- return {primary.size () + bytes_written, result. error };
131+ error_code = result. has_error () ? result. error : EIO ;
132+ return {primary.size () + bytes_written, error_code };
133133 }
134134 }
135135
@@ -166,26 +166,28 @@ FileIOResult File::write_unlocked_lbf(const uint8_t *data, size_t len) {
166166
167167 size_t written = 0 ;
168168
169- written = write_unlocked_nbf (primary.data (), primary.size ());
170- if (written < primary.size ()) {
171- err = true ;
172- return written;
169+ auto write_result = write_unlocked_nbf (primary.data (), primary.size ());
170+ written += write_result;
171+ if (write_result.has_error () || written < primary.size ()) {
172+ error_code = write_result.has_error () ? write_result.error : EIO;
173+ return {written, error_code};
173174 }
174175
175176 flush_unlocked ();
176177
177- written += write_unlocked_fbf (remainder.data (), remainder.size ());
178- if (written < len) {
179- err = true ;
180- return written;
178+ write_result = write_unlocked_fbf (remainder.data (), remainder.size ());
179+ written += write_result;;
180+ if (write_result.has_error () || written < len) {
181+ error_code = write_result.has_error () ? write_result.error : EIO;
182+ return {written, error_code};
181183 }
182184
183185 return len;
184186}
185187
186188FileIOResult File::read_unlocked (void *data, size_t len) {
187189 if (!read_allowed ()) {
188- err = true ;
190+ error_code = EBADF ;
189191 return {0 , EBADF};
190192 }
191193
@@ -244,7 +246,7 @@ FileIOResult File::read_unlocked_fbf(uint8_t *data, size_t len) {
244246 if (!result.has_error ())
245247 eof = true ;
246248 else
247- err = true ;
249+ error_code = result. error ;
248250 return {available_data + fetched_size, result.error };
249251 }
250252 return len;
@@ -262,7 +264,7 @@ FileIOResult File::read_unlocked_fbf(uint8_t *data, size_t len) {
262264 if (!result.has_error ())
263265 eof = true ;
264266 else
265- err = true ;
267+ error_code = result. error ;
266268 }
267269 return {transfer_size + available_data, result.error };
268270}
@@ -282,7 +284,7 @@ FileIOResult File::read_unlocked_nbf(uint8_t *data, size_t len) {
282284 if (!result.has_error ())
283285 eof = true ;
284286 else
285- err = true ;
287+ error_code = result. error ;
286288 }
287289 return {result + available_data, result.error };
288290}
@@ -321,7 +323,7 @@ int File::ungetc_unlocked(int c) {
321323 }
322324
323325 eof = false ; // There is atleast one character that can be read now.
324- err = false ; // This operation was a success.
326+ error_code = 0 ; // This operation was a success.
325327 return c;
326328}
327329
@@ -331,8 +333,8 @@ ErrorOr<int> File::seek(off_t offset, int whence) {
331333
332334 FileIOResult buf_result = platform_write (this , buf, pos);
333335 if (buf_result.has_error () || buf_result.value < pos) {
334- err = true ;
335- return Error (buf_result. error );
336+ error_code = buf_result. has_error () ? buf_result. error : EIO ;
337+ return Error (error_code );
336338 }
337339 } else if (prev_op == FileOp::READ && whence == SEEK_CUR) {
338340 // More data could have been read out from the platform file than was
@@ -369,8 +371,8 @@ int File::flush_unlocked() {
369371 if (prev_op == FileOp::WRITE && pos > 0 ) {
370372 FileIOResult buf_result = platform_write (this , buf, pos);
371373 if (buf_result.has_error () || buf_result.value < pos) {
372- err = true ;
373- return buf_result. error ;
374+ error_code = buf_result. has_error () ? buf_result. error : EIO ;
375+ return error_code ;
374376 }
375377 pos = 0 ;
376378 }
0 commit comments