Subversion Repositories Kolibri OS

Rev

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
}