⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fcgi_stdio.c

📁 FastCGI,语言无关的、可伸缩架构的CGI开放扩展
💻 C
📖 第 1 页 / 共 2 页
字号:
    else {        OS_SetErrno(ESPIPE);        return -1;    }}void FCGI_rewind(FCGI_FILE *fp){    if(fp->stdio_stream)        rewind(fp->stdio_stream);    else        OS_SetErrno(ESPIPE);}#ifdef HAVE_FPOSint FCGI_fgetpos(FCGI_FILE *fp, fpos_t *pos){    if(fp->stdio_stream)        return fgetpos(fp->stdio_stream, pos);    else {        OS_SetErrno(ESPIPE);        return -1;    }}int FCGI_fsetpos(FCGI_FILE *fp, const fpos_t *pos){    if(fp->stdio_stream)        return fsetpos(fp->stdio_stream, pos);    else {        OS_SetErrno(ESPIPE);        return -1;    }}#endif/* *---------------------------------------------------------------------- * * FCGI_fgetc, FCGI_getchar, FCGI_ungetc -- * *       Wrappers for functions defined in H&S Section 15.6 * *       XXX: getc and getchar are generally defined as macros *            for performance reasons * *---------------------------------------------------------------------- */int FCGI_fgetc(FCGI_FILE *fp){    if(fp->stdio_stream)        return fgetc(fp->stdio_stream);    else if(fp->fcgx_stream)        return FCGX_GetChar(fp->fcgx_stream);    return EOF;}int FCGI_getchar(void){    return FCGI_fgetc(FCGI_stdin);}int FCGI_ungetc(int c, FCGI_FILE *fp){    if(fp->stdio_stream)        return ungetc(c, fp->stdio_stream);    else if(fp->fcgx_stream)        return FCGX_UnGetChar(c, fp->fcgx_stream);    return EOF;}/* *---------------------------------------------------------------------- * * FCGI_fgets, FCGI_gets -- * *       Wrappers for functions defined in H&S Section 15.7 * *---------------------------------------------------------------------- */char *FCGI_fgets(char *str, int size, FCGI_FILE *fp){    if(fp->stdio_stream)        return fgets(str, size, fp->stdio_stream);    else if(fp->fcgx_stream)        return FCGX_GetLine(str, size, fp->fcgx_stream);    return NULL;}/* * The gets() function reads characters from the standard input stream * into the array pointed to by str until a newline character is read * or an end-of-file condition is encountered.  The newline character * is discarded and the string is terminated with a null character.  */char *FCGI_gets(char *str){    char *s;    int c;    for (s = str; ((c = FCGI_getchar()) != '\n');) {        if(c == EOF) {            if(s == str)                return NULL;            else                break;        } else            *s++ = (char) c;    }    *s = 0;    return str;}/* *---------------------------------------------------------------------- * *       Wrappers for functions defined in H&S Section 15.8 * *       XXX: missing: fscanf, scanf * *---------------------------------------------------------------------- *//* *---------------------------------------------------------------------- * * FCGI_fputc, FCGI_putchar -- * *       Wrappers for functions defined in H&S Section 15.9 * *       XXX: putc and putchar are generally defined as macros *            for performance reasons * *---------------------------------------------------------------------- */int FCGI_fputc(int c, FCGI_FILE *fp){    if(fp->stdio_stream)        return fputc(c, fp->stdio_stream);    else if(fp->fcgx_stream)        return FCGX_PutChar(c, fp->fcgx_stream);    else return EOF;}int FCGI_putchar(int c){    return FCGI_fputc(c, FCGI_stdout);}/* *---------------------------------------------------------------------- * * FCGI_fputs, FCGI_puts * *       Wrappers for functions defined in H&S Section 15.10 * *---------------------------------------------------------------------- */int FCGI_fputs(const char *str, FCGI_FILE *fp){    if(fp->stdio_stream)        return fputs(str, fp->stdio_stream);    else if(fp->fcgx_stream)        return FCGX_PutS(str, fp->fcgx_stream);    return EOF;}int FCGI_puts(const char *str){    int n;    if(FCGI_stdout->stdio_stream) {        n = fputs(str, FCGI_stdout->stdio_stream);        if(n < 0)            return n;        else            return fputc('\n', FCGI_stdout->stdio_stream);    } else if(FCGI_stdout->fcgx_stream) {        n = FCGX_PutS(str, FCGI_stdout->fcgx_stream);        if(n < 0)            return n;        else            return FCGX_PutChar('\n', FCGI_stdout->fcgx_stream);    }    return EOF;}/* *---------------------------------------------------------------------- * * FCGI_fprintf, FCGI_printf -- * *       Wrappers for functions defined in H&S Section 15.11 * *---------------------------------------------------------------------- */int FCGI_fprintf(FCGI_FILE *fp, const char *format, ...){    va_list ap;    int n = 0;    va_start(ap, format);    if(fp->stdio_stream)        n = vfprintf(fp->stdio_stream, format, ap);    else if(fp->fcgx_stream)        n = FCGX_VFPrintF(fp->fcgx_stream, format, ap);    va_end(ap);    return n;}int FCGI_printf(const char *format, ...){    va_list ap;    int n;    va_start(ap, format);    n = FCGI_vfprintf(FCGI_stdout, format, ap);    va_end(ap);    return n;}/* *---------------------------------------------------------------------- * * FCGI_vfprintf, FCGI_vprintf -- * *       Wrappers for functions defined in H&S Section 15.12 * *---------------------------------------------------------------------- */int FCGI_vfprintf(FCGI_FILE *fp, const char *format, va_list ap){    if(fp->stdio_stream)        return vfprintf(fp->stdio_stream, format, ap);    else if(fp->fcgx_stream)        return FCGX_VFPrintF(fp->fcgx_stream, format, ap);    return EOF;}int FCGI_vprintf(const char *format, va_list ap){    if(FCGI_stdout->stdio_stream)        return vfprintf(FCGI_stdout->stdio_stream, format, ap);    else if(FCGI_stdout->fcgx_stream)        return FCGX_VFPrintF(FCGI_stdout->fcgx_stream, format, ap);    return EOF;}/* *---------------------------------------------------------------------- * * FCGI_fread, FCGI_fwrite -- * *       Wrappers for functions defined in H&S Section 15.13 * *---------------------------------------------------------------------- */size_t FCGI_fread(void *ptr, size_t size, size_t nmemb, FCGI_FILE *fp){    int n;    if(fp->stdio_stream)        return fread(ptr, size, nmemb, fp->stdio_stream);    else if(fp->fcgx_stream) {        if((size * nmemb) == 0) {            return 0;        }        n = FCGX_GetStr((char *) ptr, size * nmemb, fp->fcgx_stream);        return (n/size);    }    return (size_t)EOF;}size_t FCGI_fwrite(void *ptr, size_t size, size_t nmemb, FCGI_FILE *fp){    int n;    if(fp->stdio_stream)        return fwrite(ptr, size, nmemb, fp->stdio_stream);    else if(fp->fcgx_stream) {        if((size * nmemb) == 0) {            return 0;        }        n = FCGX_PutStr((char *) ptr, size * nmemb, fp->fcgx_stream);        return (n/size);    }    return (size_t)EOF;}/* *---------------------------------------------------------------------- * * FCGI_feof, FCGI_ferror, FCGI_clearerr -- * *       Wrappers for functions defined in H&S Section 15.14 * *---------------------------------------------------------------------- */int FCGI_feof(FCGI_FILE *fp){    if(fp->stdio_stream) {        return feof(fp->stdio_stream);    } else if (fp->fcgx_stream){        return FCGX_HasSeenEOF(fp->fcgx_stream);    }    return -1;}int FCGI_ferror(FCGI_FILE *fp){    if(fp->stdio_stream) {        return ferror(fp->stdio_stream);    } else if(fp->fcgx_stream) {        return FCGX_GetError(fp->fcgx_stream);    }    return -1;}void FCGI_clearerr(FCGI_FILE *fp){    if(fp->stdio_stream) {        clearerr(fp->stdio_stream);    } else if(fp->fcgx_stream) {        FCGX_ClearError(fp->fcgx_stream);    }    return;}/* *---------------------------------------------------------------------- * * FCGI_tmpfile -- * *       Wrappers for function defined in H&S Section 15.16 * *---------------------------------------------------------------------- */FCGI_FILE *FCGI_tmpfile(void){    FILE * file = tmpfile();    FCGI_FILE * fcgi_file = FCGI_OpenFromFILE(file);    if (file && !fcgi_file)        fclose(file);    return fcgi_file;}/* *---------------------------------------------------------------------- * * FCGI_fileno, FCGI_fdopen, FCGI_popen, FCGI_pclose -- * *       Wrappers for POSIX, X/OPEN functions not in ISO C * *---------------------------------------------------------------------- */int FCGI_fileno(FCGI_FILE *fp){    if(fp->stdio_stream)        return fileno(fp->stdio_stream);    else        return -1;}FCGI_FILE *FCGI_fdopen(int fd, const char *mode){    FILE * file = fdopen(fd, mode);    FCGI_FILE * fcgi_file = FCGI_OpenFromFILE(file);    if (file && !fcgi_file)        fclose(file);    return fcgi_file;}FCGI_FILE *FCGI_popen(const char *cmd, const char *type){    FILE * file = popen(cmd, type);    FCGI_FILE * fcgi_file = FCGI_OpenFromFILE(file);    if (file && !fcgi_file)        pclose(file);    return fcgi_file;}int FCGI_pclose(FCGI_FILE *fp){    int n = EOF;    if (fp->stdio_stream) {        n = pclose(fp->stdio_stream);        fp->stdio_stream = NULL;    } else if(fp->fcgx_stream) {        /*         * The caller is deeply confused; don't free the storage.         */        return EOF;    }    if((fp != FCGI_stdin) && (fp != FCGI_stdout) && (fp != FCGI_stderr)) {        free(fp);    }    return n;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -