~kris/9p

9hist

6748d8362d7aa0fe0c1862ba1b6292effb8e286f — David du Colombier 34 years ago bf675d7
Plan 9 from Bell Labs 1992-07-02
1 files changed, 26 insertions(+), 12 deletions(-)

M port/devbit.c
M port/devbit.c => port/devbit.c +26 -12
@@ 93,7 93,7 @@ void	bitcompact(void);
int	bitalloc(Rectangle, int);
void	bitfree(GBitmap*);
void	fontfree(GFont*);
void	subfontfree(BSubfont*);
void	subfontfree(BSubfont*, int);
void	arenafree(Arena*);
void	bitstring(GBitmap*, Point, GFont*, uchar*, long, Fcode);
void	bitloadchar(GFont*, int, GSubfont*, int);


@@ 330,7 330,7 @@ bitclose(Chan *c)
			for(sp=bit.subfont; sp<esp; sp++){
				s = *sp;
				if(s)
					subfontfree(s);
					subfontfree(s, sp-bit.subfont);
				/* don't clear *sp: cached */
			}
			efp = &bit.font[bit.nfont];


@@ 509,7 509,7 @@ bitread(Chan *c, void *va, long n, ulong offset)
		 *	fontchars	6*(subfont->n+1)
		 */
		p[0] = 'J';
		if(bit.cacheid<0)
		if(bit.cacheid < 0)
			error(Ebadfont);
		s = bit.subfont[bit.cacheid];
		if(s==0 || s->ref==0)


@@ 635,7 635,7 @@ bitwrite(Chan *c, void *va, long n, ulong offset)
	Fcode fc;
	Fontchar *fcp;
	GBitmap *b, *src, *dst, *bp;
	BSubfont *f, **fp;
	BSubfont *f, *tf, **fp;
	GFont *ff, **ffp;

	if(c->qid.path == CHDIR)


@@ 792,7 792,7 @@ bitwrite(Chan *c, void *va, long n, ulong offset)
			v = BGSHORT(p+1);
			if(v<0 || v>=bit.nsubfont || (f=bit.subfont[v])==0 || f->ref==0)
				error(Ebadfont);
			subfontfree(f);
			subfontfree(f, v);
			m -= 3;
			p += 3;
			break;


@@ 830,7 830,7 @@ bitwrite(Chan *c, void *va, long n, ulong offset)
			 * subfont cache check
			 *
			 *	'j'		1
			 *	qid		8	BUG: ignored
			 *	qid		8
			 */
			if(m < 9)
				error(Ebadblt);


@@ 886,6 886,14 @@ bitwrite(Chan *c, void *va, long n, ulong offset)
			f->ascent = p[4];
			f->qid[0] = BGLONG(p+7);
			f->qid[1] = BGLONG(p+11);
			/* check to see if already there, uncache if so */
			for(j=0; j<bit.nsubfont; j++){
				if(j == i)
					continue;
				tf = bit.subfont[j];
				if(tf && tf->qid[0]==f->qid[0] && tf->qid[1]==f->qid[1])
					f->qid[0] = ~0;	/* uncached */
			}
			f->ref = 1;
			v = BGSHORT(p+5);
			if(v<0 || v>=bit.nmap || (dst=bit.map[v])==0)


@@ 1401,10 1409,9 @@ bitalloc(Rectangle rect, int ld)
	for(i=0; i<bit.nsubfont; i++){
		s = bit.subfont[i];
		if(s && s!=defont && s->ref==0){
			bitfree(s->bits);
			free(s->info);
			free(s);
			bit.subfont[i] = 0;
			s->ref = 1;
			s->qid[0] = ~0;	/* force cleanup */
			subfontfree(s, i);
		}
	}
	bitcompact();


@@ 1479,10 1486,17 @@ fontfree(GFont *f)
}

void
subfontfree(BSubfont *s)
subfontfree(BSubfont *s, int i)
{
	if(s != defont)	/* don't free subfont 0, defont */
	if(s!=defont && s->ref>0){	/* don't free subfont 0, defont */
		s->ref--;
		if(s->ref==0 && s->qid[0]==~0){	/* uncached */
			bitfree(s->bits);
			free(s->info);
			free(s);
			bit.subfont[i] = 0;
		}
	}
	return;
}