:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / lib / crtdll / stdio / putc.c
1 /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
2 #include <windows.h>
3 #include <crtdll/stdio.h>
4 #include <crtdll/wchar.h>
5 #include <crtdll/errno.h>
6 #include <crtdll/internal/file.h>
7
8 // putc can be a macro
9 #undef putc
10
11 int putc(int c, FILE *fp)
12 {
13
14 // valid stream macro should check that fp 
15 // is dword aligned
16         if (!__validfp (fp)) {
17                 __set_errno(EINVAL);
18                 return -1;
19         }
20 // check for write access on fp
21
22         if ( !OPEN4WRITING(fp)  ) {
23                 __set_errno(EINVAL);
24                 return -1;
25         }
26         
27         fp->_flag |= _IODIRTY;
28         if (fp->_cnt > 0 ) {
29                 fp->_cnt--;
30                 *(fp)->_ptr++ = (unsigned char)c;
31                 return (int)(unsigned char)c; 
32         }
33         else {
34                 return _flsbuf((unsigned char)c,fp);
35         }
36         return EOF;
37 }
38
39 wint_t putwc(wchar_t c, FILE *fp)
40 {
41         // might check on multi bytes if text mode
42  
43         if (fp->_cnt > 0 ) {
44                 fp->_cnt-= sizeof(wchar_t);
45                 *((wchar_t *)(fp->_ptr))++  = c;
46                 return (wint_t)c;
47         }
48         else
49                 return  _flswbuf(c,fp);
50
51         return -1;
52
53
54 }