| 808 | } |
| 809 | |
| 810 | UArray *IoFile_readUArrayOfLength_(IoFile *self, IoObject *locals, |
| 811 | IoMessage *m) { |
| 812 | size_t length = IoMessage_locals_sizetArgAt_(m, locals, 0); |
| 813 | UArray *ba = UArray_new(); |
| 814 | IoFile_assertOpen(self, locals, m); |
| 815 | if (IOSTATE->errorRaised) return IONIL(self); |
| 816 | |
| 817 | UArray_readNumberOfItems_fromCStream_(ba, length, DATA(self)->stream); |
| 818 | |
| 819 | if (ferror(DATA(self)->stream) != 0) { |
| 820 | clearerr(DATA(self)->stream); |
| 821 | UArray_free(ba); |
| 822 | IoState_error_(IOSTATE, m, "error reading file '%s'", |
| 823 | UTF8CSTRING(DATA(self)->path)); |
| 824 | } |
| 825 | |
| 826 | if (!UArray_size(ba)) { |
| 827 | UArray_free(ba); |
| 828 | return NULL; |
| 829 | } |
| 830 | |
| 831 | return ba; |
| 832 | } |
| 833 | |
| 834 | IO_METHOD(IoFile, readToBufferLength) { |
| 835 | /*doc File readToBufferLength(aBuffer, aNumber) |
no test coverage detected