--- gpm-1.19.2/gpm-root.y.root Wed Apr 19 01:48:41 2000 +++ gpm-1.19.2/gpm-root.y Mon Jun 12 23:24:14 2000 @@ -49,7 +49,8 @@ #include /* OPEN_MAX */ #include /* VT_ACTIVATE */ #include /* K_SHIFT */ -#include +#include +#include #ifdef HAVE_SYS_SYSMACROS_H #include @@ -447,9 +448,10 @@ /*====================================================================*/ void f__fix(struct passwd *pass) { - setgid(pass->pw_gid); - initgroups(pass->pw_name, pass->pw_gid); - setuid(pass->pw_uid); + if (setgid(pass->pw_gid) < 0 || + initgroups(pass->pw_name, pass->pw_gid) < 0 || + setuid(pass->pw_uid) < 0) + exit(1); setenv("HOME", pass->pw_dir, 1); setenv("LOGNAME", pass->pw_name,1); setenv("USER", pass->pw_name,1); @@ -1045,6 +1047,12 @@ static int postcount; static Posted *activemenu; +#if __BYTE_ORDER == __BIG_ENDIAN +#define bigendian 1 +#else +#define bigendian 0 +#endif + Posted *postmenu(int fd, FILE *f, Draw *draw, int x, int y, int console) { Posted *new; @@ -1062,9 +1070,9 @@ lines=dump[0]; columns=dump[1]; i=(columns*dump[3]+dump[2])*2+1; /* where to get it */ if (i<0) i=1; - new->colorcell=dump[4+i]; + new->colorcell=dump[4+i-bigendian]; gpm_debug_log(LOG_DEBUG,"Colorcell=%02x (at %i,%i = %i)", - new->colorcell,dump[2],dump[3],i); + new->colorcell,dump[2],dump[3],i-bigendian); /* place the box relative to the mouse */ if (!postcount) x -= draw->width/2; else x+=2; @@ -1078,7 +1086,11 @@ new->y=y; new->Y=y+draw->height-1; /* these definitions are dirty hacks, but they help in writing to the screen */ +#if __BYTE_ORDER == __BIG_ENDIAN +#define PUTC(c,f,b) (*(curr++)=((b)<<4)+(f),*(curr++)=(c)) +#else #define PUTC(c,f,b) (*(curr++)=(c),*(curr++)=((b)<<4)+(f)) +#endif #define PUTS(s,f,b) for(curr2=s;*curr2;PUTC(*(curr2++),f,b)) #define GOTO(x,y) (curr=dump+4+2*((y)*columns+(x))) --- gpm-1.19.2/gpm-root.c.root Wed Apr 19 01:53:38 2000 +++ gpm-1.19.2/gpm-root.c Mon Jun 12 23:25:05 2000 @@ -43,7 +43,8 @@ #include /* OPEN_MAX */ #include /* VT_ACTIVATE */ #include /* K_SHIFT */ -#include +#include +#include #ifdef HAVE_SYS_SYSMACROS_H #include @@ -1305,9 +1306,10 @@ /*====================================================================*/ void f__fix(struct passwd *pass) { - setgid(pass->pw_gid); - initgroups(pass->pw_name, pass->pw_gid); - setuid(pass->pw_uid); + if (setgid(pass->pw_gid) < 0 || + initgroups(pass->pw_name, pass->pw_gid) < 0 || + setuid(pass->pw_uid) < 0) + exit(1); setenv("HOME", pass->pw_dir, 1); setenv("LOGNAME", pass->pw_name,1); setenv("USER", pass->pw_name,1); @@ -1903,6 +1905,12 @@ static int postcount; static Posted *activemenu; +#if __BYTE_ORDER == __BIG_ENDIAN +#define bigendian 1 +#else +#define bigendian 0 +#endif + Posted *postmenu(int fd, FILE *f, Draw *draw, int x, int y, int console) { Posted *new; @@ -1920,9 +1928,9 @@ lines=dump[0]; columns=dump[1]; i=(columns*dump[3]+dump[2])*2+1; /* where to get it */ if (i<0) i=1; - new->colorcell=dump[4+i]; + new->colorcell=dump[4+i-bigendian]; gpm_debug_log(LOG_DEBUG,"Colorcell=%02x (at %i,%i = %i)", - new->colorcell,dump[2],dump[3],i); + new->colorcell,dump[2],dump[3],i-bigendian); /* place the box relative to the mouse */ if (!postcount) x -= draw->width/2; else x+=2; @@ -1936,7 +1944,11 @@ new->y=y; new->Y=y+draw->height-1; /* these definitions are dirty hacks, but they help in writing to the screen */ +#if __BYTE_ORDER == __BIG_ENDIAN +#define PUTC(c,f,b) (*(curr++)=((b)<<4)+(f),*(curr++)=(c)) +#else #define PUTC(c,f,b) (*(curr++)=(c),*(curr++)=((b)<<4)+(f)) +#endif #define PUTS(s,f,b) for(curr2=s;*curr2;PUTC(*(curr2++),f,b)) #define GOTO(x,y) (curr=dump+4+2*((y)*columns+(x)))