fontsrv: fix build on OpenBSD 5.2

R=rsc
CC=plan9port.codebot
https://codereview.appspot.com/6850108

Committer: Russ Cox <rsc@swtch.com>
fontsrv: only build when the pieces are there
venti/wrarena: fix arenapart breakage

R=rsc
https://codereview.appspot.com/7027044
freq: fix crash with utf > 0xffff (thanks Andrey Mirtchovski)

R=rsc
https://codereview.appspot.com/7029054
jpegdump: fix build and warnings

R=rsc
https://codereview.appspot.com/7070070
CONTRIBUTORS: three more

R=rsc
https://codereview.appspot.com/7225073
fontserv: fix build on FreeBSD 9.1

R=rsc
https://codereview.appspot.com/7095050

Committer: Russ Cox <rsc@swtch.com>
libmach: fix crash in dwarfpc (misuse of realloc)

R=rsc
CC=plan9port.codebot
https://codereview.appspot.com/7225059

Committer: Russ Cox <rsc@swtch.com>
fontsrv: fix on X11 when X11H is not defined

R=rsc
CC=plan9port.codebot
https://codereview.appspot.com/7228044

Committer: Russ Cox <rsc@swtch.com>
devdraw: disable XCopyArea optimization

Ubuntu Precise seems to have a buggy X server
that sometimes fails at XCopyArea. Let devdraw
do it itself.

This will slow down remote X a little bit,
but slow and correct is better than fast and broken.

R=rsc
https://codereview.appspot.com/7310069
devdraw: silence unused variable warnings

R=rsc
https://codereview.appspot.com/7304064
devdraw: control+click = button 2, alt/shift+click = button 3

For single-button mouse users.

R=rsc
https://codereview.appspot.com/7620043
xd: accept -S for 8-byte swap

R=rsc
https://codereview.appspot.com/7565045
libsec: avoid undefined C

gcc compiles `p + length < p' into 'length < 0' since pointer overflow is undefined behavior in C.  This breaks the check against a large `length'.

Use `length > pend - p' instead.

There's no need to check `length < 0' since `length' is from length_decode() and should be non-negative.

===

Try the simplified code.

void bar(void);
void foo(unsigned char *p, int length)
{
        if (p + length < p)
                bar();
}

$ gcc -S -o - t.c -O2
...
foo:
.LFB0:
        .cfi_startproc
        testl	%esi, %esi
        js	.L4
        rep
        ret
.L4:
        jmp	bar
        .cfi_endproc

Clearly `p' is not used at all.

R=rsc
CC=plan9port.codebot
https://codereview.appspot.com/7231069

Committer: Russ Cox <rsc@swtch.com>
rc: avoid undefined C

There are two bugs in pdec() on INT_MIN:

* wrong output.

`n = 1-n' should be `n = -1-n' when n is INT_MIN.

* infinite loop.

gcc optimizes `if(n>=0)' into `if(true)' because `-INT_MIN' (signed integer overflow) is undefined behavior in C, and gcc assumes the negation of a negative number must be positive.  The resulting binary keeps printing '-' forever given INT_MIN.

Try the simplified pdec.c below.

$ gcc pdec.c
$ ./a.out -2147483648
--214748364*

$ gcc pdec.c -O2
$ ./a.out -2147483648
<infinite loop>

$ gcc pdec.c -O2 -D__PATCH__
$ ./a.out -2147483648
-2147483648

=== pdec.c ===

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

#define io void

void pchr(io *f, int c)
{
        putchar(c);
}

void pdec(io *f, int n)
{
        if(n<0){
#ifndef __PATCH__
                n=-n;
                if(n>=0){
                        pchr(f, '-');
                        pdec(f, n);
                        return;
                }
                /* n is two's complement minimum integer */
                n = 1-n;
#else
                if(n!=INT_MIN){
                        pchr(f, '-');
                        pdec(f, -n);
                        return;
                }
                /* n is two's complement minimum integer */
                n = -(INT_MIN+1);
#endif
                pchr(f, '-');
                pdec(f, n/10);
                pchr(f, n%10+'1');
                return;
        }
        if(n>9)
                pdec(f, n/10);
        pchr(f, n%10+'0');
}

int main(int argc, char **argv)
{
        int n = atoi(argv[1]);
        pdec(NULL, n);
        putchar('\n');
}

R=rsc
CC=plan9port.codebot
https://codereview.appspot.com/7241055

Committer: Russ Cox <rsc@swtch.com>
devdraw: fix x11 input

R=rsc
https://codereview.appspot.com/10458043
libregexp: update from Plan 9

R=rsc
https://codereview.appspot.com/10690044
cmd/devdraw: clear keyboard state on lost focus.

See https://bitbucket.org/rsc/plan9port/issue/128/alt-button-sticks-in-acme-sometimes-after

R=rsc
https://codereview.appspot.com/11453043
acme: allow :6 in 5-line file

R=rsc
https://codereview.appspot.com/12162043
9term: set TERM=dumb instead of TERM=9term

Everyone seems to assume that TERM != dumb implies
ANSI escape codes are okay. In fact, many people assume
that unconditionally, but it is easier to argue back about
TERM=dumb than TERM=9term.

This applies to acme win too, because they share the code.

Set termprog=9term or termprog=win for clients who
need to know.

R=rsc
CC=r
https://codereview.appspot.com/12532043