shithub: fnt

ref: 49510dd517a058166d1c60a4e9731061ff89d6b2
dir: /test.c/

View raw version
#include <u.h>
#include <libc.h>
#include <bio.h>

typedef struct Ctx Ctx;

struct Ctx {
	u8int buf[8192];
	Biobuf *f;
};

u8int *
ctxreadn(Ctx *ctx, int n)
{
	int r;
	if((r = Bread(ctx->f, ctx->buf, n)) != n){
		werrstr("short read: need %d, got %d", n, r);
		return nil;
	}
	return ctx->buf;
}

int
ctxarray(Ctx *ctx, void **arr_, void *fun_, int elsz, int num)
{
	int i;
	int (*fun)(Ctx*, void*);
	u8int *arr;

	if((arr = calloc(num, elsz)) == nil)
		return -1;
	fun = fun_;
	for(i = 0; i < num; i++){
		if(fun(ctx, arr + i*elsz) < 0){
			free(arr);
			return -1;
		}
	}
	*arr_ = arr;
	return 0;
}

#include "out.h"

void
main(int argc, char **argv)
{
	TableDirectory td;
	Ctx ctx;
	int i;

	otfinit();
	for(i = 1; i < argc; i++){
		print("%s\n", argv[i]);
		if((ctx.f = Bopen(argv[i], OREAD)) == nil){
			fprint(2, "%r\n");
		}else if(read_TableDirectory(&ctx, &td) != 0){
			fprint(2, "%s: %r\n", argv[i]);
		} else {
			fprint_TableDirectory(1, 0, &td);
		}
		if(ctx.f != nil)
			Bterm(ctx.f);
	}

	exits(nil);
}