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);