Sigrid Solveig Haflínudóttirconvert image streams to plan 9 Memimage14a77355 years agoHistory
146 lines · 2.0 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <bio.h>#include <draw.h>#include <memdraw.h>#include "pdf.h" static intbufgrow(Buffer *b, int sz){	uchar *r;	int maxsz; 	if(b->maxsz < 1){		if((b->b = mallocz(128, 1)) == nil)			return -1;		b->maxsz = 128;	}	for(maxsz = b->maxsz; b->sz+sz > maxsz; maxsz *= 2);	if(maxsz != b->maxsz){		if((r = realloc(b->b, maxsz)) == nil)			return -1;		memset(r+b->maxsz, 0, maxsz-b->maxsz);		b->b = r;		b->maxsz = maxsz;	} 	return 0;} void *buf2memimage(Buffer *b, char *prog, char **argv){	Memimage *m;	int fd; 	if(pipeexec(&fd, prog, argv) < 0)		return nil; 	write(fd, b->b, b->sz);	write(fd, "", 0); 	m = readmemimage(fd);	close(fd); 	return m;} voidbufinit(Buffer *b, uchar *d, int sz){	memset(b, 0, sizeof(*b));	if(d != nil){		b->b = d;		b->sz = sz;		b->ro = 1;	}} voidbuffree(Buffer *b){	if(b->ro == 0)		free(b->b);} intbufeof(Buffer *b){	return bufleft(b) == 0;} intbufleft(Buffer *b){	return b->sz - b->off;} uchar *bufdata(Buffer *b, int *sz){	*sz = b->sz;	return b->b;} intbufreadn(Buffer *b, Stream *s, int sz){	int n, end; 	if(bufgrow(b, sz) != 0)		return -1;	for(end = b->sz+sz; b->sz < end; b->sz += n){		if((n = Sread(s, b->b+b->sz, sz)) < 1)			return -1;		sz -= n;	}	return 0;} intbufput(Buffer *b, uchar *d, int sz){	if(b->ro)		sysfatal("bufferput on readonly buffer");	if(bufgrow(b, sz) != 0)		return -1; 	memmove(b->b+b->sz, d, sz);	b->sz += sz; 	return sz;} intbufget(Buffer *b, uchar *d, int sz){	if(sz == 0)		return 0; 	if(b->off > b->sz)		sysfatal("buffer: off(%d) > sz(%d)", b->off, b->sz);	if(sz > b->sz - b->off)		sz = b->sz - b->off;	memmove(d, b->b+b->off, sz);	b->off += sz; 	return sz;} voidbufdump(Buffer *b){	Biobuf bio;	int i, j; 	Binit(&bio, 2, OWRITE);	Bprint(&bio, "%d bytes:\n", b->sz);	for(i = 0; i < b->sz;){		Bprint(&bio, "%04x\t", i);		for(j = 0; i < b->sz && j < 16; j++, i++)			Bprint(&bio, "%02x%s", b->b[i], (j+1)&7 ? " " : "  ");		Bprint(&bio, "\n");	}	Bterm(&bio);}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t