Source

gd-libgd / src / gd_io_file.c

pierre 084ba37 
mattias 6125731 










pierre 1cdea74 
pierre 084ba37 
pierre b0243fe 
mattias 6125731 
pierre b0243fe 

pierre 0b986dd 
mattias 6125731 
pierre 0b986dd 

mattias 6125731 
pierre 0b986dd 

pierre 084ba37 



pierre 22d55c5 
pierre 084ba37 
pierre 1cdea74 
pierre 084ba37 
pierrejoye e20413b 
mattias 6125731 

pierre 2399023 
pierre 1cdea74 
pierre 084ba37 
mattias 6125731 
pierre 084ba37 
mattias 6125731 



pierre 084ba37 
mattias 6125731 


pierre 084ba37 

mattias 6125731 
pierre 1cdea74 
mattias 6125731 
pierre 084ba37 
tabe e27c3c7 
mattias 6125731 



pierre 084ba37 
mattias 6125731 
pierre 084ba37 
mattias 6125731 

pierre 084ba37 
mattias 6125731 

pierre 084ba37 
mattias 6125731 

pierre 084ba37 
mattias 6125731 
pierre 084ba37 
mattias 6125731 
pierre 0b986dd 
pierre 084ba37 
mattias 6125731 
pierre 084ba37 
mattias 6125731 
pierre 084ba37 


mattias 6125731 
pierre 084ba37 
mattias 6125731 

pierre 084ba37 
mattias 6125731 
pierre 084ba37 

mattias 6125731 
pierre 084ba37 
mattias 6125731 

pierre 084ba37 
mattias 6125731 
pierre 084ba37 

mattias 6125731 
pierre 084ba37 
mattias 6125731 


pierre 084ba37 
mattias 6125731 
pierre 084ba37 
mattias 6125731 
pierre 084ba37 

mattias 6125731 
pierre 084ba37 
mattias 6125731 

pierre 084ba37 
mattias 6125731 
pierre 084ba37 

mattias 6125731 
pierre 084ba37 
mattias 6125731 


pierre 084ba37 

mattias 6125731 
pierre 084ba37 
mattias 6125731 

pierre 084ba37 
mattias 6125731 
pierre 084ba37 
/*
 * 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;

	if (f == NULL) return NULL;
	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);
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.