Subversion Repositories Kolibri OS

Rev

Rev 8793 | Rev 9165 | Go to most recent revision | 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
 
8705 turbocat 27
	else{
8730 turbocat 28
		if(stream->mode & _FILEMODE_R){
29
			if(!stream->__ungetc_emu_buff){
30
				((char*) ptr)[0]=(char)stream->__ungetc_emu_buff;
31
				//debug_printf("Ungetc: %x\n", ((char*) ptr)[0]);
32
			}
8705 turbocat 33
			unsigned status = _ksys_file_read_file(stream->name, stream->position, bytes_count, ptr , &bytes_read);
9156 turbocat 34
			if (status != KSYS_FS_ERR_SUCCESS) {
35
				if(status == KSYS_FS_ERR_EOF){
36
					stream->eof=1;
37
				}else{
38
					errno = EIO;
39
					stream->error = errno;
40
					return 0;
41
				}
8705 turbocat 42
			}
9156 turbocat 43
			stream->position+=bytes_read;
8687 turbocat 44
		}
45
	}
9156 turbocat 46
	return bytes_read/size;
8687 turbocat 47
}