diff options
Diffstat (limited to 'Build/source/libs/gd/gd-2.0.35/gd_io_file.c')
-rw-r--r-- | Build/source/libs/gd/gd-2.0.35/gd_io_file.c | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/Build/source/libs/gd/gd-2.0.35/gd_io_file.c b/Build/source/libs/gd/gd-2.0.35/gd_io_file.c new file mode 100644 index 00000000000..68f4485dcfe --- /dev/null +++ b/Build/source/libs/gd/gd-2.0.35/gd_io_file.c @@ -0,0 +1,144 @@ + +/* + * 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. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* 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 */ +BGD_DECLARE(gdIOCtx *) gdNewFileCtx (FILE * f) +{ + fileIOCtx *ctx; + + ctx = (fileIOCtx *) gdMalloc (sizeof (fileIOCtx)); + if (ctx == NULL) + { + return NULL; + } + + 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); +} |