Rev 9165 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
8687 | turbocat | 1 | #include |
8705 | turbocat | 2 | #include |
3 | #include "conio.h" |
||
4 | #include "sys/ksys.h" |
||
8687 | turbocat | 5 | |
6 | size_t fread(void *restrict ptr, size_t size, size_t nmemb, FILE *restrict stream) { |
||
7 | unsigned bytes_read = 0; |
||
8 | unsigned bytes_count = size * nmemb; |
||
8705 | turbocat | 9 | |
10 | if(!stream){ |
||
8730 | turbocat | 11 | errno = EBADF; |
8705 | turbocat | 12 | return 0; |
13 | } |
||
14 | |||
9156 | turbocat | 15 | if(size<=0 || nmemb<=0){ |
16 | errno = EINVAL; |
||
17 | stream->error=errno; |
||
18 | return 0; |
||
19 | } |
||
20 | |||
8705 | turbocat | 21 | if(stream==stdin){ |
8744 | turbocat | 22 | con_init(); |
23 | con_gets((char*)ptr, bytes_count+1); |
||
8705 | turbocat | 24 | return nmemb; |
25 | } |
||
8687 | turbocat | 26 | |
9230 | turbocat | 27 | if(stream->mode != _FILEMODE_W && stream->mode != _FILEMODE_A){ |
9165 | turbocat | 28 | if(!stream->__ungetc_emu_buff){ |
29 | ((char*) ptr)[0]=(char)stream->__ungetc_emu_buff; |
||
30 | //debug_printf("Ungetc: %x\n", ((char*) ptr)[0]); |
||
31 | } |
||
32 | unsigned status = _ksys_file_read_file(stream->name, stream->position, bytes_count, ptr , &bytes_read); |
||
33 | if (status != KSYS_FS_ERR_SUCCESS) { |
||
34 | if(status == KSYS_FS_ERR_EOF){ |
||
35 | stream->eof=1; |
||
36 | }else{ |
||
37 | errno = EIO; |
||
38 | stream->error = errno; |
||
39 | return 0; |
||
8730 | turbocat | 40 | } |
8687 | turbocat | 41 | } |
9165 | turbocat | 42 | stream->position+=bytes_read; |
8687 | turbocat | 43 | } |
9156 | turbocat | 44 | return bytes_read/size; |
8687 | turbocat | 45 | }=0){ |