:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / lib / msvcrt / stdio / getc.c
1 #include <windows.h>
2 #include <msvcrt/stdio.h>
3 #include <msvcrt/wchar.h>
4 #include <msvcrt/errno.h>
5 #include <msvcrt/internal/file.h>
6
7 //getc can be a macro
8 #undef getc
9
10 int getc(FILE *fp)
11 {
12         int c = -1;
13 // check for invalid stream
14
15         if ( !__validfp (fp) ) {
16                 __set_errno(EINVAL);
17                 return EOF;
18         }
19 // check for read access on stream
20
21         if ( !OPEN4READING(fp) ) {
22                 __set_errno(EINVAL);
23                 return -1;
24         }
25
26         if(fp->_cnt > 0) {
27                 fp->_cnt--;
28                 c =  (int)*fp->_ptr++;
29         } 
30         else {
31                 c =  _filbuf(fp);
32         }
33         return c;
34 }
35
36 wint_t getwc(FILE *fp)
37 {
38   int c = -1;
39
40   // check for invalid stream
41   if (!__validfp(fp))
42     {
43       __set_errno(EINVAL);
44       return EOF;
45     }
46
47   // check for read access on stream
48   if (!OPEN4READING(fp))
49     {
50       __set_errno(EINVAL);
51       return -1;
52     }
53
54   // might check on multi bytes if text mode
55
56   if (fp->_cnt > 0)
57     {
58       fp->_cnt -= sizeof(wchar_t);
59       c = (wint_t )*((wchar_t *)(fp->_ptr))++;
60     }
61   else
62     {
63       c = _filwbuf(fp);
64     }
65   return c;
66 }
67
68
69
70