ae9243a40aff812269e768e5a1c690f2c8c2faf5
[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.1 1997/09/16 15:36:32 stanleyg 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 #ifdef _WIN32
27 #ifndef DLLAPI
28 #define DLLAPI __declspec(dllimport)
29 #endif
30 #else
31 #define DLLAPI
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 int        FCGI_fileno(FCGI_FILE *fp);
122 DLLAPI FCGI_FILE *FCGI_fdopen(int fd, const char *mode);
123 DLLAPI FCGI_FILE *FCGI_popen(const char *cmd, const char *type);
124 DLLAPI int        FCGI_pclose(FCGI_FILE *);
125
126 /*
127  * The remaining definitions are for application programs,
128  * not for fcgi_stdio.c
129  */
130
131 #ifndef NO_FCGI_DEFINES
132
133 /*
134  * Replace standard types, variables, and functions with FastCGI wrappers.
135  * Use undef in case a macro is already defined.
136  */
137
138 #undef  FILE
139 #define FILE     FCGI_FILE
140
141 #undef  stdin
142 #define stdin    FCGI_stdin
143 #undef  stdout
144 #define stdout   FCGI_stdout
145 #undef  stderr
146 #define stderr   FCGI_stderr
147
148 #undef  perror
149 #define perror   FCGI_perror
150
151 #undef  fopen
152 #define fopen    FCGI_fopen
153 #undef  fclose
154 #define fclose   FCGI_fclose
155 #undef  fflush
156 #define fflush   FCGI_fflush
157 #undef  freopen
158 #define freopen  FCGI_freopen
159
160 #undef  setvbuf
161 #define setvbuf  FCGI_setvbuf
162 #undef  setbuf
163 #define setbuf   FCGI_setbuf
164
165 #undef  fseek
166 #define fseek    FCGI_fseek
167 #undef  ftell
168 #define ftell    FCGI_ftell
169 #undef  rewind
170 #define rewind   FCGI_rewind
171 #undef  fgetpos
172 #define fgetpos  FCGI_fgetpos
173 #undef  fsetpos
174 #define fsetpos  FCGI_fsetpos
175
176 #undef  fgetc
177 #define fgetc    FCGI_fgetc
178 #undef  getc
179 #define getc     FCGI_fgetc
180 #undef  getchar
181 #define getchar  FCGI_getchar
182 #undef  ungetc
183 #define ungetc   FCGI_ungetc
184
185 #undef  fgets
186 #define fgets    FCGI_fgets
187 #undef  gets
188 #define gets     FCGI_gets
189
190 #undef  fputc
191 #define fputc    FCGI_fputc
192 #undef  putc
193 #define putc     FCGI_fputc
194 #undef  putchar
195 #define putchar  FCGI_putchar
196
197 #undef  fputs
198 #define fputs    FCGI_fputs
199 #undef  puts
200 #define puts     FCGI_puts
201
202 #undef  fprintf
203 #define fprintf  FCGI_fprintf
204 #undef  printf
205 #define printf   FCGI_printf
206
207 #undef  vfprintf
208 #define vfprintf FCGI_vfprintf
209 #undef  vprintf
210 #define vprintf  FCGI_vprintf
211
212 #undef  fread
213 #define fread    FCGI_fread
214 #undef  fwrite
215 #define fwrite   FCGI_fwrite
216
217 #undef  feof
218 #define feof     FCGI_feof
219 #undef  ferror
220 #define ferror   FCGI_ferror
221 #undef  clearerr
222 #define clearerr FCGI_clearerr
223
224 #undef  fileno
225 #define fileno   FCGI_fileno
226 #undef  fdopen
227 #define fdopen   FCGI_fdopen
228 #undef  popen
229 #define popen    FCGI_popen
230 #undef  pclose
231 #define pclose   FCGI_pclose
232
233 #endif /* NO_FCGI_DEFINES */
234
235 #if defined (__cplusplus) || defined (c_plusplus)
236 } /* terminate extern "C" { */
237 #endif
238
239 #endif /* _FCGI_STDIO */
240