diff --git a/programs/develop/ktcc/trunk/libc.obj/source/stdio/fread.c b/programs/develop/ktcc/trunk/libc.obj/source/stdio/fread.c index 35eff033fb..6010ad123e 100644 --- a/programs/develop/ktcc/trunk/libc.obj/source/stdio/fread.c +++ b/programs/develop/ktcc/trunk/libc.obj/source/stdio/fread.c @@ -12,6 +12,12 @@ size_t fread(void *restrict ptr, size_t size, size_t nmemb, FILE *restrict strea return 0; } + if(size<=0 || nmemb<=0){ + errno = EINVAL; + stream->error=errno; + return 0; + } + if(stream==stdin){ con_init(); con_gets((char*)ptr, bytes_count+1); @@ -25,14 +31,17 @@ size_t fread(void *restrict ptr, size_t size, size_t nmemb, FILE *restrict strea //debug_printf("Ungetc: %x\n", ((char*) ptr)[0]); } unsigned status = _ksys_file_read_file(stream->name, stream->position, bytes_count, ptr , &bytes_read); - if (status) { - errno = EIO; - stream->error = errno; - return 0; - }else { - stream->position+=bytes_read; + if (status != KSYS_FS_ERR_SUCCESS) { + if(status == KSYS_FS_ERR_EOF){ + stream->eof=1; + }else{ + errno = EIO; + stream->error = errno; + return 0; + } } + stream->position+=bytes_read; } } - return bytes_read; + return bytes_read/size; } diff --git a/programs/develop/ktcc/trunk/libc.obj/source/stdio/fwrite.c b/programs/develop/ktcc/trunk/libc.obj/source/stdio/fwrite.c index 0e807aacda..c2e095223e 100644 --- a/programs/develop/ktcc/trunk/libc.obj/source/stdio/fwrite.c +++ b/programs/develop/ktcc/trunk/libc.obj/source/stdio/fwrite.c @@ -12,28 +12,34 @@ size_t fwrite(const void *restrict ptr, size_t size, size_t nmemb, FILE *restric return 0; } + if(size<=0 || nmemb<=0){ + errno = EINVAL; + stream->error=errno; + return 0; + } + if(stream==stdout){ con_init(); con_write_string((char*)ptr, bytes_count); return nmemb; } - else if(stream==stderr){ + + if(stream==stderr){ for (size_t i = 0; i < bytes_count; i++) { char c = *(char*)(ptr+i); _ksys_debug_putc(c); } + return nmemb; } - else{ - if(stream->mode != _FILEMODE_R){ - unsigned status = _ksys_file_write_file(stream->name, stream->position, bytes_count, ptr, &bytes_written); - if (status != KSYS_FS_ERR_SUCCESS) { - errno = EIO; - stream->error = errno; - return 0; - }else { - stream->position+=bytes_written; - } + + if(stream->mode != _FILEMODE_R){ + unsigned status = _ksys_file_write_file(stream->name, stream->position, bytes_count, ptr, &bytes_written); + if (status != KSYS_FS_ERR_SUCCESS) { + errno = EIO; + stream->error = errno; + return 0; } + stream->position+=bytes_written; } - return bytes_written; -} \ No newline at end of file + return bytes_written/size; +}