summaryrefslogtreecommitdiff
path: root/Build/source/libs/gd/gd-2.0.35/gd_io_file.c
diff options
context:
space:
mode:
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.c144
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);
+}