Browse Source

Plan 9 from Bell Labs 2005-11-04

David du Colombier 18 years ago
parent
commit
0d24678531
4 changed files with 13 additions and 6 deletions
  1. 2 3
      dist/replica/_plan9.db
  2. 1 1
      dist/replica/plan9.db
  3. 1 0
      dist/replica/plan9.log
  4. 9 2
      sys/src/libdraw/string.c

+ 2 - 3
dist/replica/_plan9.db

@@ -293,7 +293,7 @@
 386/bin/ip/httpd/save - 775 sys sys 1130594753 131244
 386/bin/ip/httpd/webls - 775 sys sys 1130594753 131271
 386/bin/ip/httpd/wikipost - 775 sys sys 1130594753 112709
-386/bin/ip/imap4d - 775 sys sys 1130594754 237629
+386/bin/ip/imap4d - 775 sys sys 1130991193 237645
 386/bin/ip/ipconfig - 775 sys sys 1130594754 137774
 386/bin/ip/ping - 775 sys sys 1130594754 77042
 386/bin/ip/ppp - 775 sys sys 1130594755 219988
@@ -14438,7 +14438,7 @@ sys/src/libdraw/rectclip.c - 664 sys sys 944961725 571
 sys/src/libdraw/replclipr.c - 664 sys sys 944961725 363
 sys/src/libdraw/rgb.c - 664 sys sys 984709666 1679
 sys/src/libdraw/scroll.c - 664 sys sys 1097972686 444
-sys/src/libdraw/string.c - 664 sys sys 1040442975 2978
+sys/src/libdraw/string.c - 664 sys sys 1131037549 3166
 sys/src/libdraw/stringbg.c - 664 sys sys 1040442975 1611
 sys/src/libdraw/stringsubfont.c - 664 sys sys 944961725 960
 sys/src/libdraw/stringwidth.c - 664 sys sys 1080400060 1589
@@ -14969,4 +14969,3 @@ usr/glenda/lib/profile - 664 glenda glenda 1105128663 890
 usr/glenda/readme.acme - 664 glenda glenda 1019860628 4753
 usr/glenda/readme.rio - 664 glenda glenda 1019860628 6370
 usr/glenda/tmp - 20000000775 glenda glenda 1018802620 0
-386/bin/ip/imap4d - 775 sys sys 1130991193 237645

+ 1 - 1
dist/replica/plan9.db

@@ -14438,7 +14438,7 @@ sys/src/libdraw/rectclip.c - 664 sys sys 944961725 571
 sys/src/libdraw/replclipr.c - 664 sys sys 944961725 363
 sys/src/libdraw/rgb.c - 664 sys sys 984709666 1679
 sys/src/libdraw/scroll.c - 664 sys sys 1097972686 444
-sys/src/libdraw/string.c - 664 sys sys 1040442975 2978
+sys/src/libdraw/string.c - 664 sys sys 1131037549 3166
 sys/src/libdraw/stringbg.c - 664 sys sys 1040442975 1611
 sys/src/libdraw/stringsubfont.c - 664 sys sys 944961725 960
 sys/src/libdraw/stringwidth.c - 664 sys sys 1080400060 1589

+ 1 - 0
dist/replica/plan9.log

@@ -22514,3 +22514,4 @@
 1130981426 0 c sys/src/9/boot/boot.c - 664 sys sys 1130980323 6067
 1130983227 0 c sys/src/9/boot/boot.c - 664 sys sys 1130982159 6067
 1130992232 0 c 386/bin/ip/imap4d - 775 sys sys 1130991193 237645
+1131039043 0 c sys/src/libdraw/string.c - 664 sys sys 1131037549 3166

+ 9 - 2
sys/src/libdraw/string.c

@@ -65,6 +65,7 @@ _string(Image *dst, Point pt, Image *src, Point sp, Font *f, char *s, Rune *r, i
 	char **sptr;
 	Rune **rptr;
 	Font *def;
+	Subfont *sf;
 
 	if(s == nil){
 		s = "";
@@ -76,6 +77,7 @@ _string(Image *dst, Point pt, Image *src, Point sp, Font *f, char *s, Rune *r, i
 		rptr = nil;
 	}else
 		rptr = &r;
+	sf = nil;
 	while((*s || *r) && len){
 		max = Max;
 		if(len < max)
@@ -124,13 +126,18 @@ _string(Image *dst, Point pt, Image *src, Point sp, Font *f, char *s, Rune *r, i
 			len -= n;
 		}
 		if(subfontname){
-			if(_getsubfont(f->display, subfontname) == 0){
-				def = f->display->defaultfont;
+			freesubfont(sf);
+			if((sf=_getsubfont(f->display, subfontname)) == 0){
+				def = f->display ? f->display->defaultfont : nil;
 				if(def && f!=def)
 					f = def;
 				else
 					break;
 			}
+			/* 
+			 * must not free sf until cachechars has found it in the cache
+			 * and picked up its own reference.
+			 */
 		}
 	}
 	return pt;