de2af89bedb37973457c1179f32754f6835d4280
[catagits/fcgi2.git] / include / fcgi_stdio.h
1 /* 
2  * fcgi_stdio.h --
3  *
4  *      FastCGI-stdio compatibility package
5  *
6  *
7  * Copyright (c) 1996 Open Market, Inc.
8  *
9  * See the file "LICENSE.TERMS" for information on usage and redistribution
10  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
11  *
12  * $Id: fcgi_stdio.h,v 1.5 2001/06/22 13:21:15 robs Exp $
13  */
14
15 #ifndef _FCGI_STDIO
16 #define _FCGI_STDIO 1
17
18 #include <stdio.h>
19 #include <sys/types.h>
20 #include "fcgiapp.h"
21
22 #if defined (c_plusplus) || defined (__cplusplus)
23 extern "C" {
24 #endif
25
26 #ifndef DLLAPI
27 #ifdef _WIN32
28 #define DLLAPI __declspec(dllimport)
29 #else
30 #define DLLAPI
31 #endif
32 #endif
33
34 /*
35  * Wrapper type for FILE
36  */
37
38 typedef struct {
39     FILE *stdio_stream;
40     FCGX_Stream *fcgx_stream;
41 } FCGI_FILE;
42
43 /*
44  * The four new functions and two new macros
45  */
46
47 DLLAPI int FCGI_Accept(void);
48 DLLAPI void FCGI_Finish(void);
49 DLLAPI int FCGI_StartFilterData(void);
50 DLLAPI void FCGI_SetExitStatus(int status);
51
52 #define FCGI_ToFILE(fcgi_file) (fcgi_file->stdio_stream)
53 #define FCGI_ToFcgiStream(fcgi_file) (fcgi_file->fcgx_stream)
54
55 /*
56  * Wrapper stdin, stdout, and stderr variables, set up by FCGI_Accept()
57  */
58
59 DLLAPI extern   FCGI_FILE       _fcgi_sF[];
60 #define FCGI_stdin      (&_fcgi_sF[0])
61 #define FCGI_stdout     (&_fcgi_sF[1])
62 #define FCGI_stderr     (&_fcgi_sF[2])
63
64 /*
65  * Wrapper function prototypes, grouped according to sections
66  * of Harbison & Steele, "C: A Reference Manual," fourth edition,
67  * Prentice-Hall, 1995.
68  */
69
70 DLLAPI void FCGI_perror(const char *str);
71
72 DLLAPI FCGI_FILE *FCGI_fopen(const char *path, const char *mode);
73 DLLAPI int        FCGI_fclose(FCGI_FILE *fp);
74 DLLAPI int        FCGI_fflush(FCGI_FILE *fp);
75 DLLAPI FCGI_FILE *FCGI_freopen(const char *path, const char *mode, FCGI_FILE *fp);
76
77 DLLAPI int        FCGI_setvbuf(FCGI_FILE *fp, char *buf, int bufmode, size_t size);
78 DLLAPI void       FCGI_setbuf(FCGI_FILE *fp, char *buf);
79
80 DLLAPI int        FCGI_fseek(FCGI_FILE *fp, long offset, int whence);
81 DLLAPI int        FCGI_ftell(FCGI_FILE *fp);
82 DLLAPI void       FCGI_rewind(FCGI_FILE *fp);
83 #ifdef HAVE_FPOS
84 DLLAPI int        FCGI_fgetpos(FCGI_FILE *fp, fpos_t *pos);
85 DLLAPI int        FCGI_fsetpos(FCGI_FILE *fp, const fpos_t *pos);
86 #endif
87 DLLAPI int        FCGI_fgetc(FCGI_FILE *fp);
88 DLLAPI int        FCGI_getchar(void);
89 DLLAPI int        FCGI_ungetc(int c, FCGI_FILE *fp);
90
91 DLLAPI char      *FCGI_fgets(char *str, int size, FCGI_FILE *fp);
92 DLLAPI char      *FCGI_gets(char *str);
93
94 /*
95  * Not yet implemented
96  *
97  * int        FCGI_fscanf(FCGI_FILE *fp, const char *format, ...);
98  * int        FCGI_scanf(const char *format, ...);
99  *
100  */
101
102 DLLAPI int        FCGI_fputc(int c, FCGI_FILE *fp);
103 DLLAPI int        FCGI_putchar(int c);
104
105 DLLAPI int        FCGI_fputs(const char *str, FCGI_FILE *fp);
106 DLLAPI int        FCGI_puts(const char *str);
107
108 DLLAPI int        FCGI_fprintf(FCGI_FILE *fp, const char *format, ...);
109 DLLAPI int        FCGI_printf(const char *format, ...);
110
111 DLLAPI int        FCGI_vfprintf(FCGI_FILE *fp, const char *format, va_list ap);
112 DLLAPI int        FCGI_vprintf(const char *format, va_list ap);
113
114 DLLAPI size_t     FCGI_fread(void *ptr, size_t size, size_t nmemb, FCGI_FILE *fp);
115 DLLAPI size_t     FCGI_fwrite(void *ptr, size_t size, size_t nmemb, FCGI_FILE *fp);
116
117 DLLAPI int        FCGI_feof(FCGI_FILE *fp);
118 DLLAPI int        FCGI_ferror(FCGI_FILE *fp);
119 DLLAPI void       FCGI_clearerr(FCGI_FILE *fp);
120
121 DLLAPI FCGI_FILE *FCGI_tmpfile(void);
122
123 DLLAPI int        FCGI_fileno(FCGI_FILE *fp);
124 DLLAPI FCGI_FILE *FCGI_fdopen(int fd, const char *mode);
125 DLLAPI FCGI_FILE *FCGI_popen(const char *cmd, const char *type);
126 DLLAPI int        FCGI_pclose(FCGI_FILE *);
127
128 /*
129  * The remaining definitions are for application programs,
130  * not for fcgi_stdio.c
131  */
132
133 #ifndef NO_FCGI_DEFINES
134
135 /*
136  * Replace standard types, variables, and functions with FastCGI wrappers.
137  * Use undef in case a macro is already defined.
138  */
139
140 #undef  FILE
141 #define FILE     FCGI_FILE
142
143 #undef  stdin
144 #define stdin    FCGI_stdin
145 #undef  stdout
146 #define stdout   FCGI_stdout
147 #undef  stderr
148 #define stderr   FCGI_stderr
149
150 #undef  perror
151 #define perror   FCGI_perror
152
153 #undef  fopen
154 #define fopen    FCGI_fopen
155 #undef  fclose
156 #define fclose   FCGI_fclose
157 #undef  fflush
158 #define fflush   FCGI_fflush
159 #undef  freopen
160 #define freopen  FCGI_freopen
161
162 #undef  setvbuf
163 #define setvbuf  FCGI_setvbuf
164 #undef  setbuf
165 #define setbuf   FCGI_setbuf
166
167 #undef  fseek
168 #define fseek    FCGI_fseek
169 #undef  ftell
170 #define ftell    FCGI_ftell
171 #undef  rewind
172 #define rewind   FCGI_rewind
173 #undef  fgetpos
174 #define fgetpos  FCGI_fgetpos
175 #undef  fsetpos
176 #define fsetpos  FCGI_fsetpos
177
178 #undef  fgetc
179 #define fgetc    FCGI_fgetc
180 #undef  getc
181 #define getc     FCGI_fgetc
182 #undef  getchar
183 #define getchar  FCGI_getchar
184 #undef  ungetc
185 #define ungetc   FCGI_ungetc
186
187 #undef  fgets
188 #define fgets    FCGI_fgets
189 #undef  gets
190 #define gets     FCGI_gets
191
192 #undef  fputc
193 #define fputc    FCGI_fputc
194 #undef  putc
195 #define putc     FCGI_fputc
196 #undef  putchar
197 #define putchar  FCGI_putchar
198
199 #undef  fputs
200 #define fputs    FCGI_fputs
201 #undef  puts
202 #define puts     FCGI_puts
203
204 #undef  fprintf
205 #define fprintf  FCGI_fprintf
206 #undef  printf
207 #define printf   FCGI_printf
208
209 #undef  vfprintf
210 #define vfprintf FCGI_vfprintf
211 #undef  vprintf
212 #define vprintf  FCGI_vprintf
213
214 #undef  fread
215 #define fread    FCGI_fread
216 #undef  fwrite
217 #define fwrite   FCGI_fwrite
218
219 #undef  feof
220 #define feof     FCGI_feof
221 #undef  ferror
222 #define ferror   FCGI_ferror
223 #undef  clearerr
224 #define clearerr FCGI_clearerr
225
226 #undef  tmpfile
227 #define tmpfile  FCGI_tmpfile
228
229 #undef  fileno
230 #define fileno   FCGI_fileno
231 #undef  fdopen
232 #define fdopen   FCGI_fdopen
233 #undef  popen
234 #define popen    FCGI_popen
235 #undef  pclose
236 #define pclose   FCGI_pclose
237
238 #endif /* NO_FCGI_DEFINES */
239
240 #if defined (__cplusplus) || defined (c_plusplus)
241 } /* terminate extern "C" { */
242 #endif
243
244 #endif /* _FCGI_STDIO */
245