Annotation of embedaddon/php/ext/gd/libgd/gd_io_file.c, revision 1.1

1.1     ! misho       1: 
        !             2: /*
        !             3:    * io_file.c
        !             4:    *
        !             5:    * Implements the file interface.
        !             6:    *
        !             7:    * As will all I/O modules, most functions are for local use only (called
        !             8:    * via function pointers in the I/O context).
        !             9:    *
        !            10:    * Most functions are just 'wrappers' for standard file functions.
        !            11:    *
        !            12:    * Written/Modified 1999, Philip Warner.
        !            13:    *
        !            14:  */
        !            15: 
        !            16: /* For platforms with incomplete ANSI defines. Fortunately,
        !            17:    SEEK_SET is defined to be zero by the standard. */
        !            18: 
        !            19: #ifndef SEEK_SET
        !            20: #define SEEK_SET 0
        !            21: #endif /* SEEK_SET */
        !            22: 
        !            23: #include <math.h>
        !            24: #include <string.h>
        !            25: #include <stdlib.h>
        !            26: #include "gd.h"
        !            27: #include "gdhelpers.h"
        !            28: 
        !            29: /* this is used for creating images in main memory */
        !            30: 
        !            31: typedef struct fileIOCtx
        !            32: {
        !            33:        gdIOCtx ctx;
        !            34:        FILE *f;
        !            35: } fileIOCtx;
        !            36: 
        !            37: gdIOCtx *newFileCtx (FILE * f);
        !            38: 
        !            39: static int fileGetbuf (gdIOCtx *, void *, int);
        !            40: static int filePutbuf (gdIOCtx *, const void *, int);
        !            41: static void filePutchar (gdIOCtx *, int);
        !            42: static int fileGetchar (gdIOCtx * ctx);
        !            43: 
        !            44: static int fileSeek (struct gdIOCtx *, const int);
        !            45: static long fileTell (struct gdIOCtx *);
        !            46: static void gdFreeFileCtx (gdIOCtx * ctx);
        !            47: 
        !            48: /* return data as a dynamic pointer */
        !            49: gdIOCtx * gdNewFileCtx (FILE * f)
        !            50: {
        !            51:        fileIOCtx *ctx;
        !            52: 
        !            53:        ctx = (fileIOCtx *) gdMalloc(sizeof (fileIOCtx));
        !            54: 
        !            55:        ctx->f = f;
        !            56: 
        !            57:        ctx->ctx.getC = fileGetchar;
        !            58:        ctx->ctx.putC = filePutchar;
        !            59: 
        !            60:        ctx->ctx.getBuf = fileGetbuf;
        !            61:        ctx->ctx.putBuf = filePutbuf;
        !            62: 
        !            63:        ctx->ctx.tell = fileTell;
        !            64:        ctx->ctx.seek = fileSeek;
        !            65: 
        !            66:        ctx->ctx.gd_free = gdFreeFileCtx;
        !            67: 
        !            68:        return (gdIOCtx *) ctx;
        !            69: }
        !            70: 
        !            71: static void gdFreeFileCtx (gdIOCtx * ctx)
        !            72: {
        !            73:        gdFree(ctx);
        !            74: }
        !            75: 
        !            76: 
        !            77: static int filePutbuf (gdIOCtx * ctx, const void *buf, int size)
        !            78: {
        !            79:        fileIOCtx *fctx;
        !            80:        fctx = (fileIOCtx *) ctx;
        !            81: 
        !            82:        return fwrite(buf, 1, size, fctx->f);
        !            83: 
        !            84: }
        !            85: 
        !            86: static int fileGetbuf (gdIOCtx * ctx, void *buf, int size)
        !            87: {
        !            88:        fileIOCtx *fctx;
        !            89:        fctx = (fileIOCtx *) ctx;
        !            90: 
        !            91:        return fread(buf, 1, size, fctx->f);
        !            92: }
        !            93: 
        !            94: static void filePutchar (gdIOCtx * ctx, int a)
        !            95: {
        !            96:        unsigned char b;
        !            97:        fileIOCtx *fctx;
        !            98:        fctx = (fileIOCtx *) ctx;
        !            99: 
        !           100:        b = a;
        !           101: 
        !           102:        putc (b, fctx->f);
        !           103: }
        !           104: 
        !           105: static int fileGetchar (gdIOCtx * ctx)
        !           106: {
        !           107:        fileIOCtx *fctx;
        !           108:        fctx = (fileIOCtx *) ctx;
        !           109: 
        !           110:        return getc (fctx->f);
        !           111: }
        !           112: 
        !           113: 
        !           114: static int fileSeek (struct gdIOCtx *ctx, const int pos)
        !           115: {
        !           116:        fileIOCtx *fctx;
        !           117:        fctx = (fileIOCtx *) ctx;
        !           118: 
        !           119:        return (fseek (fctx->f, pos, SEEK_SET) == 0);
        !           120: }
        !           121: 
        !           122: static long fileTell (struct gdIOCtx *ctx)
        !           123: {
        !           124:        fileIOCtx *fctx;
        !           125:        fctx = (fileIOCtx *) ctx;
        !           126: 
        !           127:        return ftell (fctx->f);
        !           128: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>