code: drawterm

Download patch

ref: 7f51f90cb36b248269cea2f6ac8f3da918fa834f
parent: d1b585cfe24c6fd89865a1301ec933597c4de5e6
author: Russ Cox <rsc@swtch.com>
date: Fri Jun 22 18:06:34 EDT 2007

various fixes

--- a/Make.unix
+++ b/Make.unix
@@ -19,5 +19,5 @@
 all: default
 
 libmachdep.a:
-	arch=`uname -m|sed 's/i.86/386/;s/Power Macintosh/power/'`; \
+	arch=`uname -m|sed 's/i.86/386/;s/Power Macintosh/power/; s/x86_64/amd64/'`; \
 	(cd posix-$$arch &&  make)
--- a/cpu.c
+++ b/cpu.c
@@ -548,7 +548,7 @@
 	char tbuf[TICKETLEN+TICKETLEN+AUTHENTLEN], trbuf[TICKREQLEN];
 	char authkey[DESKEYLEN];
 	Authenticator auth;
-	int afd, i, v2;
+	int afd, i, n, v2;
 	Ticketreq tr;
 	Ticket t;
 	AuthInfo *ai;
@@ -623,11 +623,26 @@
 	auth.id = 0;
 	convA2M(&auth, tbuf+TICKETLEN, t.key);
 
-	if(write(fd, tbuf, TICKETLEN+AUTHENTLEN) != TICKETLEN+AUTHENTLEN)
+	if(write(fd, tbuf+1, TICKETLEN+AUTHENTLEN) != TICKETLEN+AUTHENTLEN)
 		fatal(1, "cannot send ticket and authenticator back in p9sk1");
 
-	if(readn(fd, tbuf, AUTHENTLEN) != AUTHENTLEN)
-		fatal(1, "cannot read authenticator in p9sk1");
+	if((n=readn(fd, tbuf, AUTHENTLEN)) != AUTHENTLEN ||
+			memcmp(tbuf, "cpu:", 4) == 0){
+		if(n <= 4)
+			fatal(1, "cannot read authenticator in p9sk1");
+
+		/*
+		 * didn't send back authenticator:
+		 * sent back fatal error message.
+		 */
+		memmove(buf, tbuf, n);
+		i = readn(fd, buf+n, sizeof buf-n-1);
+		if(i > 0)
+			n += i;
+		buf[n] = 0;
+		werrstr("");
+		fatal(0, "server says: %s", buf);
+	}
 	
 	convM2A(tbuf, &auth, t.key);
 	if(auth.num != AuthAs
@@ -635,7 +650,7 @@
 	|| auth.id != 0){
 		print("?you and auth server agree about password.\n");
 		print("?server is confused.\n");
-		fatal(1, "server lies got %llux.%d want %llux.%d", *(vlong*)auth.chal, auth.id, *(vlong*)cchal, 0);
+		fatal(0, "server lies got %llux.%d want %llux.%d", *(vlong*)auth.chal, auth.id, *(vlong*)cchal, 0);
 	}
 	//print("i am %s there.\n", t.suid);
 	ai = mallocz(sizeof(AuthInfo), 1);
--- a/gui-x11/screen.c
+++ b/gui-x11/screen.c
@@ -1126,6 +1126,7 @@
 		XChangeProperty(xd, xe->requestor, xe->property, xe->target,
 			8, PropModeReplace, (uchar*)a, sizeof a);
 	}else if(xe->target == XA_STRING || xe->target == utf8string || xe->target == text || xe->target == compoundtext){
+	text:
 		/* if the target is STRING we're supposed to reply with Latin1 XXX */
 		qlock(&clip.lk);
 		XChangeProperty(xd, xe->requestor, xe->property, xe->target,
@@ -1132,12 +1133,21 @@
 			8, PropModeReplace, (uchar*)clip.buf, strlen(clip.buf));
 		qunlock(&clip.lk);
 	}else{
-		iprint("get %d\n", xe->target);
 		name = XGetAtomName(xd, xe->target);
 		if(name == nil)
-			iprint("XGetAtomName failed\n");
-		else if(strcmp(name, "TIMESTAMP") != 0)
-			iprint("%s: cannot handle selection request for '%s' (%d)\n", argv0, name, (int)xe->target);
+			iprint("XGetAtomName %d failed\n", xe->target);
+		if(name){
+			if(strcmp(name, "TIMESTAMP") == 0){
+				/* nothing */
+			}else if(strncmp(name, "image/", 6) == 0){
+				/* nothing */
+			}else if(strcmp(name, "text/html") == 0){
+				/* nothing */
+			}else if(strcmp(name, "text/plain") == 0 || strcmp(name, "text/plain;charset=UTF-8") == 0){
+				goto text;
+			}else
+				iprint("%s: cannot handle selection request for '%s' (%d)\n", argv0, name, (int)xe->target);
+		}
 		r.xselection.property = None;
 	}
 
--- a/include/unix.h
+++ b/include/unix.h
@@ -1,3 +1,15 @@
+#define __BSD_VISIBLE 1 /* FreeBSD 5.x */
+#define _BSD_SOURCE 1
+#define _NETBSD_SOURCE 1	/* NetBSD */
+#define _SVID_SOURCE 1
+#if !defined(__APPLE__) && !defined(__OpenBSD__)
+#	define _XOPEN_SOURCE 1000
+#	define _XOPEN_SOURCE_EXTENDED 1
+#endif
+#define _LARGEFILE64_SOURCE 1
+#define _FILE_OFFSET_BITS 64
+
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -4,6 +16,7 @@
 #include <math.h>
 #include <fcntl.h>
 #include <setjmp.h>
+#include <stddef.h>
 #include <time.h>
 #include <assert.h>
 #include <unistd.h>