Fix buffered reads.
[catagits/fcgi2.git] / include / fcgi_stdio.h
CommitLineData
0198fd3c 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 *
e6368b61 12 * $Id: fcgi_stdio.h,v 1.5 2001/06/22 13:21:15 robs Exp $
0198fd3c 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)
23extern "C" {
24#endif
25
0198fd3c 26#ifndef DLLAPI
e6368b61 27#ifdef _WIN32
0198fd3c 28#define DLLAPI __declspec(dllimport)
0198fd3c 29#else
30#define DLLAPI
31#endif
e6368b61 32#endif
0198fd3c 33
34/*
35 * Wrapper type for FILE
36 */
37
38typedef 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
47DLLAPI int FCGI_Accept(void);
48DLLAPI void FCGI_Finish(void);
49DLLAPI int FCGI_StartFilterData(void);
50DLLAPI 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
59DLLAPI 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
70DLLAPI void FCGI_perror(const char *str);
71
72DLLAPI FCGI_FILE *FCGI_fopen(const char *path, const char *mode);
73DLLAPI int FCGI_fclose(FCGI_FILE *fp);
74DLLAPI int FCGI_fflush(FCGI_FILE *fp);
75DLLAPI FCGI_FILE *FCGI_freopen(const char *path, const char *mode, FCGI_FILE *fp);
76
77DLLAPI int FCGI_setvbuf(FCGI_FILE *fp, char *buf, int bufmode, size_t size);
78DLLAPI void FCGI_setbuf(FCGI_FILE *fp, char *buf);
79
80DLLAPI int FCGI_fseek(FCGI_FILE *fp, long offset, int whence);
81DLLAPI int FCGI_ftell(FCGI_FILE *fp);
82DLLAPI void FCGI_rewind(FCGI_FILE *fp);
83#ifdef HAVE_FPOS
84DLLAPI int FCGI_fgetpos(FCGI_FILE *fp, fpos_t *pos);
85DLLAPI int FCGI_fsetpos(FCGI_FILE *fp, const fpos_t *pos);
86#endif
87DLLAPI int FCGI_fgetc(FCGI_FILE *fp);
88DLLAPI int FCGI_getchar(void);
89DLLAPI int FCGI_ungetc(int c, FCGI_FILE *fp);
90
91DLLAPI char *FCGI_fgets(char *str, int size, FCGI_FILE *fp);
92DLLAPI 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
102DLLAPI int FCGI_fputc(int c, FCGI_FILE *fp);
103DLLAPI int FCGI_putchar(int c);
104
105DLLAPI int FCGI_fputs(const char *str, FCGI_FILE *fp);
106DLLAPI int FCGI_puts(const char *str);
107
108DLLAPI int FCGI_fprintf(FCGI_FILE *fp, const char *format, ...);
109DLLAPI int FCGI_printf(const char *format, ...);
110
111DLLAPI int FCGI_vfprintf(FCGI_FILE *fp, const char *format, va_list ap);
112DLLAPI int FCGI_vprintf(const char *format, va_list ap);
113
114DLLAPI size_t FCGI_fread(void *ptr, size_t size, size_t nmemb, FCGI_FILE *fp);
115DLLAPI size_t FCGI_fwrite(void *ptr, size_t size, size_t nmemb, FCGI_FILE *fp);
116
117DLLAPI int FCGI_feof(FCGI_FILE *fp);
118DLLAPI int FCGI_ferror(FCGI_FILE *fp);
e09316db 119DLLAPI void FCGI_clearerr(FCGI_FILE *fp);
120
17abbc3a 121DLLAPI FCGI_FILE *FCGI_tmpfile(void);
0198fd3c 122
123DLLAPI int FCGI_fileno(FCGI_FILE *fp);
124DLLAPI FCGI_FILE *FCGI_fdopen(int fd, const char *mode);
125DLLAPI FCGI_FILE *FCGI_popen(const char *cmd, const char *type);
126DLLAPI 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
e09316db 224#define clearerr FCGI_clearerr
225
226#undef tmpfile
227#define tmpfile FCGI_tmpfile
0198fd3c 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