diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-03-14 05:42:27 +0000 |
---|---|---|
committer | <> | 2013-04-03 16:25:08 +0000 |
commit | c4dd7a1a684490673e25aaf4fabec5df138854c4 (patch) | |
tree | 4d57c44caae4480efff02b90b9be86f44bf25409 /ext/gd/libgd/gd_io_file.c | |
download | php2-master.tar.gz |
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'ext/gd/libgd/gd_io_file.c')
-rw-r--r-- | ext/gd/libgd/gd_io_file.c | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/ext/gd/libgd/gd_io_file.c b/ext/gd/libgd/gd_io_file.c new file mode 100644 index 0000000..8318a45 --- /dev/null +++ b/ext/gd/libgd/gd_io_file.c @@ -0,0 +1,128 @@ + +/* + * io_file.c + * + * Implements the file interface. + * + * As will all I/O modules, most functions are for local use only (called + * via function pointers in the I/O context). + * + * Most functions are just 'wrappers' for standard file functions. + * + * Written/Modified 1999, Philip Warner. + * + */ + +/* For platforms with incomplete ANSI defines. Fortunately, + SEEK_SET is defined to be zero by the standard. */ + +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif /* SEEK_SET */ + +#include <math.h> +#include <string.h> +#include <stdlib.h> +#include "gd.h" +#include "gdhelpers.h" + +/* this is used for creating images in main memory */ + +typedef struct fileIOCtx +{ + gdIOCtx ctx; + FILE *f; +} fileIOCtx; + +gdIOCtx *newFileCtx (FILE * f); + +static int fileGetbuf (gdIOCtx *, void *, int); +static int filePutbuf (gdIOCtx *, const void *, int); +static void filePutchar (gdIOCtx *, int); +static int fileGetchar (gdIOCtx * ctx); + +static int fileSeek (struct gdIOCtx *, const int); +static long fileTell (struct gdIOCtx *); +static void gdFreeFileCtx (gdIOCtx * ctx); + +/* return data as a dynamic pointer */ +gdIOCtx * gdNewFileCtx (FILE * f) +{ + fileIOCtx *ctx; + + ctx = (fileIOCtx *) gdMalloc(sizeof (fileIOCtx)); + + ctx->f = f; + + ctx->ctx.getC = fileGetchar; + ctx->ctx.putC = filePutchar; + + ctx->ctx.getBuf = fileGetbuf; + ctx->ctx.putBuf = filePutbuf; + + ctx->ctx.tell = fileTell; + ctx->ctx.seek = fileSeek; + + ctx->ctx.gd_free = gdFreeFileCtx; + + return (gdIOCtx *) ctx; +} + +static void gdFreeFileCtx (gdIOCtx * ctx) +{ + gdFree(ctx); +} + + +static int filePutbuf (gdIOCtx * ctx, const void *buf, int size) +{ + fileIOCtx *fctx; + fctx = (fileIOCtx *) ctx; + + return fwrite(buf, 1, size, fctx->f); + +} + +static int fileGetbuf (gdIOCtx * ctx, void *buf, int size) +{ + fileIOCtx *fctx; + fctx = (fileIOCtx *) ctx; + + return fread(buf, 1, size, fctx->f); +} + +static void filePutchar (gdIOCtx * ctx, int a) +{ + unsigned char b; + fileIOCtx *fctx; + fctx = (fileIOCtx *) ctx; + + b = a; + + putc (b, fctx->f); +} + +static int fileGetchar (gdIOCtx * ctx) +{ + fileIOCtx *fctx; + fctx = (fileIOCtx *) ctx; + + return getc (fctx->f); +} + + +static int fileSeek (struct gdIOCtx *ctx, const int pos) +{ + fileIOCtx *fctx; + fctx = (fileIOCtx *) ctx; + + return (fseek (fctx->f, pos, SEEK_SET) == 0); +} + +static long fileTell (struct gdIOCtx *ctx) +{ + fileIOCtx *fctx; + fctx = (fileIOCtx *) ctx; + + return ftell (fctx->f); +} |