Annotation of embedaddon/php/ext/gd/libgd/gd_io_file.c, revision 1.1.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>