RWS@ZERMATT.LCS.MIT.EDU (Robert Scheifler) (10/27/87)
Date: Wed, 14 Oct 87 17:03:10 PDT From: mips!lefevre@decwrl.dec.com (Patrick LeFevre) SYNOPSIS: Server dies w/ bus error due to alignment violation in os/4.2bsd/oscolor.c DESCRIPTION: The pointer dbent.ptr returned by the dbm fetch(dbent) is (char *) type, and is casted to a (short *) which can create bus errors (on some machines) for the fetch operation in following assigns like on line 56: *pred = prgb->red; FIX: in server/os/4.2bsd/oscolor.c: *** /tmp/,RCSt1003619 Thu Oct 22 11:55:32 1987 --- oscolor.c Thu Oct 22 11:54:53 1987 *************** *** 21,27 **** SOFTWARE. ******************************************************************/ ! /* $Header: oscolor.c,v 1.8 87/09/11 07:50:53 toddb Exp $ */ #include <dbm.h> #include "rgb.h" --- 21,27 ---- SOFTWARE. ******************************************************************/ ! /* $Header: oscolor.c,v 1.9 87/10/22 11:54:26 rws Exp $ */ #include <dbm.h> #include "rgb.h" *************** *** 32,37 **** --- 32,39 ---- * one database open at a time. */ extern int havergb; + + /*ARGSUSED*/ int OsLookupColor(screen, name, len, pred, pgreen, pblue) int screen; *************** *** 41,47 **** { datum dbent; ! RGB *prgb; if(!havergb) return(0); --- 43,49 ---- { datum dbent; ! RGB rgb; if(!havergb) return(0); *************** *** 52,61 **** if(dbent.dptr) { ! prgb = (RGB *) dbent.dptr; ! *pred = prgb->red; ! *pgreen = prgb->green; ! *pblue = prgb->blue; return (1); } return(0); --- 54,63 ---- if(dbent.dptr) { ! bcopy(dbent.dptr, (char *) &rgb, sizeof (RGB)); ! *pred = rgb.red; ! *pgreen = rgb.green; ! *pblue = rgb.blue; return (1); } return(0);