Merge branch 'master' of git://anongit.freedesktop.org/git/xorg/xserver
This commit is contained in:
commit
ca5ebe3971
|
@ -441,6 +441,7 @@ static int GetDrawableOrPixmap( __GLXcontext *glxc, GLXDrawable drawId,
|
||||||
__GLcontextModes *modes;
|
__GLcontextModes *modes;
|
||||||
__GLXdrawable *pGlxDraw;
|
__GLXdrawable *pGlxDraw;
|
||||||
__GLXpixmap *drawPixmap = NULL;
|
__GLXpixmap *drawPixmap = NULL;
|
||||||
|
int rc;
|
||||||
|
|
||||||
/* This is the GLX 1.3 case - the client passes in a GLXWindow and
|
/* This is the GLX 1.3 case - the client passes in a GLXWindow and
|
||||||
* we just return the __GLXdrawable. The first time a GLXPixmap
|
* we just return the __GLXdrawable. The first time a GLXPixmap
|
||||||
|
@ -466,8 +467,8 @@ static int GetDrawableOrPixmap( __GLXcontext *glxc, GLXDrawable drawId,
|
||||||
* GLXWindow with the same XID as an X Window, so we wont get any
|
* GLXWindow with the same XID as an X Window, so we wont get any
|
||||||
* resource ID clashes. Effectively, the X Window is now also a
|
* resource ID clashes. Effectively, the X Window is now also a
|
||||||
* GLXWindow. */
|
* GLXWindow. */
|
||||||
pDraw = (DrawablePtr) LookupDrawable(drawId, client);
|
rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
|
||||||
if (pDraw) {
|
if (rc == Success) {
|
||||||
if (pDraw->type == DRAWABLE_WINDOW) {
|
if (pDraw->type == DRAWABLE_WINDOW) {
|
||||||
VisualID vid = wVisual((WindowPtr)pDraw);
|
VisualID vid = wVisual((WindowPtr)pDraw);
|
||||||
|
|
||||||
|
@ -1199,12 +1200,12 @@ static int ValidateCreateDrawable(ClientPtr client,
|
||||||
ScreenPtr pScreen;
|
ScreenPtr pScreen;
|
||||||
VisualPtr pVisual;
|
VisualPtr pVisual;
|
||||||
__GLXscreen *pGlxScreen;
|
__GLXscreen *pGlxScreen;
|
||||||
int i;
|
int i, rc;
|
||||||
|
|
||||||
LEGAL_NEW_RESOURCE(glxDrawableId, client);
|
LEGAL_NEW_RESOURCE(glxDrawableId, client);
|
||||||
|
|
||||||
pDraw = (DrawablePtr) LookupDrawable(drawablId, client);
|
rc = dixLookupDrawable(&pDraw, drawablId, client, 0, DixUnknownAccess);
|
||||||
if (!pDraw || pDraw->type != type) {
|
if (rc != Success || pDraw->type != type) {
|
||||||
client->errorValue = drawablId;
|
client->errorValue = drawablId;
|
||||||
return type == DRAWABLE_WINDOW ? BadWindow : BadPixmap;
|
return type == DRAWABLE_WINDOW ? BadWindow : BadPixmap;
|
||||||
}
|
}
|
||||||
|
@ -2034,10 +2035,11 @@ int __glXDisp_BindSwapBarrierSGIX(__GLXclientState *cl, GLbyte *pc)
|
||||||
xGLXBindSwapBarrierSGIXReq *req = (xGLXBindSwapBarrierSGIXReq *) pc;
|
xGLXBindSwapBarrierSGIXReq *req = (xGLXBindSwapBarrierSGIXReq *) pc;
|
||||||
XID drawable = req->drawable;
|
XID drawable = req->drawable;
|
||||||
int barrier = req->barrier;
|
int barrier = req->barrier;
|
||||||
DrawablePtr pDraw = (DrawablePtr) LookupDrawable(drawable, client);
|
DrawablePtr pDraw;
|
||||||
int screen;
|
int screen, rc;
|
||||||
|
|
||||||
if (pDraw && (pDraw->type == DRAWABLE_WINDOW)) {
|
rc = dixLookupDrawable(&pDraw, drawable, client, 0, DixUnknownAccess);
|
||||||
|
if (rc == Success && (pDraw->type == DRAWABLE_WINDOW)) {
|
||||||
screen = pDraw->pScreen->myNum;
|
screen = pDraw->pScreen->myNum;
|
||||||
if (__glXSwapBarrierFuncs &&
|
if (__glXSwapBarrierFuncs &&
|
||||||
__glXSwapBarrierFuncs[screen].bindSwapBarrierFunc) {
|
__glXSwapBarrierFuncs[screen].bindSwapBarrierFunc) {
|
||||||
|
|
|
@ -237,7 +237,7 @@ GLboolean __glXFreeContext(__GLXcontext *cx)
|
||||||
* __glXDispatch() or as a callback from the resource manager. In
|
* __glXDispatch() or as a callback from the resource manager. In
|
||||||
* the latter case we need to lift the DRI lock manually. */
|
* the latter case we need to lift the DRI lock manually. */
|
||||||
|
|
||||||
if (glxBlockClients) {
|
if (!glxBlockClients) {
|
||||||
__glXleaveServer();
|
__glXleaveServer();
|
||||||
cx->destroy(cx);
|
cx->destroy(cx);
|
||||||
__glXenterServer();
|
__glXenterServer();
|
||||||
|
|
|
@ -85,8 +85,6 @@ extern HIDDEN void __glXDisp_EvalCoord2fv(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_EvalCoord2fv(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_EvalCoord2fv(GLbyte * pc);
|
||||||
extern HIDDEN int __glXDisp_DestroyPixmap(struct __GLXclientStateRec *, GLbyte *);
|
extern HIDDEN int __glXDisp_DestroyPixmap(struct __GLXclientStateRec *, GLbyte *);
|
||||||
extern HIDDEN int __glXDispSwap_DestroyPixmap(struct __GLXclientStateRec *, GLbyte *);
|
extern HIDDEN int __glXDispSwap_DestroyPixmap(struct __GLXclientStateRec *, GLbyte *);
|
||||||
extern HIDDEN void __glXDisp_ProgramEnvParameter4dvARB(GLbyte * pc);
|
|
||||||
extern HIDDEN void __glXDispSwap_ProgramEnvParameter4dvARB(GLbyte * pc);
|
|
||||||
extern HIDDEN int __glXDisp_GetMapiv(struct __GLXclientStateRec *, GLbyte *);
|
extern HIDDEN int __glXDisp_GetMapiv(struct __GLXclientStateRec *, GLbyte *);
|
||||||
extern HIDDEN int __glXDispSwap_GetMapiv(struct __GLXclientStateRec *, GLbyte *);
|
extern HIDDEN int __glXDispSwap_GetMapiv(struct __GLXclientStateRec *, GLbyte *);
|
||||||
extern HIDDEN int __glXDisp_SwapBuffers(struct __GLXclientStateRec *, GLbyte *);
|
extern HIDDEN int __glXDisp_SwapBuffers(struct __GLXclientStateRec *, GLbyte *);
|
||||||
|
@ -123,6 +121,8 @@ extern HIDDEN int __glXDisp_VendorPrivate(struct __GLXclientStateRec *, GLbyte *
|
||||||
extern HIDDEN int __glXDispSwap_VendorPrivate(struct __GLXclientStateRec *, GLbyte *);
|
extern HIDDEN int __glXDispSwap_VendorPrivate(struct __GLXclientStateRec *, GLbyte *);
|
||||||
extern HIDDEN int __glXDisp_CreateGLXPixmapWithConfigSGIX(struct __GLXclientStateRec *, GLbyte *);
|
extern HIDDEN int __glXDisp_CreateGLXPixmapWithConfigSGIX(struct __GLXclientStateRec *, GLbyte *);
|
||||||
extern HIDDEN int __glXDispSwap_CreateGLXPixmapWithConfigSGIX(struct __GLXclientStateRec *, GLbyte *);
|
extern HIDDEN int __glXDispSwap_CreateGLXPixmapWithConfigSGIX(struct __GLXclientStateRec *, GLbyte *);
|
||||||
|
extern HIDDEN void __glXDisp_VertexAttrib1fvNV(GLbyte * pc);
|
||||||
|
extern HIDDEN void __glXDispSwap_VertexAttrib1fvNV(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_Vertex3iv(GLbyte * pc);
|
extern HIDDEN void __glXDisp_Vertex3iv(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_Vertex3iv(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_Vertex3iv(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_CopyConvolutionFilter1D(GLbyte * pc);
|
extern HIDDEN void __glXDisp_CopyConvolutionFilter1D(GLbyte * pc);
|
||||||
|
@ -279,6 +279,8 @@ extern HIDDEN void __glXDisp_ClearStencil(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_ClearStencil(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_ClearStencil(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_VertexAttrib3dvARB(GLbyte * pc);
|
extern HIDDEN void __glXDisp_VertexAttrib3dvARB(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_VertexAttrib3dvARB(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_VertexAttrib3dvARB(GLbyte * pc);
|
||||||
|
extern HIDDEN void __glXDisp_VertexAttribs4ubvNV(GLbyte * pc);
|
||||||
|
extern HIDDEN void __glXDispSwap_VertexAttribs4ubvNV(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_ConvolutionParameteriv(GLbyte * pc);
|
extern HIDDEN void __glXDisp_ConvolutionParameteriv(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_ConvolutionParameteriv(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_ConvolutionParameteriv(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_RasterPos2fv(GLbyte * pc);
|
extern HIDDEN void __glXDisp_RasterPos2fv(GLbyte * pc);
|
||||||
|
@ -327,6 +329,8 @@ extern HIDDEN int __glXDisp_GetVertexAttribdvNV(struct __GLXclientStateRec *, GL
|
||||||
extern HIDDEN int __glXDispSwap_GetVertexAttribdvNV(struct __GLXclientStateRec *, GLbyte *);
|
extern HIDDEN int __glXDispSwap_GetVertexAttribdvNV(struct __GLXclientStateRec *, GLbyte *);
|
||||||
extern HIDDEN void __glXDisp_Normal3fv(GLbyte * pc);
|
extern HIDDEN void __glXDisp_Normal3fv(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_Normal3fv(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_Normal3fv(GLbyte * pc);
|
||||||
|
extern HIDDEN void __glXDisp_ProgramEnvParameter4dvARB(GLbyte * pc);
|
||||||
|
extern HIDDEN void __glXDispSwap_ProgramEnvParameter4dvARB(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_VertexAttrib4ivARB(GLbyte * pc);
|
extern HIDDEN void __glXDisp_VertexAttrib4ivARB(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_VertexAttrib4ivARB(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_VertexAttrib4ivARB(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_End(GLbyte * pc);
|
extern HIDDEN void __glXDisp_End(GLbyte * pc);
|
||||||
|
@ -457,8 +461,6 @@ extern HIDDEN void __glXDisp_BindFramebufferEXT(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_BindFramebufferEXT(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_BindFramebufferEXT(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_PushAttrib(GLbyte * pc);
|
extern HIDDEN void __glXDisp_PushAttrib(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_PushAttrib(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_PushAttrib(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_VertexAttrib4usvARB(GLbyte * pc);
|
|
||||||
extern HIDDEN void __glXDispSwap_VertexAttrib4usvARB(GLbyte * pc);
|
|
||||||
extern HIDDEN int __glXDisp_DestroyPbuffer(struct __GLXclientStateRec *, GLbyte *);
|
extern HIDDEN int __glXDisp_DestroyPbuffer(struct __GLXclientStateRec *, GLbyte *);
|
||||||
extern HIDDEN int __glXDispSwap_DestroyPbuffer(struct __GLXclientStateRec *, GLbyte *);
|
extern HIDDEN int __glXDispSwap_DestroyPbuffer(struct __GLXclientStateRec *, GLbyte *);
|
||||||
extern HIDDEN void __glXDisp_TexParameteriv(GLbyte * pc);
|
extern HIDDEN void __glXDisp_TexParameteriv(GLbyte * pc);
|
||||||
|
@ -615,6 +617,8 @@ extern HIDDEN void __glXDisp_PrioritizeTextures(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_PrioritizeTextures(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_PrioritizeTextures(GLbyte * pc);
|
||||||
extern HIDDEN int __glXDisp_PixelStorei(struct __GLXclientStateRec *, GLbyte *);
|
extern HIDDEN int __glXDisp_PixelStorei(struct __GLXclientStateRec *, GLbyte *);
|
||||||
extern HIDDEN int __glXDispSwap_PixelStorei(struct __GLXclientStateRec *, GLbyte *);
|
extern HIDDEN int __glXDispSwap_PixelStorei(struct __GLXclientStateRec *, GLbyte *);
|
||||||
|
extern HIDDEN void __glXDisp_VertexAttrib4usvARB(GLbyte * pc);
|
||||||
|
extern HIDDEN void __glXDispSwap_VertexAttrib4usvARB(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_Color4iv(GLbyte * pc);
|
extern HIDDEN void __glXDisp_Color4iv(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_Color4iv(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_Color4iv(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_EvalCoord2dv(GLbyte * pc);
|
extern HIDDEN void __glXDisp_EvalCoord2dv(GLbyte * pc);
|
||||||
|
@ -783,8 +787,6 @@ extern HIDDEN void __glXDisp_VertexAttribs2fvNV(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_VertexAttribs2fvNV(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_VertexAttribs2fvNV(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_Rectiv(GLbyte * pc);
|
extern HIDDEN void __glXDisp_Rectiv(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_Rectiv(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_Rectiv(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_VertexAttrib1fvNV(GLbyte * pc);
|
|
||||||
extern HIDDEN void __glXDispSwap_VertexAttrib1fvNV(GLbyte * pc);
|
|
||||||
extern HIDDEN void __glXDisp_SecondaryColor3dvEXT(GLbyte * pc);
|
extern HIDDEN void __glXDisp_SecondaryColor3dvEXT(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_SecondaryColor3dvEXT(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_SecondaryColor3dvEXT(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_Vertex2fv(GLbyte * pc);
|
extern HIDDEN void __glXDisp_Vertex2fv(GLbyte * pc);
|
||||||
|
@ -919,8 +921,6 @@ extern HIDDEN void __glXDisp_DrawBuffersARB(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_DrawBuffersARB(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_DrawBuffersARB(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_LoadName(GLbyte * pc);
|
extern HIDDEN void __glXDisp_LoadName(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_LoadName(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_LoadName(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_VertexAttribs4ubvNV(GLbyte * pc);
|
|
||||||
extern HIDDEN void __glXDispSwap_VertexAttribs4ubvNV(GLbyte * pc);
|
|
||||||
extern HIDDEN void __glXDisp_CopyTexSubImage1D(GLbyte * pc);
|
extern HIDDEN void __glXDisp_CopyTexSubImage1D(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDispSwap_CopyTexSubImage1D(GLbyte * pc);
|
extern HIDDEN void __glXDispSwap_CopyTexSubImage1D(GLbyte * pc);
|
||||||
extern HIDDEN void __glXDisp_CullFace(GLbyte * pc);
|
extern HIDDEN void __glXDisp_CullFace(GLbyte * pc);
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <X11/Xmd.h>
|
#include <X11/Xmd.h>
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glxproto.h>
|
#include <GL/glxproto.h>
|
||||||
#if defined(__linux__) || defined(__GNU__)
|
#if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
|
||||||
#include <byteswap.h>
|
#include <byteswap.h>
|
||||||
#elif defined(__OpenBSD__)
|
#elif defined(__OpenBSD__)
|
||||||
#include <sys/endian.h>
|
#include <sys/endian.h>
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
#include "dispatch.h"
|
#include "dispatch.h"
|
||||||
#include "glapioffsets.h"
|
#include "glapioffsets.h"
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
|
||||||
#include <byteswap.h>
|
#include <byteswap.h>
|
||||||
#elif defined(__OpenBSD__)
|
#elif defined(__OpenBSD__)
|
||||||
#include <sys/endian.h>
|
#include <sys/endian.h>
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#include "indirect_size.h"
|
#include "indirect_size.h"
|
||||||
#include "indirect_reqsize.h"
|
#include "indirect_reqsize.h"
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__GNU__)
|
#if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
|
||||||
# include <byteswap.h>
|
# include <byteswap.h>
|
||||||
# define SWAP_32(v) do { (v) = bswap_32(v); } while(0)
|
# define SWAP_32(v) do { (v) = bswap_32(v); } while(0)
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -645,7 +645,7 @@ static const void *Render_function_table[400][2] = {
|
||||||
/* [ 302] = 4182 */ {__glXDisp_RequestResidentProgramsNV, __glXDispSwap_RequestResidentProgramsNV},
|
/* [ 302] = 4182 */ {__glXDisp_RequestResidentProgramsNV, __glXDispSwap_RequestResidentProgramsNV},
|
||||||
/* [ 303] = 4183 */ {__glXDisp_LoadProgramNV, __glXDispSwap_LoadProgramNV},
|
/* [ 303] = 4183 */ {__glXDisp_LoadProgramNV, __glXDispSwap_LoadProgramNV},
|
||||||
/* [ 304] = 4184 */ {__glXDisp_ProgramParameter4fvNV, __glXDispSwap_ProgramParameter4fvNV},
|
/* [ 304] = 4184 */ {__glXDisp_ProgramParameter4fvNV, __glXDispSwap_ProgramParameter4fvNV},
|
||||||
/* [ 305] = 4185 */ {__glXDisp_ProgramParameter4dvNV, __glXDispSwap_ProgramParameter4dvNV},
|
/* [ 305] = 4185 */ {__glXDisp_ProgramEnvParameter4dvARB, __glXDispSwap_ProgramEnvParameter4dvARB},
|
||||||
/* [ 306] = 4186 */ {__glXDisp_ProgramParameters4fvNV, __glXDispSwap_ProgramParameters4fvNV},
|
/* [ 306] = 4186 */ {__glXDisp_ProgramParameters4fvNV, __glXDispSwap_ProgramParameters4fvNV},
|
||||||
/* [ 307] = 4187 */ {__glXDisp_ProgramParameters4dvNV, __glXDispSwap_ProgramParameters4dvNV},
|
/* [ 307] = 4187 */ {__glXDisp_ProgramParameters4dvNV, __glXDispSwap_ProgramParameters4dvNV},
|
||||||
/* [ 308] = 4188 */ {__glXDisp_TrackMatrixNV, __glXDispSwap_TrackMatrixNV},
|
/* [ 308] = 4188 */ {__glXDisp_TrackMatrixNV, __glXDispSwap_TrackMatrixNV},
|
||||||
|
@ -886,10 +886,10 @@ static const int_fast16_t Render_size_table[400][2] = {
|
||||||
/* [140] = 140 */ { 0, ~0},
|
/* [140] = 140 */ { 0, ~0},
|
||||||
/* [141] = 141 */ { 4, ~0},
|
/* [141] = 141 */ { 4, ~0},
|
||||||
/* [142] = 142 */ { 8, ~0},
|
/* [142] = 142 */ { 8, ~0},
|
||||||
/* [143] = 143 */ { 40, 20},
|
/* [143] = 143 */ { 28, 20},
|
||||||
/* [144] = 144 */ { 28, 21},
|
/* [144] = 144 */ { 20, 21},
|
||||||
/* [145] = 145 */ { 64, 22},
|
/* [145] = 145 */ { 48, 22},
|
||||||
/* [146] = 146 */ { 44, 23},
|
/* [146] = 146 */ { 32, 23},
|
||||||
/* [147] = 147 */ { 24, ~0},
|
/* [147] = 147 */ { 24, ~0},
|
||||||
/* [148] = 148 */ { 16, ~0},
|
/* [148] = 148 */ { 16, ~0},
|
||||||
/* [149] = 149 */ { 44, ~0},
|
/* [149] = 149 */ { 44, ~0},
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
#include "glthread.h"
|
#include "glthread.h"
|
||||||
#include "dispatch.h"
|
#include "dispatch.h"
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
|
||||||
#include <byteswap.h>
|
#include <byteswap.h>
|
||||||
#elif defined(__OpenBSD__)
|
#elif defined(__OpenBSD__)
|
||||||
#include <sys/endian.h>
|
#include <sys/endian.h>
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <X11/Xmd.h>
|
#include <X11/Xmd.h>
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glxproto.h>
|
#include <GL/glxproto.h>
|
||||||
#if defined(__linux__) || defined(__GNU__)
|
#if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
|
||||||
#include <byteswap.h>
|
#include <byteswap.h>
|
||||||
#elif defined(__OpenBSD__)
|
#elif defined(__OpenBSD__)
|
||||||
#include <sys/endian.h>
|
#include <sys/endian.h>
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
#include "dispatch.h"
|
#include "dispatch.h"
|
||||||
#include "glapioffsets.h"
|
#include "glapioffsets.h"
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
|
||||||
#include <byteswap.h>
|
#include <byteswap.h>
|
||||||
#elif defined(__OpenBSD__)
|
#elif defined(__OpenBSD__)
|
||||||
#include <sys/endian.h>
|
#include <sys/endian.h>
|
||||||
|
|
|
@ -1092,8 +1092,8 @@ int XETrapRequestVector(ClientPtr client)
|
||||||
pdata->hdr.client = client->index; /* stuff client index in hdr */
|
pdata->hdr.client = client->index; /* stuff client index in hdr */
|
||||||
if (BitIsTrue(penv->cur.data_config_flags_data,XETrapWinXY))
|
if (BitIsTrue(penv->cur.data_config_flags_data,XETrapWinXY))
|
||||||
{
|
{
|
||||||
window_ptr = (WindowPtr) LookupDrawable(stuff->id, client);
|
if (Success != dixLookupDrawable(&window_ptr, stuff->id,
|
||||||
if (window_ptr == 0L)
|
client, 0, DixUnknownAccess))
|
||||||
{ /* Failed...invalidate the X and Y coordinate data. */
|
{ /* Failed...invalidate the X and Y coordinate data. */
|
||||||
pdata->hdr.win_x = -1L;
|
pdata->hdr.win_x = -1L;
|
||||||
pdata->hdr.win_y = -1L;
|
pdata->hdr.win_y = -1L;
|
||||||
|
|
|
@ -355,13 +355,15 @@ int AttrValidate(
|
||||||
AppGroupPtr pAppGrp)
|
AppGroupPtr pAppGrp)
|
||||||
{
|
{
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
int idepth, ivids, found;
|
int idepth, ivids, found, rc;
|
||||||
ScreenPtr pScreen;
|
ScreenPtr pScreen;
|
||||||
DepthPtr pDepth;
|
DepthPtr pDepth;
|
||||||
ColormapPtr pColormap;
|
ColormapPtr pColormap;
|
||||||
|
|
||||||
pWin = LookupWindow (pAppGrp->default_root, client);
|
rc = dixLookupWindow(&pWin, pAppGrp->default_root, client,
|
||||||
/* XXX check that pWin is not NULL */
|
DixUnknownAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
pScreen = pWin->drawable.pScreen;
|
pScreen = pWin->drawable.pScreen;
|
||||||
if (WindowTable[pScreen->myNum]->drawable.id != pAppGrp->default_root)
|
if (WindowTable[pScreen->myNum]->drawable.id != pAppGrp->default_root)
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
@ -432,7 +434,7 @@ int ProcXagDestroy(
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xXagDestroyReq);
|
REQUEST_SIZE_MATCH (xXagDestroyReq);
|
||||||
pAppGrp = (AppGroupPtr)SecurityLookupIDByType (client,
|
pAppGrp = (AppGroupPtr)SecurityLookupIDByType (client,
|
||||||
(XID)stuff->app_group, RT_APPGROUP, SecurityReadAccess);
|
(XID)stuff->app_group, RT_APPGROUP, DixReadAccess);
|
||||||
if (!pAppGrp) return XagBadAppGroup;
|
if (!pAppGrp) return XagBadAppGroup;
|
||||||
FreeResource ((XID)stuff->app_group, RT_NONE);
|
FreeResource ((XID)stuff->app_group, RT_NONE);
|
||||||
if (--XagCallbackRefCount == 0)
|
if (--XagCallbackRefCount == 0)
|
||||||
|
@ -451,7 +453,7 @@ int ProcXagGetAttr(
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xXagGetAttrReq);
|
REQUEST_SIZE_MATCH (xXagGetAttrReq);
|
||||||
pAppGrp = (AppGroupPtr)SecurityLookupIDByType (client,
|
pAppGrp = (AppGroupPtr)SecurityLookupIDByType (client,
|
||||||
(XID)stuff->app_group, RT_APPGROUP, SecurityReadAccess);
|
(XID)stuff->app_group, RT_APPGROUP, DixReadAccess);
|
||||||
if (!pAppGrp) return XagBadAppGroup;
|
if (!pAppGrp) return XagBadAppGroup;
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
|
@ -483,10 +485,13 @@ int ProcXagQuery(
|
||||||
ClientPtr pClient;
|
ClientPtr pClient;
|
||||||
AppGroupPtr pAppGrp;
|
AppGroupPtr pAppGrp;
|
||||||
REQUEST (xXagQueryReq);
|
REQUEST (xXagQueryReq);
|
||||||
int n;
|
int n, rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xXagQueryReq);
|
REQUEST_SIZE_MATCH (xXagQueryReq);
|
||||||
pClient = LookupClient (stuff->resource, client);
|
rc = dixLookupClient(&pClient, stuff->resource, client, DixUnknownAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
|
||||||
for (pAppGrp = appGrpList; pAppGrp != NULL; pAppGrp = pAppGrp->next)
|
for (pAppGrp = appGrpList; pAppGrp != NULL; pAppGrp = pAppGrp->next)
|
||||||
for (n = 0; n < pAppGrp->nclients; n++)
|
for (n = 0; n < pAppGrp->nclients; n++)
|
||||||
if (pAppGrp->clients[n] == pClient) {
|
if (pAppGrp->clients[n] == pClient) {
|
||||||
|
|
|
@ -227,7 +227,7 @@ int ProcStoreColors(
|
||||||
|
|
||||||
REQUEST_AT_LEAST_SIZE (xXcupStoreColorsReq);
|
REQUEST_AT_LEAST_SIZE (xXcupStoreColorsReq);
|
||||||
pcmp = (ColormapPtr) SecurityLookupIDByType (client, stuff->cmap,
|
pcmp = (ColormapPtr) SecurityLookupIDByType (client, stuff->cmap,
|
||||||
RT_COLORMAP, SecurityWriteAccess);
|
RT_COLORMAP, DixWriteAccess);
|
||||||
|
|
||||||
if (pcmp) {
|
if (pcmp) {
|
||||||
int ncolors, n;
|
int ncolors, n;
|
||||||
|
|
41
Xext/mbuf.c
41
Xext/mbuf.c
|
@ -448,16 +448,15 @@ ProcCreateImageBuffers (client)
|
||||||
register int n;
|
register int n;
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
XID *ids;
|
XID *ids;
|
||||||
int len, nbuf;
|
int len, nbuf, i, err, rc;
|
||||||
int i;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
REQUEST_AT_LEAST_SIZE (xMbufCreateImageBuffersReq);
|
REQUEST_AT_LEAST_SIZE (xMbufCreateImageBuffersReq);
|
||||||
len = stuff->length - (sizeof(xMbufCreateImageBuffersReq) >> 2);
|
len = stuff->length - (sizeof(xMbufCreateImageBuffersReq) >> 2);
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
return BadLength;
|
return BadLength;
|
||||||
if (!(pWin = LookupWindow (stuff->window, client)))
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
return BadWindow;
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
if (pWin->drawable.class == InputOnly)
|
if (pWin->drawable.class == InputOnly)
|
||||||
return BadMatch;
|
return BadMatch;
|
||||||
switch (stuff->updateAction)
|
switch (stuff->updateAction)
|
||||||
|
@ -584,10 +583,12 @@ ProcDestroyImageBuffers (client)
|
||||||
{
|
{
|
||||||
REQUEST (xMbufDestroyImageBuffersReq);
|
REQUEST (xMbufDestroyImageBuffersReq);
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xMbufDestroyImageBuffersReq);
|
REQUEST_SIZE_MATCH (xMbufDestroyImageBuffersReq);
|
||||||
if (!(pWin = LookupWindow (stuff->window, client)))
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
return BadWindow;
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
DestroyImageBuffers (pWin);
|
DestroyImageBuffers (pWin);
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
@ -599,16 +600,16 @@ ProcSetMBufferAttributes (client)
|
||||||
REQUEST (xMbufSetMBufferAttributesReq);
|
REQUEST (xMbufSetMBufferAttributesReq);
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
MultibuffersPtr pMultibuffers;
|
MultibuffersPtr pMultibuffers;
|
||||||
int len;
|
int len, rc;
|
||||||
Mask vmask;
|
Mask vmask;
|
||||||
Mask index2;
|
Mask index2;
|
||||||
CARD32 updateHint;
|
CARD32 updateHint;
|
||||||
XID *vlist;
|
XID *vlist;
|
||||||
|
|
||||||
REQUEST_AT_LEAST_SIZE (xMbufSetMBufferAttributesReq);
|
REQUEST_AT_LEAST_SIZE (xMbufSetMBufferAttributesReq);
|
||||||
pWin = LookupWindow (stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType);
|
pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType);
|
||||||
if (!pMultibuffers)
|
if (!pMultibuffers)
|
||||||
return BadMatch;
|
return BadMatch;
|
||||||
|
@ -655,12 +656,12 @@ ProcGetMBufferAttributes (client)
|
||||||
MultibuffersPtr pMultibuffers;
|
MultibuffersPtr pMultibuffers;
|
||||||
XID *ids;
|
XID *ids;
|
||||||
xMbufGetMBufferAttributesReply rep;
|
xMbufGetMBufferAttributesReply rep;
|
||||||
int i, n;
|
int i, n, rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xMbufGetMBufferAttributesReq);
|
REQUEST_SIZE_MATCH (xMbufGetMBufferAttributesReq);
|
||||||
pWin = LookupWindow (stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType);
|
pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType);
|
||||||
if (!pMultibuffers)
|
if (!pMultibuffers)
|
||||||
return BadAccess;
|
return BadAccess;
|
||||||
|
@ -785,15 +786,15 @@ ProcGetBufferInfo (client)
|
||||||
DrawablePtr pDrawable;
|
DrawablePtr pDrawable;
|
||||||
xMbufGetBufferInfoReply rep;
|
xMbufGetBufferInfoReply rep;
|
||||||
ScreenPtr pScreen;
|
ScreenPtr pScreen;
|
||||||
int i, j, k;
|
int i, j, k, n, rc;
|
||||||
int n;
|
|
||||||
xMbufBufferInfo *pInfo;
|
xMbufBufferInfo *pInfo;
|
||||||
int nInfo;
|
int nInfo;
|
||||||
DepthPtr pDepth;
|
DepthPtr pDepth;
|
||||||
|
|
||||||
pDrawable = (DrawablePtr) LookupDrawable (stuff->drawable, client);
|
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||||
if (!pDrawable)
|
DixUnknownAccess);
|
||||||
return BadDrawable;
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
pScreen = pDrawable->pScreen;
|
pScreen = pDrawable->pScreen;
|
||||||
nInfo = 0;
|
nInfo = 0;
|
||||||
for (i = 0; i < pScreen->numDepths; i++)
|
for (i = 0; i < pScreen->numDepths; i++)
|
||||||
|
|
|
@ -958,12 +958,13 @@ ProcPanoramiXGetState(ClientPtr client)
|
||||||
REQUEST(xPanoramiXGetStateReq);
|
REQUEST(xPanoramiXGetStateReq);
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
xPanoramiXGetStateReply rep;
|
xPanoramiXGetStateReply rep;
|
||||||
register int n;
|
register int n, rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xPanoramiXGetStateReq);
|
REQUEST_SIZE_MATCH(xPanoramiXGetStateReq);
|
||||||
pWin = LookupWindow (stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
|
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
|
@ -984,12 +985,13 @@ ProcPanoramiXGetScreenCount(ClientPtr client)
|
||||||
REQUEST(xPanoramiXGetScreenCountReq);
|
REQUEST(xPanoramiXGetScreenCountReq);
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
xPanoramiXGetScreenCountReply rep;
|
xPanoramiXGetScreenCountReply rep;
|
||||||
register int n;
|
register int n, rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq);
|
REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq);
|
||||||
pWin = LookupWindow (stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
|
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
|
@ -1009,12 +1011,13 @@ ProcPanoramiXGetScreenSize(ClientPtr client)
|
||||||
REQUEST(xPanoramiXGetScreenSizeReq);
|
REQUEST(xPanoramiXGetScreenSizeReq);
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
xPanoramiXGetScreenSizeReply rep;
|
xPanoramiXGetScreenSizeReply rep;
|
||||||
register int n;
|
register int n, rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
|
REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
|
||||||
pWin = LookupWindow (stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
|
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
|
|
|
@ -91,7 +91,7 @@ int PanoramiXCreateWindow(ClientPtr client)
|
||||||
return BadLength;
|
return BadLength;
|
||||||
|
|
||||||
if (!(parent = (PanoramiXRes *)SecurityLookupIDByType(
|
if (!(parent = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->parent, XRT_WINDOW, SecurityWriteAccess)))
|
client, stuff->parent, XRT_WINDOW, DixWriteAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
if(stuff->class == CopyFromParent)
|
if(stuff->class == CopyFromParent)
|
||||||
|
@ -105,7 +105,7 @@ int PanoramiXCreateWindow(ClientPtr client)
|
||||||
tmp = *((CARD32 *) &stuff[1] + pback_offset);
|
tmp = *((CARD32 *) &stuff[1] + pback_offset);
|
||||||
if ((tmp != None) && (tmp != ParentRelative)) {
|
if ((tmp != None) && (tmp != ParentRelative)) {
|
||||||
if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,7 @@ int PanoramiXCreateWindow(ClientPtr client)
|
||||||
tmp = *((CARD32 *) &stuff[1] + pbord_offset);
|
tmp = *((CARD32 *) &stuff[1] + pbord_offset);
|
||||||
if (tmp != CopyFromParent) {
|
if (tmp != CopyFromParent) {
|
||||||
if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ int PanoramiXCreateWindow(ClientPtr client)
|
||||||
tmp = *((CARD32 *) &stuff[1] + cmap_offset);
|
tmp = *((CARD32 *) &stuff[1] + cmap_offset);
|
||||||
if ((tmp != CopyFromParent) && (tmp != None)) {
|
if ((tmp != CopyFromParent) && (tmp != None)) {
|
||||||
if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_COLORMAP, SecurityReadAccess)))
|
client, tmp, XRT_COLORMAP, DixReadAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -192,7 +192,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client)
|
||||||
return BadLength;
|
return BadLength;
|
||||||
|
|
||||||
if (!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if (!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->window, XRT_WINDOW, SecurityWriteAccess)))
|
client, stuff->window, XRT_WINDOW, DixWriteAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
if((win->u.win.class == InputOnly) &&
|
if((win->u.win.class == InputOnly) &&
|
||||||
|
@ -204,7 +204,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client)
|
||||||
tmp = *((CARD32 *) &stuff[1] + pback_offset);
|
tmp = *((CARD32 *) &stuff[1] + pback_offset);
|
||||||
if ((tmp != None) && (tmp != ParentRelative)) {
|
if ((tmp != None) && (tmp != ParentRelative)) {
|
||||||
if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -213,7 +213,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client)
|
||||||
tmp = *((CARD32 *) &stuff[1] + pbord_offset);
|
tmp = *((CARD32 *) &stuff[1] + pbord_offset);
|
||||||
if (tmp != CopyFromParent) {
|
if (tmp != CopyFromParent) {
|
||||||
if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -222,7 +222,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client)
|
||||||
tmp = *((CARD32 *) &stuff[1] + cmap_offset);
|
tmp = *((CARD32 *) &stuff[1] + cmap_offset);
|
||||||
if ((tmp != CopyFromParent) && (tmp != None)) {
|
if ((tmp != CopyFromParent) && (tmp != None)) {
|
||||||
if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_COLORMAP, SecurityReadAccess)))
|
client, tmp, XRT_COLORMAP, DixReadAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -251,7 +251,7 @@ int PanoramiXDestroyWindow(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xResourceReq);
|
REQUEST_SIZE_MATCH(xResourceReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->id, XRT_WINDOW, SecurityDestroyAccess)))
|
client, stuff->id, XRT_WINDOW, DixDestroyAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j) {
|
FOR_NSCREENS_BACKWARD(j) {
|
||||||
|
@ -276,7 +276,7 @@ int PanoramiXDestroySubwindows(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xResourceReq);
|
REQUEST_SIZE_MATCH(xResourceReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->id, XRT_WINDOW, SecurityDestroyAccess)))
|
client, stuff->id, XRT_WINDOW, DixDestroyAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j) {
|
FOR_NSCREENS_BACKWARD(j) {
|
||||||
|
@ -301,7 +301,7 @@ int PanoramiXChangeSaveSet(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xChangeSaveSetReq);
|
REQUEST_SIZE_MATCH(xChangeSaveSetReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->window, XRT_WINDOW, SecurityReadAccess)))
|
client, stuff->window, XRT_WINDOW, DixReadAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j) {
|
FOR_NSCREENS_BACKWARD(j) {
|
||||||
|
@ -325,11 +325,11 @@ int PanoramiXReparentWindow(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xReparentWindowReq);
|
REQUEST_SIZE_MATCH(xReparentWindowReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->window, XRT_WINDOW, SecurityWriteAccess)))
|
client, stuff->window, XRT_WINDOW, DixWriteAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
if(!(parent = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(parent = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->parent, XRT_WINDOW, SecurityWriteAccess)))
|
client, stuff->parent, XRT_WINDOW, DixWriteAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
x = stuff->x;
|
x = stuff->x;
|
||||||
|
@ -360,7 +360,7 @@ int PanoramiXMapWindow(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xResourceReq);
|
REQUEST_SIZE_MATCH(xResourceReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->id, XRT_WINDOW, SecurityReadAccess)))
|
client, stuff->id, XRT_WINDOW, DixReadAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
FOR_NSCREENS_FORWARD(j) {
|
FOR_NSCREENS_FORWARD(j) {
|
||||||
|
@ -382,7 +382,7 @@ int PanoramiXMapSubwindows(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xResourceReq);
|
REQUEST_SIZE_MATCH(xResourceReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->id, XRT_WINDOW, SecurityReadAccess)))
|
client, stuff->id, XRT_WINDOW, DixReadAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
FOR_NSCREENS_FORWARD(j) {
|
FOR_NSCREENS_FORWARD(j) {
|
||||||
|
@ -404,7 +404,7 @@ int PanoramiXUnmapWindow(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xResourceReq);
|
REQUEST_SIZE_MATCH(xResourceReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->id, XRT_WINDOW, SecurityReadAccess)))
|
client, stuff->id, XRT_WINDOW, DixReadAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
FOR_NSCREENS_FORWARD(j) {
|
FOR_NSCREENS_FORWARD(j) {
|
||||||
|
@ -426,7 +426,7 @@ int PanoramiXUnmapSubwindows(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xResourceReq);
|
REQUEST_SIZE_MATCH(xResourceReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->id, XRT_WINDOW, SecurityReadAccess)))
|
client, stuff->id, XRT_WINDOW, DixReadAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
FOR_NSCREENS_FORWARD(j) {
|
FOR_NSCREENS_FORWARD(j) {
|
||||||
|
@ -457,11 +457,11 @@ int PanoramiXConfigureWindow(ClientPtr client)
|
||||||
|
|
||||||
/* because we need the parent */
|
/* because we need the parent */
|
||||||
if (!(pWin = (WindowPtr)SecurityLookupIDByType(
|
if (!(pWin = (WindowPtr)SecurityLookupIDByType(
|
||||||
client, stuff->window, RT_WINDOW, SecurityWriteAccess)))
|
client, stuff->window, RT_WINDOW, DixWriteAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
if (!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if (!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->window, XRT_WINDOW, SecurityWriteAccess)))
|
client, stuff->window, XRT_WINDOW, DixWriteAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
if ((Mask)stuff->mask & CWSibling) {
|
if ((Mask)stuff->mask & CWSibling) {
|
||||||
|
@ -469,7 +469,7 @@ int PanoramiXConfigureWindow(ClientPtr client)
|
||||||
sib_offset = Ones((Mask)stuff->mask & (CWSibling - 1));
|
sib_offset = Ones((Mask)stuff->mask & (CWSibling - 1));
|
||||||
if ((tmp = *((CARD32 *) &stuff[1] + sib_offset))) {
|
if ((tmp = *((CARD32 *) &stuff[1] + sib_offset))) {
|
||||||
if(!(sib = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(sib = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_WINDOW, SecurityReadAccess)))
|
client, tmp, XRT_WINDOW, DixReadAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -514,7 +514,7 @@ int PanoramiXCirculateWindow(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xCirculateWindowReq);
|
REQUEST_SIZE_MATCH(xCirculateWindowReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->window, XRT_WINDOW, SecurityWriteAccess)))
|
client, stuff->window, XRT_WINDOW, DixWriteAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
FOR_NSCREENS_FORWARD(j) {
|
FOR_NSCREENS_FORWARD(j) {
|
||||||
|
@ -531,10 +531,14 @@ int PanoramiXGetGeometry(ClientPtr client)
|
||||||
{
|
{
|
||||||
xGetGeometryReply rep;
|
xGetGeometryReply rep;
|
||||||
DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
|
int rc;
|
||||||
REQUEST(xResourceReq);
|
REQUEST(xResourceReq);
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xResourceReq);
|
REQUEST_SIZE_MATCH(xResourceReq);
|
||||||
VERIFY_GEOMETRABLE (pDraw, stuff->id, client);
|
rc = dixLookupDrawable(&pDraw, stuff->id, client, M_ANY, DixUnknownAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
|
@ -573,19 +577,17 @@ int PanoramiXTranslateCoords(ClientPtr client)
|
||||||
{
|
{
|
||||||
INT16 x, y;
|
INT16 x, y;
|
||||||
REQUEST(xTranslateCoordsReq);
|
REQUEST(xTranslateCoordsReq);
|
||||||
|
int rc;
|
||||||
register WindowPtr pWin, pDst;
|
WindowPtr pWin, pDst;
|
||||||
xTranslateCoordsReply rep;
|
xTranslateCoordsReply rep;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xTranslateCoordsReq);
|
REQUEST_SIZE_MATCH(xTranslateCoordsReq);
|
||||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->srcWid, client,
|
rc = dixLookupWindow(&pWin, stuff->srcWid, client, DixReadAccess);
|
||||||
SecurityReadAccess);
|
if (rc != Success)
|
||||||
if (!pWin)
|
return rc;
|
||||||
return(BadWindow);
|
rc = dixLookupWindow(&pDst, stuff->dstWid, client, DixReadAccess);
|
||||||
pDst = (WindowPtr)SecurityLookupWindow(stuff->dstWid, client,
|
if (rc != Success)
|
||||||
SecurityReadAccess);
|
return rc;
|
||||||
if (!pDst)
|
|
||||||
return(BadWindow);
|
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
|
@ -655,7 +657,7 @@ int PanoramiXCreatePixmap(ClientPtr client)
|
||||||
client->errorValue = stuff->pid;
|
client->errorValue = stuff->pid;
|
||||||
|
|
||||||
if(!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityReadAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixReadAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(!(newPix = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
|
if(!(newPix = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
|
||||||
|
@ -694,7 +696,7 @@ int PanoramiXFreePixmap(ClientPtr client)
|
||||||
client->errorValue = stuff->id;
|
client->errorValue = stuff->id;
|
||||||
|
|
||||||
if(!(pix = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(pix = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->id, XRT_PIXMAP, SecurityDestroyAccess)))
|
client, stuff->id, XRT_PIXMAP, DixDestroyAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j) {
|
FOR_NSCREENS_BACKWARD(j) {
|
||||||
|
@ -730,14 +732,14 @@ int PanoramiXCreateGC(ClientPtr client)
|
||||||
return BadLength;
|
return BadLength;
|
||||||
|
|
||||||
if (!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if (!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityReadAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixReadAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if ((Mask)stuff->mask & GCTile) {
|
if ((Mask)stuff->mask & GCTile) {
|
||||||
tile_offset = Ones((Mask)stuff->mask & (GCTile - 1));
|
tile_offset = Ones((Mask)stuff->mask & (GCTile - 1));
|
||||||
if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) {
|
if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) {
|
||||||
if(!(tile = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(tile = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -745,7 +747,7 @@ int PanoramiXCreateGC(ClientPtr client)
|
||||||
stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1));
|
stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1));
|
||||||
if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) {
|
if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) {
|
||||||
if(!(stip = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(stip = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -753,7 +755,7 @@ int PanoramiXCreateGC(ClientPtr client)
|
||||||
clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1));
|
clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1));
|
||||||
if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) {
|
if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) {
|
||||||
if(!(clip = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(clip = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -805,14 +807,14 @@ int PanoramiXChangeGC(ClientPtr client)
|
||||||
return BadLength;
|
return BadLength;
|
||||||
|
|
||||||
if (!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if (!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
if ((Mask)stuff->mask & GCTile) {
|
if ((Mask)stuff->mask & GCTile) {
|
||||||
tile_offset = Ones((Mask)stuff->mask & (GCTile - 1));
|
tile_offset = Ones((Mask)stuff->mask & (GCTile - 1));
|
||||||
if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) {
|
if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) {
|
||||||
if(!(tile = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(tile = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -820,7 +822,7 @@ int PanoramiXChangeGC(ClientPtr client)
|
||||||
stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1));
|
stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1));
|
||||||
if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) {
|
if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) {
|
||||||
if(!(stip = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(stip = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -828,7 +830,7 @@ int PanoramiXChangeGC(ClientPtr client)
|
||||||
clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1));
|
clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1));
|
||||||
if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) {
|
if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) {
|
||||||
if(!(clip = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(clip = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -859,11 +861,11 @@ int PanoramiXCopyGC(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xCopyGCReq);
|
REQUEST_SIZE_MATCH(xCopyGCReq);
|
||||||
|
|
||||||
if(!(srcGC = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(srcGC = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->srcGC, XRT_GC, SecurityReadAccess)))
|
client, stuff->srcGC, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
if(!(dstGC = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(dstGC = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->dstGC, XRT_GC, SecurityWriteAccess)))
|
client, stuff->dstGC, XRT_GC, DixWriteAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
FOR_NSCREENS(j) {
|
FOR_NSCREENS(j) {
|
||||||
|
@ -886,7 +888,7 @@ int PanoramiXSetDashes(ClientPtr client)
|
||||||
REQUEST_FIXED_SIZE(xSetDashesReq, stuff->nDashes);
|
REQUEST_FIXED_SIZE(xSetDashesReq, stuff->nDashes);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityWriteAccess)))
|
client, stuff->gc, XRT_GC, DixWriteAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j) {
|
FOR_NSCREENS_BACKWARD(j) {
|
||||||
|
@ -908,7 +910,7 @@ int PanoramiXSetClipRectangles(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xSetClipRectanglesReq);
|
REQUEST_AT_LEAST_SIZE(xSetClipRectanglesReq);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityWriteAccess)))
|
client, stuff->gc, XRT_GC, DixWriteAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j) {
|
FOR_NSCREENS_BACKWARD(j) {
|
||||||
|
@ -930,7 +932,7 @@ int PanoramiXFreeGC(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xResourceReq);
|
REQUEST_SIZE_MATCH(xResourceReq);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->id, XRT_GC, SecurityDestroyAccess)))
|
client, stuff->id, XRT_GC, DixDestroyAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j) {
|
FOR_NSCREENS_BACKWARD(j) {
|
||||||
|
@ -956,7 +958,7 @@ int PanoramiXClearToBackground(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xClearAreaReq);
|
REQUEST_SIZE_MATCH(xClearAreaReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->window, XRT_WINDOW, SecurityWriteAccess)))
|
client, stuff->window, XRT_WINDOW, DixWriteAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
x = stuff->x;
|
x = stuff->x;
|
||||||
|
@ -998,13 +1000,13 @@ int PanoramiXCopyArea(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xCopyAreaReq);
|
REQUEST_SIZE_MATCH(xCopyAreaReq);
|
||||||
|
|
||||||
if(!(src = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(src = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->srcDrawable, XRC_DRAWABLE, SecurityReadAccess)))
|
client, stuff->srcDrawable, XRC_DRAWABLE, DixReadAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
srcShared = IS_SHARED_PIXMAP(src);
|
srcShared = IS_SHARED_PIXMAP(src);
|
||||||
|
|
||||||
if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->dstDrawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->dstDrawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
dstShared = IS_SHARED_PIXMAP(dst);
|
dstShared = IS_SHARED_PIXMAP(dst);
|
||||||
|
@ -1013,7 +1015,7 @@ int PanoramiXCopyArea(ClientPtr client)
|
||||||
return (* SavedProcVector[X_CopyArea])(client);
|
return (* SavedProcVector[X_CopyArea])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
if((dst->type == XRT_WINDOW) && dst->u.win.root)
|
if((dst->type == XRT_WINDOW) && dst->u.win.root)
|
||||||
|
@ -1028,10 +1030,14 @@ int PanoramiXCopyArea(ClientPtr client)
|
||||||
DrawablePtr pDst;
|
DrawablePtr pDst;
|
||||||
GCPtr pGC;
|
GCPtr pGC;
|
||||||
char *data;
|
char *data;
|
||||||
int pitch;
|
int pitch, rc;
|
||||||
|
|
||||||
FOR_NSCREENS(j)
|
FOR_NSCREENS(j) {
|
||||||
VERIFY_DRAWABLE(drawables[j], src->info[j].id, client);
|
rc = dixLookupDrawable(drawables+j, src->info[j].id, client, 0,
|
||||||
|
DixUnknownAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
pitch = PixmapBytePad(stuff->width, drawables[0]->depth);
|
pitch = PixmapBytePad(stuff->width, drawables[0]->depth);
|
||||||
if(!(data = xcalloc(1, stuff->height * pitch)))
|
if(!(data = xcalloc(1, stuff->height * pitch)))
|
||||||
|
@ -1065,6 +1071,7 @@ int PanoramiXCopyArea(ClientPtr client)
|
||||||
DrawablePtr pDst = NULL, pSrc = NULL;
|
DrawablePtr pDst = NULL, pSrc = NULL;
|
||||||
GCPtr pGC = NULL;
|
GCPtr pGC = NULL;
|
||||||
RegionPtr pRgn[MAXSCREENS];
|
RegionPtr pRgn[MAXSCREENS];
|
||||||
|
int rc;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j) {
|
FOR_NSCREENS_BACKWARD(j) {
|
||||||
stuff->dstDrawable = dst->info[j].id;
|
stuff->dstDrawable = dst->info[j].id;
|
||||||
|
@ -1081,8 +1088,11 @@ int PanoramiXCopyArea(ClientPtr client)
|
||||||
|
|
||||||
VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pDst, pGC, client);
|
VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pDst, pGC, client);
|
||||||
if (stuff->dstDrawable != stuff->srcDrawable) {
|
if (stuff->dstDrawable != stuff->srcDrawable) {
|
||||||
SECURITY_VERIFY_DRAWABLE(pSrc, stuff->srcDrawable, client,
|
rc = dixLookupDrawable(&pSrc, stuff->srcDrawable, client, 0,
|
||||||
SecurityReadAccess);
|
DixReadAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
|
||||||
if ((pDst->pScreen != pSrc->pScreen) ||
|
if ((pDst->pScreen != pSrc->pScreen) ||
|
||||||
(pDst->depth != pSrc->depth)) {
|
(pDst->depth != pSrc->depth)) {
|
||||||
client->errorValue = stuff->dstDrawable;
|
client->errorValue = stuff->dstDrawable;
|
||||||
|
@ -1133,7 +1143,7 @@ int PanoramiXCopyArea(ClientPtr client)
|
||||||
|
|
||||||
int PanoramiXCopyPlane(ClientPtr client)
|
int PanoramiXCopyPlane(ClientPtr client)
|
||||||
{
|
{
|
||||||
int j, srcx, srcy, dstx, dsty;
|
int j, srcx, srcy, dstx, dsty, rc;
|
||||||
PanoramiXRes *gc, *src, *dst;
|
PanoramiXRes *gc, *src, *dst;
|
||||||
Bool srcIsRoot = FALSE;
|
Bool srcIsRoot = FALSE;
|
||||||
Bool dstIsRoot = FALSE;
|
Bool dstIsRoot = FALSE;
|
||||||
|
@ -1146,13 +1156,13 @@ int PanoramiXCopyPlane(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xCopyPlaneReq);
|
REQUEST_SIZE_MATCH(xCopyPlaneReq);
|
||||||
|
|
||||||
if(!(src = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(src = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->srcDrawable, XRC_DRAWABLE, SecurityReadAccess)))
|
client, stuff->srcDrawable, XRC_DRAWABLE, DixReadAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
srcShared = IS_SHARED_PIXMAP(src);
|
srcShared = IS_SHARED_PIXMAP(src);
|
||||||
|
|
||||||
if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->dstDrawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->dstDrawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
dstShared = IS_SHARED_PIXMAP(dst);
|
dstShared = IS_SHARED_PIXMAP(dst);
|
||||||
|
@ -1161,7 +1171,7 @@ int PanoramiXCopyPlane(ClientPtr client)
|
||||||
return (* SavedProcVector[X_CopyPlane])(client);
|
return (* SavedProcVector[X_CopyPlane])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
if((dst->type == XRT_WINDOW) && dst->u.win.root)
|
if((dst->type == XRT_WINDOW) && dst->u.win.root)
|
||||||
|
@ -1187,8 +1197,11 @@ int PanoramiXCopyPlane(ClientPtr client)
|
||||||
|
|
||||||
VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pdstDraw, pGC, client);
|
VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pdstDraw, pGC, client);
|
||||||
if (stuff->dstDrawable != stuff->srcDrawable) {
|
if (stuff->dstDrawable != stuff->srcDrawable) {
|
||||||
SECURITY_VERIFY_DRAWABLE(psrcDraw, stuff->srcDrawable, client,
|
rc = dixLookupDrawable(&psrcDraw, stuff->srcDrawable, client, 0,
|
||||||
SecurityReadAccess);
|
DixReadAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
|
||||||
if (pdstDraw->pScreen != psrcDraw->pScreen) {
|
if (pdstDraw->pScreen != psrcDraw->pScreen) {
|
||||||
client->errorValue = stuff->dstDrawable;
|
client->errorValue = stuff->dstDrawable;
|
||||||
return (BadMatch);
|
return (BadMatch);
|
||||||
|
@ -1246,14 +1259,14 @@ int PanoramiXPolyPoint(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xPolyPointReq);
|
REQUEST_AT_LEAST_SIZE(xPolyPointReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(IS_SHARED_PIXMAP(draw))
|
if(IS_SHARED_PIXMAP(draw))
|
||||||
return (*SavedProcVector[X_PolyPoint])(client);
|
return (*SavedProcVector[X_PolyPoint])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -1304,14 +1317,14 @@ int PanoramiXPolyLine(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xPolyLineReq);
|
REQUEST_AT_LEAST_SIZE(xPolyLineReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(IS_SHARED_PIXMAP(draw))
|
if(IS_SHARED_PIXMAP(draw))
|
||||||
return (*SavedProcVector[X_PolyLine])(client);
|
return (*SavedProcVector[X_PolyLine])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -1362,14 +1375,14 @@ int PanoramiXPolySegment(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xPolySegmentReq);
|
REQUEST_AT_LEAST_SIZE(xPolySegmentReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(IS_SHARED_PIXMAP(draw))
|
if(IS_SHARED_PIXMAP(draw))
|
||||||
return (*SavedProcVector[X_PolySegment])(client);
|
return (*SavedProcVector[X_PolySegment])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -1424,14 +1437,14 @@ int PanoramiXPolyRectangle(ClientPtr client)
|
||||||
|
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(IS_SHARED_PIXMAP(draw))
|
if(IS_SHARED_PIXMAP(draw))
|
||||||
return (*SavedProcVector[X_PolyRectangle])(client);
|
return (*SavedProcVector[X_PolyRectangle])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -1484,14 +1497,14 @@ int PanoramiXPolyArc(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xPolyArcReq);
|
REQUEST_AT_LEAST_SIZE(xPolyArcReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(IS_SHARED_PIXMAP(draw))
|
if(IS_SHARED_PIXMAP(draw))
|
||||||
return (*SavedProcVector[X_PolyArc])(client);
|
return (*SavedProcVector[X_PolyArc])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -1542,14 +1555,14 @@ int PanoramiXFillPoly(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xFillPolyReq);
|
REQUEST_AT_LEAST_SIZE(xFillPolyReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(IS_SHARED_PIXMAP(draw))
|
if(IS_SHARED_PIXMAP(draw))
|
||||||
return (*SavedProcVector[X_FillPoly])(client);
|
return (*SavedProcVector[X_FillPoly])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -1601,14 +1614,14 @@ int PanoramiXPolyFillRectangle(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xPolyFillRectangleReq);
|
REQUEST_AT_LEAST_SIZE(xPolyFillRectangleReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(IS_SHARED_PIXMAP(draw))
|
if(IS_SHARED_PIXMAP(draw))
|
||||||
return (*SavedProcVector[X_PolyFillRectangle])(client);
|
return (*SavedProcVector[X_PolyFillRectangle])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -1660,14 +1673,14 @@ int PanoramiXPolyFillArc(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xPolyFillArcReq);
|
REQUEST_AT_LEAST_SIZE(xPolyFillArcReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(IS_SHARED_PIXMAP(draw))
|
if(IS_SHARED_PIXMAP(draw))
|
||||||
return (*SavedProcVector[X_PolyFillArc])(client);
|
return (*SavedProcVector[X_PolyFillArc])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -1718,14 +1731,14 @@ int PanoramiXPutImage(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xPutImageReq);
|
REQUEST_AT_LEAST_SIZE(xPutImageReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(IS_SHARED_PIXMAP(draw))
|
if(IS_SHARED_PIXMAP(draw))
|
||||||
return (*SavedProcVector[X_PutImage])(client);
|
return (*SavedProcVector[X_PutImage])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -1754,7 +1767,7 @@ int PanoramiXGetImage(ClientPtr client)
|
||||||
xGetImageReply xgi;
|
xGetImageReply xgi;
|
||||||
Bool isRoot;
|
Bool isRoot;
|
||||||
char *pBuf;
|
char *pBuf;
|
||||||
int i, x, y, w, h, format;
|
int i, x, y, w, h, format, rc;
|
||||||
Mask plane = 0, planemask;
|
Mask plane = 0, planemask;
|
||||||
int linesDone, nlines, linesPerBuf;
|
int linesDone, nlines, linesPerBuf;
|
||||||
long widthBytesLine, length;
|
long widthBytesLine, length;
|
||||||
|
@ -1769,13 +1782,16 @@ int PanoramiXGetImage(ClientPtr client)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(draw->type == XRT_PIXMAP)
|
if(draw->type == XRT_PIXMAP)
|
||||||
return (*SavedProcVector[X_GetImage])(client);
|
return (*SavedProcVector[X_GetImage])(client);
|
||||||
|
|
||||||
VERIFY_DRAWABLE(pDraw, stuff->drawable, client);
|
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
|
||||||
|
DixUnknownAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
|
||||||
if(!((WindowPtr)pDraw)->realized)
|
if(!((WindowPtr)pDraw)->realized)
|
||||||
return(BadMatch);
|
return(BadMatch);
|
||||||
|
@ -1809,8 +1825,12 @@ int PanoramiXGetImage(ClientPtr client)
|
||||||
}
|
}
|
||||||
|
|
||||||
drawables[0] = pDraw;
|
drawables[0] = pDraw;
|
||||||
for(i = 1; i < PanoramiXNumScreens; i++)
|
for(i = 1; i < PanoramiXNumScreens; i++) {
|
||||||
VERIFY_DRAWABLE(drawables[i], draw->info[i].id, client);
|
rc = dixLookupDrawable(drawables+i, draw->info[i].id, client, 0,
|
||||||
|
DixUnknownAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
xgi.visual = wVisual (((WindowPtr) pDraw));
|
xgi.visual = wVisual (((WindowPtr) pDraw));
|
||||||
xgi.type = X_Reply;
|
xgi.type = X_Reply;
|
||||||
|
@ -1909,14 +1929,14 @@ PanoramiXPolyText8(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xPolyTextReq);
|
REQUEST_AT_LEAST_SIZE(xPolyTextReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(IS_SHARED_PIXMAP(draw))
|
if(IS_SHARED_PIXMAP(draw))
|
||||||
return (*SavedProcVector[X_PolyText8])(client);
|
return (*SavedProcVector[X_PolyText8])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -1948,14 +1968,14 @@ PanoramiXPolyText16(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xPolyTextReq);
|
REQUEST_AT_LEAST_SIZE(xPolyTextReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(IS_SHARED_PIXMAP(draw))
|
if(IS_SHARED_PIXMAP(draw))
|
||||||
return (*SavedProcVector[X_PolyText16])(client);
|
return (*SavedProcVector[X_PolyText16])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -1987,14 +2007,14 @@ int PanoramiXImageText8(ClientPtr client)
|
||||||
REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars);
|
REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(IS_SHARED_PIXMAP(draw))
|
if(IS_SHARED_PIXMAP(draw))
|
||||||
return (*SavedProcVector[X_ImageText8])(client);
|
return (*SavedProcVector[X_ImageText8])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -2026,14 +2046,14 @@ int PanoramiXImageText16(ClientPtr client)
|
||||||
REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars << 1);
|
REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars << 1);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(IS_SHARED_PIXMAP(draw))
|
if(IS_SHARED_PIXMAP(draw))
|
||||||
return (*SavedProcVector[X_ImageText16])(client);
|
return (*SavedProcVector[X_ImageText16])(client);
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -2064,7 +2084,7 @@ int PanoramiXCreateColormap(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xCreateColormapReq);
|
REQUEST_SIZE_MATCH(xCreateColormapReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->window, XRT_WINDOW, SecurityReadAccess)))
|
client, stuff->window, XRT_WINDOW, DixReadAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
if(!stuff->visual || (stuff->visual > 255))
|
if(!stuff->visual || (stuff->visual > 255))
|
||||||
|
@ -2107,7 +2127,7 @@ int PanoramiXFreeColormap(ClientPtr client)
|
||||||
client->errorValue = stuff->id;
|
client->errorValue = stuff->id;
|
||||||
|
|
||||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->id, XRT_COLORMAP, SecurityDestroyAccess)))
|
client, stuff->id, XRT_COLORMAP, DixDestroyAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j) {
|
FOR_NSCREENS_BACKWARD(j) {
|
||||||
|
@ -2136,7 +2156,7 @@ PanoramiXCopyColormapAndFree(ClientPtr client)
|
||||||
|
|
||||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->srcCmap, XRT_COLORMAP,
|
client, stuff->srcCmap, XRT_COLORMAP,
|
||||||
SecurityReadAccess | SecurityWriteAccess)))
|
DixReadAccess | DixWriteAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
|
|
||||||
if(!(newCmap = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
|
if(!(newCmap = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
|
||||||
|
@ -2174,7 +2194,7 @@ int PanoramiXInstallColormap(ClientPtr client)
|
||||||
client->errorValue = stuff->id;
|
client->errorValue = stuff->id;
|
||||||
|
|
||||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->id, XRT_COLORMAP, SecurityReadAccess)))
|
client, stuff->id, XRT_COLORMAP, DixReadAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j){
|
FOR_NSCREENS_BACKWARD(j){
|
||||||
|
@ -2197,7 +2217,7 @@ int PanoramiXUninstallColormap(ClientPtr client)
|
||||||
client->errorValue = stuff->id;
|
client->errorValue = stuff->id;
|
||||||
|
|
||||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->id, XRT_COLORMAP, SecurityReadAccess)))
|
client, stuff->id, XRT_COLORMAP, DixReadAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j) {
|
FOR_NSCREENS_BACKWARD(j) {
|
||||||
|
@ -2220,7 +2240,7 @@ int PanoramiXAllocColor(ClientPtr client)
|
||||||
client->errorValue = stuff->cmap;
|
client->errorValue = stuff->cmap;
|
||||||
|
|
||||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j){
|
FOR_NSCREENS_BACKWARD(j){
|
||||||
|
@ -2243,7 +2263,7 @@ int PanoramiXAllocNamedColor(ClientPtr client)
|
||||||
client->errorValue = stuff->cmap;
|
client->errorValue = stuff->cmap;
|
||||||
|
|
||||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j){
|
FOR_NSCREENS_BACKWARD(j){
|
||||||
|
@ -2266,7 +2286,7 @@ int PanoramiXAllocColorCells(ClientPtr client)
|
||||||
client->errorValue = stuff->cmap;
|
client->errorValue = stuff->cmap;
|
||||||
|
|
||||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j){
|
FOR_NSCREENS_BACKWARD(j){
|
||||||
|
@ -2289,7 +2309,7 @@ int PanoramiXAllocColorPlanes(ClientPtr client)
|
||||||
client->errorValue = stuff->cmap;
|
client->errorValue = stuff->cmap;
|
||||||
|
|
||||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j){
|
FOR_NSCREENS_BACKWARD(j){
|
||||||
|
@ -2313,7 +2333,7 @@ int PanoramiXFreeColors(ClientPtr client)
|
||||||
client->errorValue = stuff->cmap;
|
client->errorValue = stuff->cmap;
|
||||||
|
|
||||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j) {
|
FOR_NSCREENS_BACKWARD(j) {
|
||||||
|
@ -2335,7 +2355,7 @@ int PanoramiXStoreColors(ClientPtr client)
|
||||||
client->errorValue = stuff->cmap;
|
client->errorValue = stuff->cmap;
|
||||||
|
|
||||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j){
|
FOR_NSCREENS_BACKWARD(j){
|
||||||
|
@ -2358,7 +2378,7 @@ int PanoramiXStoreNamedColor(ClientPtr client)
|
||||||
client->errorValue = stuff->cmap;
|
client->errorValue = stuff->cmap;
|
||||||
|
|
||||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(j){
|
FOR_NSCREENS_BACKWARD(j){
|
||||||
|
|
46
Xext/saver.c
46
Xext/saver.c
|
@ -780,16 +780,17 @@ ProcScreenSaverQueryInfo (client)
|
||||||
{
|
{
|
||||||
REQUEST(xScreenSaverQueryInfoReq);
|
REQUEST(xScreenSaverQueryInfoReq);
|
||||||
xScreenSaverQueryInfoReply rep;
|
xScreenSaverQueryInfoReply rep;
|
||||||
register int n;
|
register int n, rc;
|
||||||
ScreenSaverStuffPtr pSaver;
|
ScreenSaverStuffPtr pSaver;
|
||||||
DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
CARD32 lastInput;
|
CARD32 lastInput;
|
||||||
ScreenSaverScreenPrivatePtr pPriv;
|
ScreenSaverScreenPrivatePtr pPriv;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xScreenSaverQueryInfoReq);
|
REQUEST_SIZE_MATCH (xScreenSaverQueryInfoReq);
|
||||||
pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client);
|
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
|
||||||
if (!pDraw)
|
DixUnknownAccess);
|
||||||
return BadDrawable;
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
|
||||||
pSaver = &savedScreenInfo[pDraw->pScreen->myNum];
|
pSaver = &savedScreenInfo[pDraw->pScreen->myNum];
|
||||||
pPriv = GetScreenPrivate (pDraw->pScreen);
|
pPriv = GetScreenPrivate (pDraw->pScreen);
|
||||||
|
@ -852,11 +853,13 @@ ProcScreenSaverSelectInput (client)
|
||||||
{
|
{
|
||||||
REQUEST(xScreenSaverSelectInputReq);
|
REQUEST(xScreenSaverSelectInputReq);
|
||||||
DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xScreenSaverSelectInputReq);
|
REQUEST_SIZE_MATCH (xScreenSaverSelectInputReq);
|
||||||
pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client);
|
rc = dixLookupDrawable (&pDraw, stuff->drawable, client, 0,
|
||||||
if (!pDraw)
|
DixUnknownAccess);
|
||||||
return BadDrawable;
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
if (!setEventMask (pDraw->pScreen, client, stuff->eventMask))
|
if (!setEventMask (pDraw->pScreen, client, stuff->eventMask))
|
||||||
return BadAlloc;
|
return BadAlloc;
|
||||||
return Success;
|
return Success;
|
||||||
|
@ -871,9 +874,7 @@ ScreenSaverSetAttributes (ClientPtr client)
|
||||||
ScreenPtr pScreen;
|
ScreenPtr pScreen;
|
||||||
ScreenSaverScreenPrivatePtr pPriv = 0;
|
ScreenSaverScreenPrivatePtr pPriv = 0;
|
||||||
ScreenSaverAttrPtr pAttr = 0;
|
ScreenSaverAttrPtr pAttr = 0;
|
||||||
int ret;
|
int ret, len, class, bw, depth;
|
||||||
int len;
|
|
||||||
int class, bw, depth;
|
|
||||||
unsigned long visual;
|
unsigned long visual;
|
||||||
int idepth, ivisual;
|
int idepth, ivisual;
|
||||||
Bool fOK;
|
Bool fOK;
|
||||||
|
@ -891,9 +892,10 @@ ScreenSaverSetAttributes (ClientPtr client)
|
||||||
ColormapPtr pCmap;
|
ColormapPtr pCmap;
|
||||||
|
|
||||||
REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq);
|
REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq);
|
||||||
pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client);
|
ret = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
|
||||||
if (!pDraw)
|
DixUnknownAccess);
|
||||||
return BadDrawable;
|
if (ret != Success)
|
||||||
|
return ret;
|
||||||
pScreen = pDraw->pScreen;
|
pScreen = pDraw->pScreen;
|
||||||
pParent = WindowTable[pScreen->myNum];
|
pParent = WindowTable[pScreen->myNum];
|
||||||
|
|
||||||
|
@ -1246,11 +1248,13 @@ ScreenSaverUnsetAttributes (ClientPtr client)
|
||||||
REQUEST(xScreenSaverSetAttributesReq);
|
REQUEST(xScreenSaverSetAttributesReq);
|
||||||
DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
ScreenSaverScreenPrivatePtr pPriv;
|
ScreenSaverScreenPrivatePtr pPriv;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xScreenSaverUnsetAttributesReq);
|
REQUEST_SIZE_MATCH (xScreenSaverUnsetAttributesReq);
|
||||||
pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client);
|
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
|
||||||
if (!pDraw)
|
DixUnknownAccess);
|
||||||
return BadDrawable;
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
pPriv = GetScreenPrivate (pDraw->pScreen);
|
pPriv = GetScreenPrivate (pDraw->pScreen);
|
||||||
if (pPriv && pPriv->attr && pPriv->attr->client == client)
|
if (pPriv && pPriv->attr && pPriv->attr->client == client)
|
||||||
{
|
{
|
||||||
|
@ -1279,7 +1283,7 @@ ProcScreenSaverSetAttributes (ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq);
|
REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
len = stuff->length - (sizeof(xScreenSaverSetAttributesReq) >> 2);
|
len = stuff->length - (sizeof(xScreenSaverSetAttributesReq) >> 2);
|
||||||
|
@ -1291,7 +1295,7 @@ ProcScreenSaverSetAttributes (ClientPtr client)
|
||||||
tmp = *((CARD32 *) &stuff[1] + pback_offset);
|
tmp = *((CARD32 *) &stuff[1] + pback_offset);
|
||||||
if ((tmp != None) && (tmp != ParentRelative)) {
|
if ((tmp != None) && (tmp != ParentRelative)) {
|
||||||
if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1301,7 +1305,7 @@ ProcScreenSaverSetAttributes (ClientPtr client)
|
||||||
tmp = *((CARD32 *) &stuff[1] + pbord_offset);
|
tmp = *((CARD32 *) &stuff[1] + pbord_offset);
|
||||||
if (tmp != CopyFromParent) {
|
if (tmp != CopyFromParent) {
|
||||||
if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1311,7 +1315,7 @@ ProcScreenSaverSetAttributes (ClientPtr client)
|
||||||
tmp = *((CARD32 *) &stuff[1] + cmap_offset);
|
tmp = *((CARD32 *) &stuff[1] + cmap_offset);
|
||||||
if ((tmp != CopyFromParent) && (tmp != None)) {
|
if ((tmp != CopyFromParent) && (tmp != None)) {
|
||||||
if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType(
|
if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType(
|
||||||
client, tmp, XRT_COLORMAP, SecurityReadAccess)))
|
client, tmp, XRT_COLORMAP, DixReadAccess)))
|
||||||
return BadColor;
|
return BadColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1351,7 +1355,7 @@ ProcScreenSaverUnsetAttributes (ClientPtr client)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
for(i = PanoramiXNumScreens - 1; i > 0; i--) {
|
for(i = PanoramiXNumScreens - 1; i > 0; i--) {
|
||||||
|
|
|
@ -600,7 +600,7 @@ ProcSecurityRevokeAuthorization(
|
||||||
REQUEST_SIZE_MATCH(xSecurityRevokeAuthorizationReq);
|
REQUEST_SIZE_MATCH(xSecurityRevokeAuthorizationReq);
|
||||||
|
|
||||||
pAuth = (SecurityAuthorizationPtr)SecurityLookupIDByType(client,
|
pAuth = (SecurityAuthorizationPtr)SecurityLookupIDByType(client,
|
||||||
stuff->authId, SecurityAuthorizationResType, SecurityDestroyAccess);
|
stuff->authId, SecurityAuthorizationResType, DixDestroyAccess);
|
||||||
if (!pAuth)
|
if (!pAuth)
|
||||||
return SecurityErrorBase + XSecurityBadAuthorization;
|
return SecurityErrorBase + XSecurityBadAuthorization;
|
||||||
|
|
||||||
|
@ -966,7 +966,7 @@ CALLBACK(SecurityCheckResourceIDAccess)
|
||||||
int cid, reqtype;
|
int cid, reqtype;
|
||||||
|
|
||||||
if (TRUSTLEVEL(client) == XSecurityClientTrusted ||
|
if (TRUSTLEVEL(client) == XSecurityClientTrusted ||
|
||||||
SecurityUnknownAccess == access_mode)
|
DixUnknownAccess == access_mode)
|
||||||
return; /* for compatibility, we have to allow access */
|
return; /* for compatibility, we have to allow access */
|
||||||
|
|
||||||
cid = CLIENT_ID(id);
|
cid = CLIENT_ID(id);
|
||||||
|
@ -1217,7 +1217,7 @@ CALLBACK(SecurityCheckHostlistAccess)
|
||||||
if (TRUSTLEVEL(rec->client) != XSecurityClientTrusted)
|
if (TRUSTLEVEL(rec->client) != XSecurityClientTrusted)
|
||||||
{
|
{
|
||||||
rec->rval = FALSE;
|
rec->rval = FALSE;
|
||||||
if (rec->access_mode == SecurityWriteAccess)
|
if (rec->access_mode == DixWriteAccess)
|
||||||
SecurityAudit("client %d attempted to change host access\n",
|
SecurityAudit("client %d attempted to change host access\n",
|
||||||
rec->client->index);
|
rec->client->index);
|
||||||
else
|
else
|
||||||
|
@ -1251,7 +1251,7 @@ typedef struct _PropertyAccessRec {
|
||||||
} PropertyAccessRec, *PropertyAccessPtr;
|
} PropertyAccessRec, *PropertyAccessPtr;
|
||||||
|
|
||||||
static PropertyAccessPtr PropertyAccessList = NULL;
|
static PropertyAccessPtr PropertyAccessList = NULL;
|
||||||
static char SecurityDefaultAction = SecurityErrorOperation;
|
static char SecurityDefaultAction = XaceErrorOperation;
|
||||||
static char *SecurityPolicyFile = DEFAULTPOLICYFILE;
|
static char *SecurityPolicyFile = DEFAULTPOLICYFILE;
|
||||||
static ATOM SecurityMaxPropertyName = 0;
|
static ATOM SecurityMaxPropertyName = 0;
|
||||||
|
|
||||||
|
@ -1410,9 +1410,9 @@ SecurityParsePropertyAccessRule(
|
||||||
{
|
{
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
case 'i': action = SecurityIgnoreOperation; break;
|
case 'i': action = XaceIgnoreOperation; break;
|
||||||
case 'a': action = SecurityAllowOperation; break;
|
case 'a': action = XaceAllowOperation; break;
|
||||||
case 'e': action = SecurityErrorOperation; break;
|
case 'e': action = XaceErrorOperation; break;
|
||||||
|
|
||||||
case 'r': readAction = action; break;
|
case 'r': readAction = action; break;
|
||||||
case 'w': writeAction = action; break;
|
case 'w': writeAction = action; break;
|
||||||
|
@ -1797,22 +1797,22 @@ CALLBACK(SecurityCheckPropertyAccess)
|
||||||
* If pacl doesn't apply, something above should have
|
* If pacl doesn't apply, something above should have
|
||||||
* executed a continue, which will skip the follwing code.
|
* executed a continue, which will skip the follwing code.
|
||||||
*/
|
*/
|
||||||
action = SecurityAllowOperation;
|
action = XaceAllowOperation;
|
||||||
if (access_mode & SecurityReadAccess)
|
if (access_mode & DixReadAccess)
|
||||||
action = max(action, pacl->readAction);
|
action = max(action, pacl->readAction);
|
||||||
if (access_mode & SecurityWriteAccess)
|
if (access_mode & DixWriteAccess)
|
||||||
action = max(action, pacl->writeAction);
|
action = max(action, pacl->writeAction);
|
||||||
if (access_mode & SecurityDestroyAccess)
|
if (access_mode & DixDestroyAccess)
|
||||||
action = max(action, pacl->destroyAction);
|
action = max(action, pacl->destroyAction);
|
||||||
break;
|
break;
|
||||||
} /* end for each pacl */
|
} /* end for each pacl */
|
||||||
} /* end if propertyName <= SecurityMaxPropertyName */
|
} /* end if propertyName <= SecurityMaxPropertyName */
|
||||||
|
|
||||||
if (SecurityAllowOperation != action)
|
if (XaceAllowOperation != action)
|
||||||
{ /* audit the access violation */
|
{ /* audit the access violation */
|
||||||
int cid = CLIENT_ID(pWin->drawable.id);
|
int cid = CLIENT_ID(pWin->drawable.id);
|
||||||
int reqtype = ((xReq *)client->requestBuffer)->reqType;
|
int reqtype = ((xReq *)client->requestBuffer)->reqType;
|
||||||
char *actionstr = (SecurityIgnoreOperation == action) ?
|
char *actionstr = (XaceIgnoreOperation == action) ?
|
||||||
"ignored" : "error";
|
"ignored" : "error";
|
||||||
SecurityAudit("client %d attempted request %d with window 0x%x property %s (atom 0x%x) of client %d, %s\n",
|
SecurityAudit("client %d attempted request %d with window 0x%x property %s (atom 0x%x) of client %d, %s\n",
|
||||||
client->index, reqtype, pWin->drawable.id,
|
client->index, reqtype, pWin->drawable.id,
|
||||||
|
|
84
Xext/shape.c
84
Xext/shape.c
|
@ -316,16 +316,16 @@ ProcShapeRectangles (client)
|
||||||
ScreenPtr pScreen;
|
ScreenPtr pScreen;
|
||||||
REQUEST(xShapeRectanglesReq);
|
REQUEST(xShapeRectanglesReq);
|
||||||
xRectangle *prects;
|
xRectangle *prects;
|
||||||
int nrects, ctype;
|
int nrects, ctype, rc;
|
||||||
RegionPtr srcRgn;
|
RegionPtr srcRgn;
|
||||||
RegionPtr *destRgn;
|
RegionPtr *destRgn;
|
||||||
CreateDftPtr createDefault;
|
CreateDftPtr createDefault;
|
||||||
|
|
||||||
REQUEST_AT_LEAST_SIZE (xShapeRectanglesReq);
|
REQUEST_AT_LEAST_SIZE (xShapeRectanglesReq);
|
||||||
UpdateCurrentTime();
|
UpdateCurrentTime();
|
||||||
pWin = LookupWindow (stuff->dest, client);
|
rc = dixLookupWindow(&pWin, stuff->dest, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
switch (stuff->destKind) {
|
switch (stuff->destKind) {
|
||||||
case ShapeBounding:
|
case ShapeBounding:
|
||||||
createDefault = CreateBoundingShape;
|
createDefault = CreateBoundingShape;
|
||||||
|
@ -390,7 +390,7 @@ ProcPanoramiXShapeRectangles(
|
||||||
REQUEST_AT_LEAST_SIZE (xShapeRectanglesReq);
|
REQUEST_AT_LEAST_SIZE (xShapeRectanglesReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->dest, XRT_WINDOW, SecurityWriteAccess)))
|
client, stuff->dest, XRT_WINDOW, DixWriteAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
FOR_NSCREENS(j) {
|
FOR_NSCREENS(j) {
|
||||||
|
@ -419,12 +419,13 @@ ProcShapeMask (client)
|
||||||
RegionPtr *destRgn;
|
RegionPtr *destRgn;
|
||||||
PixmapPtr pPixmap;
|
PixmapPtr pPixmap;
|
||||||
CreateDftPtr createDefault;
|
CreateDftPtr createDefault;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xShapeMaskReq);
|
REQUEST_SIZE_MATCH (xShapeMaskReq);
|
||||||
UpdateCurrentTime();
|
UpdateCurrentTime();
|
||||||
pWin = SecurityLookupWindow (stuff->dest, client, SecurityWriteAccess);
|
rc = dixLookupWindow(&pWin, stuff->dest, client, DixWriteAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
switch (stuff->destKind) {
|
switch (stuff->destKind) {
|
||||||
case ShapeBounding:
|
case ShapeBounding:
|
||||||
createDefault = CreateBoundingShape;
|
createDefault = CreateBoundingShape;
|
||||||
|
@ -444,7 +445,7 @@ ProcShapeMask (client)
|
||||||
srcRgn = 0;
|
srcRgn = 0;
|
||||||
else {
|
else {
|
||||||
pPixmap = (PixmapPtr) SecurityLookupIDByType(client, stuff->src,
|
pPixmap = (PixmapPtr) SecurityLookupIDByType(client, stuff->src,
|
||||||
RT_PIXMAP, SecurityReadAccess);
|
RT_PIXMAP, DixReadAccess);
|
||||||
if (!pPixmap)
|
if (!pPixmap)
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
if (pPixmap->drawable.pScreen != pScreen ||
|
if (pPixmap->drawable.pScreen != pScreen ||
|
||||||
|
@ -488,12 +489,12 @@ ProcPanoramiXShapeMask(
|
||||||
REQUEST_SIZE_MATCH (xShapeMaskReq);
|
REQUEST_SIZE_MATCH (xShapeMaskReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->dest, XRT_WINDOW, SecurityWriteAccess)))
|
client, stuff->dest, XRT_WINDOW, DixWriteAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
if(stuff->src != None) {
|
if(stuff->src != None) {
|
||||||
if(!(pmap = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(pmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->src, XRT_PIXMAP, SecurityReadAccess)))
|
client, stuff->src, XRT_PIXMAP, DixReadAccess)))
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
} else
|
} else
|
||||||
pmap = NULL;
|
pmap = NULL;
|
||||||
|
@ -526,12 +527,13 @@ ProcShapeCombine (client)
|
||||||
CreateDftPtr createDefault;
|
CreateDftPtr createDefault;
|
||||||
CreateDftPtr createSrc;
|
CreateDftPtr createSrc;
|
||||||
RegionPtr tmp;
|
RegionPtr tmp;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xShapeCombineReq);
|
REQUEST_SIZE_MATCH (xShapeCombineReq);
|
||||||
UpdateCurrentTime();
|
UpdateCurrentTime();
|
||||||
pDestWin = LookupWindow (stuff->dest, client);
|
rc = dixLookupWindow(&pDestWin, stuff->dest, client, DixUnknownAccess);
|
||||||
if (!pDestWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
if (!pDestWin->optional)
|
if (!pDestWin->optional)
|
||||||
MakeWindowOptional (pDestWin);
|
MakeWindowOptional (pDestWin);
|
||||||
switch (stuff->destKind) {
|
switch (stuff->destKind) {
|
||||||
|
@ -550,9 +552,9 @@ ProcShapeCombine (client)
|
||||||
}
|
}
|
||||||
pScreen = pDestWin->drawable.pScreen;
|
pScreen = pDestWin->drawable.pScreen;
|
||||||
|
|
||||||
pSrcWin = LookupWindow (stuff->src, client);
|
rc = dixLookupWindow(&pSrcWin, stuff->src, client, DixUnknownAccess);
|
||||||
if (!pSrcWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
switch (stuff->srcKind) {
|
switch (stuff->srcKind) {
|
||||||
case ShapeBounding:
|
case ShapeBounding:
|
||||||
srcRgn = wBoundingShape (pSrcWin);
|
srcRgn = wBoundingShape (pSrcWin);
|
||||||
|
@ -616,11 +618,11 @@ ProcPanoramiXShapeCombine(
|
||||||
REQUEST_AT_LEAST_SIZE (xShapeCombineReq);
|
REQUEST_AT_LEAST_SIZE (xShapeCombineReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->dest, XRT_WINDOW, SecurityWriteAccess)))
|
client, stuff->dest, XRT_WINDOW, DixWriteAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
if(!(win2 = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win2 = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->src, XRT_WINDOW, SecurityReadAccess)))
|
client, stuff->src, XRT_WINDOW, DixReadAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
FOR_NSCREENS(j) {
|
FOR_NSCREENS(j) {
|
||||||
|
@ -645,12 +647,13 @@ ProcShapeOffset (client)
|
||||||
ScreenPtr pScreen;
|
ScreenPtr pScreen;
|
||||||
REQUEST(xShapeOffsetReq);
|
REQUEST(xShapeOffsetReq);
|
||||||
RegionPtr srcRgn;
|
RegionPtr srcRgn;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xShapeOffsetReq);
|
REQUEST_SIZE_MATCH (xShapeOffsetReq);
|
||||||
UpdateCurrentTime();
|
UpdateCurrentTime();
|
||||||
pWin = LookupWindow (stuff->dest, client);
|
rc = dixLookupWindow(&pWin, stuff->dest, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
switch (stuff->destKind) {
|
switch (stuff->destKind) {
|
||||||
case ShapeBounding:
|
case ShapeBounding:
|
||||||
srcRgn = wBoundingShape (pWin);
|
srcRgn = wBoundingShape (pWin);
|
||||||
|
@ -688,7 +691,7 @@ ProcPanoramiXShapeOffset(
|
||||||
REQUEST_AT_LEAST_SIZE (xShapeOffsetReq);
|
REQUEST_AT_LEAST_SIZE (xShapeOffsetReq);
|
||||||
|
|
||||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->dest, XRT_WINDOW, SecurityWriteAccess)))
|
client, stuff->dest, XRT_WINDOW, DixWriteAccess)))
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
FOR_NSCREENS(j) {
|
FOR_NSCREENS(j) {
|
||||||
|
@ -709,13 +712,13 @@ ProcShapeQueryExtents (client)
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
xShapeQueryExtentsReply rep;
|
xShapeQueryExtentsReply rep;
|
||||||
BoxRec extents, *pExtents;
|
BoxRec extents, *pExtents;
|
||||||
register int n;
|
register int n, rc;
|
||||||
RegionPtr region;
|
RegionPtr region;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xShapeQueryExtentsReq);
|
REQUEST_SIZE_MATCH (xShapeQueryExtentsReq);
|
||||||
pWin = LookupWindow (stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
|
@ -820,13 +823,14 @@ ProcShapeSelectInput (client)
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
ShapeEventPtr pShapeEvent, pNewShapeEvent, *pHead;
|
ShapeEventPtr pShapeEvent, pNewShapeEvent, *pHead;
|
||||||
XID clientResource;
|
XID clientResource;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xShapeSelectInputReq);
|
REQUEST_SIZE_MATCH (xShapeSelectInputReq);
|
||||||
pWin = SecurityLookupWindow (stuff->window, client, SecurityWriteAccess);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
pHead = (ShapeEventPtr *)SecurityLookupIDByType(client,
|
pHead = (ShapeEventPtr *)SecurityLookupIDByType(client,
|
||||||
pWin->drawable.id, EventType, SecurityWriteAccess);
|
pWin->drawable.id, EventType, DixWriteAccess);
|
||||||
switch (stuff->enable) {
|
switch (stuff->enable) {
|
||||||
case xTrue:
|
case xTrue:
|
||||||
if (pHead) {
|
if (pHead) {
|
||||||
|
@ -990,16 +994,16 @@ ProcShapeInputSelected (client)
|
||||||
REQUEST(xShapeInputSelectedReq);
|
REQUEST(xShapeInputSelectedReq);
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
ShapeEventPtr pShapeEvent, *pHead;
|
ShapeEventPtr pShapeEvent, *pHead;
|
||||||
int enabled;
|
int enabled, rc;
|
||||||
xShapeInputSelectedReply rep;
|
xShapeInputSelectedReply rep;
|
||||||
register int n;
|
register int n;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xShapeInputSelectedReq);
|
REQUEST_SIZE_MATCH (xShapeInputSelectedReq);
|
||||||
pWin = LookupWindow (stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
pHead = (ShapeEventPtr *) SecurityLookupIDByType(client,
|
pHead = (ShapeEventPtr *) SecurityLookupIDByType(client,
|
||||||
pWin->drawable.id, EventType, SecurityReadAccess);
|
pWin->drawable.id, EventType, DixReadAccess);
|
||||||
enabled = xFalse;
|
enabled = xFalse;
|
||||||
if (pHead) {
|
if (pHead) {
|
||||||
for (pShapeEvent = *pHead;
|
for (pShapeEvent = *pHead;
|
||||||
|
@ -1032,14 +1036,14 @@ ProcShapeGetRectangles (client)
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
xShapeGetRectanglesReply rep;
|
xShapeGetRectanglesReply rep;
|
||||||
xRectangle *rects;
|
xRectangle *rects;
|
||||||
int nrects, i;
|
int nrects, i, rc;
|
||||||
RegionPtr region;
|
RegionPtr region;
|
||||||
register int n;
|
register int n;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xShapeGetRectanglesReq);
|
REQUEST_SIZE_MATCH(xShapeGetRectanglesReq);
|
||||||
pWin = LookupWindow (stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
switch (stuff->kind) {
|
switch (stuff->kind) {
|
||||||
case ShapeBounding:
|
case ShapeBounding:
|
||||||
region = wBoundingShape(pWin);
|
region = wBoundingShape(pWin);
|
||||||
|
|
52
Xext/shm.c
52
Xext/shm.c
|
@ -571,11 +571,11 @@ ProcPanoramiXShmPutImage(register ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xShmPutImageReq);
|
REQUEST_SIZE_MATCH(xShmPutImageReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -606,7 +606,7 @@ ProcPanoramiXShmGetImage(ClientPtr client)
|
||||||
DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
xShmGetImageReply xgi;
|
xShmGetImageReply xgi;
|
||||||
ShmDescPtr shmdesc;
|
ShmDescPtr shmdesc;
|
||||||
int i, x, y, w, h, format;
|
int i, x, y, w, h, format, rc;
|
||||||
Mask plane = 0, planemask;
|
Mask plane = 0, planemask;
|
||||||
long lenPer = 0, length, widthBytesLine;
|
long lenPer = 0, length, widthBytesLine;
|
||||||
Bool isRoot;
|
Bool isRoot;
|
||||||
|
@ -621,13 +621,16 @@ ProcPanoramiXShmGetImage(ClientPtr client)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if (draw->type == XRT_PIXMAP)
|
if (draw->type == XRT_PIXMAP)
|
||||||
return ProcShmGetImage(client);
|
return ProcShmGetImage(client);
|
||||||
|
|
||||||
VERIFY_DRAWABLE(pDraw, stuff->drawable, client);
|
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
|
||||||
|
DixUnknownAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
|
||||||
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client);
|
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client);
|
||||||
|
|
||||||
|
@ -660,8 +663,12 @@ ProcPanoramiXShmGetImage(ClientPtr client)
|
||||||
}
|
}
|
||||||
|
|
||||||
drawables[0] = pDraw;
|
drawables[0] = pDraw;
|
||||||
for(i = 1; i < PanoramiXNumScreens; i++)
|
for(i = 1; i < PanoramiXNumScreens; i++) {
|
||||||
VERIFY_DRAWABLE(drawables[i], draw->info[i].id, client);
|
rc = dixLookupDrawable(drawables+i, draw->info[i].id, client, 0,
|
||||||
|
DixUnknownAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
xgi.visual = wVisual(((WindowPtr)pDraw));
|
xgi.visual = wVisual(((WindowPtr)pDraw));
|
||||||
xgi.type = X_Reply;
|
xgi.type = X_Reply;
|
||||||
|
@ -720,7 +727,7 @@ ProcPanoramiXShmCreatePixmap(
|
||||||
PixmapPtr pMap = NULL;
|
PixmapPtr pMap = NULL;
|
||||||
DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
DepthPtr pDepth;
|
DepthPtr pDepth;
|
||||||
int i, j, result;
|
int i, j, result, rc;
|
||||||
ShmDescPtr shmdesc;
|
ShmDescPtr shmdesc;
|
||||||
REQUEST(xShmCreatePixmapReq);
|
REQUEST(xShmCreatePixmapReq);
|
||||||
PanoramiXRes *newPix;
|
PanoramiXRes *newPix;
|
||||||
|
@ -730,7 +737,11 @@ ProcPanoramiXShmCreatePixmap(
|
||||||
if (!sharedPixmaps)
|
if (!sharedPixmaps)
|
||||||
return BadImplementation;
|
return BadImplementation;
|
||||||
LEGAL_NEW_RESOURCE(stuff->pid, client);
|
LEGAL_NEW_RESOURCE(stuff->pid, client);
|
||||||
VERIFY_GEOMETRABLE(pDraw, stuff->drawable, client);
|
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, M_ANY,
|
||||||
|
DixUnknownAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
|
||||||
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client);
|
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client);
|
||||||
if (!stuff->width || !stuff->height)
|
if (!stuff->width || !stuff->height)
|
||||||
{
|
{
|
||||||
|
@ -805,8 +816,8 @@ static int
|
||||||
ProcShmPutImage(client)
|
ProcShmPutImage(client)
|
||||||
register ClientPtr client;
|
register ClientPtr client;
|
||||||
{
|
{
|
||||||
register GCPtr pGC;
|
GCPtr pGC;
|
||||||
register DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
long length;
|
long length;
|
||||||
ShmDescPtr shmdesc;
|
ShmDescPtr shmdesc;
|
||||||
REQUEST(xShmPutImageReq);
|
REQUEST(xShmPutImageReq);
|
||||||
|
@ -909,12 +920,12 @@ static int
|
||||||
ProcShmGetImage(client)
|
ProcShmGetImage(client)
|
||||||
register ClientPtr client;
|
register ClientPtr client;
|
||||||
{
|
{
|
||||||
register DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
long lenPer = 0, length;
|
long lenPer = 0, length;
|
||||||
Mask plane = 0;
|
Mask plane = 0;
|
||||||
xShmGetImageReply xgi;
|
xShmGetImageReply xgi;
|
||||||
ShmDescPtr shmdesc;
|
ShmDescPtr shmdesc;
|
||||||
int n;
|
int n, rc;
|
||||||
|
|
||||||
REQUEST(xShmGetImageReq);
|
REQUEST(xShmGetImageReq);
|
||||||
|
|
||||||
|
@ -924,7 +935,10 @@ ProcShmGetImage(client)
|
||||||
client->errorValue = stuff->format;
|
client->errorValue = stuff->format;
|
||||||
return(BadValue);
|
return(BadValue);
|
||||||
}
|
}
|
||||||
VERIFY_DRAWABLE(pDraw, stuff->drawable, client);
|
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
|
||||||
|
DixUnknownAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client);
|
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client);
|
||||||
if (pDraw->type == DRAWABLE_WINDOW)
|
if (pDraw->type == DRAWABLE_WINDOW)
|
||||||
{
|
{
|
||||||
|
@ -1042,9 +1056,9 @@ ProcShmCreatePixmap(client)
|
||||||
register ClientPtr client;
|
register ClientPtr client;
|
||||||
{
|
{
|
||||||
PixmapPtr pMap;
|
PixmapPtr pMap;
|
||||||
register DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
DepthPtr pDepth;
|
DepthPtr pDepth;
|
||||||
register int i;
|
register int i, rc;
|
||||||
ShmDescPtr shmdesc;
|
ShmDescPtr shmdesc;
|
||||||
REQUEST(xShmCreatePixmapReq);
|
REQUEST(xShmCreatePixmapReq);
|
||||||
|
|
||||||
|
@ -1053,7 +1067,11 @@ ProcShmCreatePixmap(client)
|
||||||
if (!sharedPixmaps)
|
if (!sharedPixmaps)
|
||||||
return BadImplementation;
|
return BadImplementation;
|
||||||
LEGAL_NEW_RESOURCE(stuff->pid, client);
|
LEGAL_NEW_RESOURCE(stuff->pid, client);
|
||||||
VERIFY_GEOMETRABLE(pDraw, stuff->drawable, client);
|
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, M_ANY,
|
||||||
|
DixUnknownAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
|
||||||
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client);
|
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client);
|
||||||
if (!stuff->width || !stuff->height)
|
if (!stuff->width || !stuff->height)
|
||||||
{
|
{
|
||||||
|
|
36
Xext/sync.c
36
Xext/sync.c
|
@ -436,7 +436,7 @@ SyncInitTrigger(client, pTrigger, counter, changes)
|
||||||
if (counter == None)
|
if (counter == None)
|
||||||
pCounter = NULL;
|
pCounter = NULL;
|
||||||
else if (!(pCounter = (SyncCounter *)SecurityLookupIDByType(
|
else if (!(pCounter = (SyncCounter *)SecurityLookupIDByType(
|
||||||
client, counter, RTCounter, SecurityReadAccess)))
|
client, counter, RTCounter, DixReadAccess)))
|
||||||
{
|
{
|
||||||
client->errorValue = counter;
|
client->errorValue = counter;
|
||||||
return SyncErrorBase + XSyncBadCounter;
|
return SyncErrorBase + XSyncBadCounter;
|
||||||
|
@ -1452,15 +1452,17 @@ ProcSyncSetPriority(client)
|
||||||
{
|
{
|
||||||
REQUEST(xSyncSetPriorityReq);
|
REQUEST(xSyncSetPriorityReq);
|
||||||
ClientPtr priorityclient;
|
ClientPtr priorityclient;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xSyncSetPriorityReq);
|
REQUEST_SIZE_MATCH(xSyncSetPriorityReq);
|
||||||
|
|
||||||
if (stuff->id == None)
|
if (stuff->id == None)
|
||||||
priorityclient = client;
|
priorityclient = client;
|
||||||
else if (!(priorityclient = LookupClient(stuff->id, client)))
|
else {
|
||||||
{
|
rc = dixLookupClient(&priorityclient, stuff->id, client,
|
||||||
client->errorValue = stuff->id;
|
DixUnknownAccess);
|
||||||
return BadMatch;
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priorityclient->priority != stuff->priority)
|
if (priorityclient->priority != stuff->priority)
|
||||||
|
@ -1487,15 +1489,17 @@ ProcSyncGetPriority(client)
|
||||||
REQUEST(xSyncGetPriorityReq);
|
REQUEST(xSyncGetPriorityReq);
|
||||||
xSyncGetPriorityReply rep;
|
xSyncGetPriorityReply rep;
|
||||||
ClientPtr priorityclient;
|
ClientPtr priorityclient;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xSyncGetPriorityReq);
|
REQUEST_SIZE_MATCH(xSyncGetPriorityReq);
|
||||||
|
|
||||||
if (stuff->id == None)
|
if (stuff->id == None)
|
||||||
priorityclient = client;
|
priorityclient = client;
|
||||||
else if (!(priorityclient = LookupClient(stuff->id, client)))
|
else {
|
||||||
{
|
rc = dixLookupClient(&priorityclient, stuff->id, client,
|
||||||
client->errorValue = stuff->id;
|
DixUnknownAccess);
|
||||||
return BadMatch;
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
|
@ -1550,7 +1554,7 @@ ProcSyncSetCounter(client)
|
||||||
REQUEST_SIZE_MATCH(xSyncSetCounterReq);
|
REQUEST_SIZE_MATCH(xSyncSetCounterReq);
|
||||||
|
|
||||||
pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->cid,
|
pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->cid,
|
||||||
RTCounter, SecurityWriteAccess);
|
RTCounter, DixWriteAccess);
|
||||||
if (pCounter == NULL)
|
if (pCounter == NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->cid;
|
client->errorValue = stuff->cid;
|
||||||
|
@ -1583,7 +1587,7 @@ ProcSyncChangeCounter(client)
|
||||||
REQUEST_SIZE_MATCH(xSyncChangeCounterReq);
|
REQUEST_SIZE_MATCH(xSyncChangeCounterReq);
|
||||||
|
|
||||||
pCounter = (SyncCounter *) SecurityLookupIDByType(client, stuff->cid,
|
pCounter = (SyncCounter *) SecurityLookupIDByType(client, stuff->cid,
|
||||||
RTCounter, SecurityWriteAccess);
|
RTCounter, DixWriteAccess);
|
||||||
if (pCounter == NULL)
|
if (pCounter == NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->cid;
|
client->errorValue = stuff->cid;
|
||||||
|
@ -1621,7 +1625,7 @@ ProcSyncDestroyCounter(client)
|
||||||
REQUEST_SIZE_MATCH(xSyncDestroyCounterReq);
|
REQUEST_SIZE_MATCH(xSyncDestroyCounterReq);
|
||||||
|
|
||||||
pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->counter,
|
pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->counter,
|
||||||
RTCounter, SecurityDestroyAccess);
|
RTCounter, DixDestroyAccess);
|
||||||
if (pCounter == NULL)
|
if (pCounter == NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->counter;
|
client->errorValue = stuff->counter;
|
||||||
|
@ -1767,7 +1771,7 @@ ProcSyncQueryCounter(client)
|
||||||
REQUEST_SIZE_MATCH(xSyncQueryCounterReq);
|
REQUEST_SIZE_MATCH(xSyncQueryCounterReq);
|
||||||
|
|
||||||
pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->counter,
|
pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->counter,
|
||||||
RTCounter, SecurityReadAccess);
|
RTCounter, DixReadAccess);
|
||||||
if (pCounter == NULL)
|
if (pCounter == NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->counter;
|
client->errorValue = stuff->counter;
|
||||||
|
@ -1896,7 +1900,7 @@ ProcSyncChangeAlarm(client)
|
||||||
REQUEST_AT_LEAST_SIZE(xSyncChangeAlarmReq);
|
REQUEST_AT_LEAST_SIZE(xSyncChangeAlarmReq);
|
||||||
|
|
||||||
if (!(pAlarm = (SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm,
|
if (!(pAlarm = (SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm,
|
||||||
RTAlarm, SecurityWriteAccess)))
|
RTAlarm, DixWriteAccess)))
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->alarm;
|
client->errorValue = stuff->alarm;
|
||||||
return SyncErrorBase + XSyncBadAlarm;
|
return SyncErrorBase + XSyncBadAlarm;
|
||||||
|
@ -1937,7 +1941,7 @@ ProcSyncQueryAlarm(client)
|
||||||
REQUEST_SIZE_MATCH(xSyncQueryAlarmReq);
|
REQUEST_SIZE_MATCH(xSyncQueryAlarmReq);
|
||||||
|
|
||||||
pAlarm = (SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm,
|
pAlarm = (SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm,
|
||||||
RTAlarm, SecurityReadAccess);
|
RTAlarm, DixReadAccess);
|
||||||
if (!pAlarm)
|
if (!pAlarm)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->alarm;
|
client->errorValue = stuff->alarm;
|
||||||
|
@ -1997,7 +2001,7 @@ ProcSyncDestroyAlarm(client)
|
||||||
REQUEST_SIZE_MATCH(xSyncDestroyAlarmReq);
|
REQUEST_SIZE_MATCH(xSyncDestroyAlarmReq);
|
||||||
|
|
||||||
if (!((SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm,
|
if (!((SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm,
|
||||||
RTAlarm, SecurityDestroyAccess)))
|
RTAlarm, DixDestroyAccess)))
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->alarm;
|
client->errorValue = stuff->alarm;
|
||||||
return SyncErrorBase + XSyncBadAlarm;
|
return SyncErrorBase + XSyncBadAlarm;
|
||||||
|
|
|
@ -99,7 +99,7 @@ int XaceHook(int hook, ...)
|
||||||
va_arg(ap, WindowPtr),
|
va_arg(ap, WindowPtr),
|
||||||
va_arg(ap, Atom),
|
va_arg(ap, Atom),
|
||||||
va_arg(ap, Mask),
|
va_arg(ap, Mask),
|
||||||
SecurityAllowOperation /* default allow */
|
XaceAllowOperation /* default allow */
|
||||||
};
|
};
|
||||||
calldata = &rec;
|
calldata = &rec;
|
||||||
prv = &rec.rval;
|
prv = &rec.rval;
|
||||||
|
|
26
Xext/xace.h
26
Xext/xace.h
|
@ -20,6 +20,13 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
#ifndef _XACE_H
|
#ifndef _XACE_H
|
||||||
#define _XACE_H
|
#define _XACE_H
|
||||||
|
|
||||||
|
/* Hook return codes */
|
||||||
|
#define XaceErrorOperation 0
|
||||||
|
#define XaceAllowOperation 1
|
||||||
|
#define XaceIgnoreOperation 2
|
||||||
|
|
||||||
|
#ifdef XACE
|
||||||
|
|
||||||
#define XACE_EXTENSION_NAME "XAccessControlExtension"
|
#define XACE_EXTENSION_NAME "XAccessControlExtension"
|
||||||
#define XACE_MAJOR_VERSION 1
|
#define XACE_MAJOR_VERSION 1
|
||||||
#define XACE_MINOR_VERSION 0
|
#define XACE_MINOR_VERSION 0
|
||||||
|
@ -75,11 +82,6 @@ extern int XaceHook(
|
||||||
/* From the original Security extension...
|
/* From the original Security extension...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Hook return codes */
|
|
||||||
#define SecurityAllowOperation 0
|
|
||||||
#define SecurityIgnoreOperation 1
|
|
||||||
#define SecurityErrorOperation 2
|
|
||||||
|
|
||||||
/* Proc vectors for untrusted clients, swapped and unswapped versions.
|
/* Proc vectors for untrusted clients, swapped and unswapped versions.
|
||||||
* These are the same as the normal proc vectors except that extensions
|
* These are the same as the normal proc vectors except that extensions
|
||||||
* that haven't declared themselves secure will have ProcBadRequest plugged
|
* that haven't declared themselves secure will have ProcBadRequest plugged
|
||||||
|
@ -100,4 +102,18 @@ extern void XaceCensorImage(
|
||||||
char * pBuf
|
char * pBuf
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#else /* XACE */
|
||||||
|
|
||||||
|
/* Define calls away when XACE is not being built. */
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define XaceHook(args...) XaceAllowOperation
|
||||||
|
#define XaceCensorImage(args...) { ; }
|
||||||
|
#else
|
||||||
|
#define XaceHook(...) XaceAllowOperation
|
||||||
|
#define XaceCensorImage(...) { ; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* XACE */
|
||||||
|
|
||||||
#endif /* _XACE_H */
|
#endif /* _XACE_H */
|
||||||
|
|
|
@ -445,11 +445,10 @@ ProcXF86BigfontQueryFont(
|
||||||
#endif
|
#endif
|
||||||
client->errorValue = stuff->id; /* EITHER font or gc */
|
client->errorValue = stuff->id; /* EITHER font or gc */
|
||||||
pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT,
|
pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT,
|
||||||
SecurityReadAccess);
|
DixReadAccess);
|
||||||
if (!pFont) {
|
if (!pFont) {
|
||||||
/* can't use VERIFY_GC because it might return BadGC */
|
|
||||||
GC *pGC = (GC *) SecurityLookupIDByType(client, stuff->id, RT_GC,
|
GC *pGC = (GC *) SecurityLookupIDByType(client, stuff->id, RT_GC,
|
||||||
SecurityReadAccess);
|
DixReadAccess);
|
||||||
if (!pGC) {
|
if (!pGC) {
|
||||||
client->errorValue = stuff->id;
|
client->errorValue = stuff->id;
|
||||||
return BadFont; /* procotol spec says only error is BadFont */
|
return BadFont; /* procotol spec says only error is BadFont */
|
||||||
|
|
|
@ -749,7 +749,7 @@ ProcXpGetPageDimensions(ClientPtr client)
|
||||||
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
||||||
stuff->printContext,
|
stuff->printContext,
|
||||||
RTcontext,
|
RTcontext,
|
||||||
SecurityReadAccess))
|
DixReadAccess))
|
||||||
== (XpContextPtr)NULL)
|
== (XpContextPtr)NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->printContext;
|
client->errorValue = stuff->printContext;
|
||||||
|
@ -811,7 +811,7 @@ ProcXpSetImageResolution(ClientPtr client)
|
||||||
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
||||||
stuff->printContext,
|
stuff->printContext,
|
||||||
RTcontext,
|
RTcontext,
|
||||||
SecurityWriteAccess))
|
DixWriteAccess))
|
||||||
== (XpContextPtr)NULL)
|
== (XpContextPtr)NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->printContext;
|
client->errorValue = stuff->printContext;
|
||||||
|
@ -859,7 +859,7 @@ ProcXpGetImageResolution(ClientPtr client)
|
||||||
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
||||||
stuff->printContext,
|
stuff->printContext,
|
||||||
RTcontext,
|
RTcontext,
|
||||||
SecurityReadAccess))
|
DixReadAccess))
|
||||||
== (XpContextPtr)NULL)
|
== (XpContextPtr)NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->printContext;
|
client->errorValue = stuff->printContext;
|
||||||
|
@ -1068,7 +1068,7 @@ ProcXpSetContext(ClientPtr client)
|
||||||
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
||||||
stuff->printContext,
|
stuff->printContext,
|
||||||
RTcontext,
|
RTcontext,
|
||||||
SecurityWriteAccess))
|
DixWriteAccess))
|
||||||
== (XpContextPtr)NULL)
|
== (XpContextPtr)NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->printContext;
|
client->errorValue = stuff->printContext;
|
||||||
|
@ -1141,7 +1141,7 @@ ProcXpDestroyContext(ClientPtr client)
|
||||||
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
||||||
stuff->printContext,
|
stuff->printContext,
|
||||||
RTcontext,
|
RTcontext,
|
||||||
SecurityDestroyAccess))
|
DixDestroyAccess))
|
||||||
== (XpContextPtr)NULL)
|
== (XpContextPtr)NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->printContext;
|
client->errorValue = stuff->printContext;
|
||||||
|
@ -1167,7 +1167,7 @@ ProcXpGetContextScreen(ClientPtr client)
|
||||||
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
||||||
stuff->printContext,
|
stuff->printContext,
|
||||||
RTcontext,
|
RTcontext,
|
||||||
SecurityReadAccess))
|
DixReadAccess))
|
||||||
== (XpContextPtr)NULL)
|
== (XpContextPtr)NULL)
|
||||||
return XpErrorBase+XPBadContext;
|
return XpErrorBase+XPBadContext;
|
||||||
|
|
||||||
|
@ -1852,9 +1852,10 @@ ProcXpStartPage(ClientPtr client)
|
||||||
if(pContext->state & PAGE_STARTED)
|
if(pContext->state & PAGE_STARTED)
|
||||||
return XpErrorBase+XPBadSequence;
|
return XpErrorBase+XPBadSequence;
|
||||||
|
|
||||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
result = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||||
SecurityWriteAccess);
|
if (result != Success)
|
||||||
if (!pWin || pWin->drawable.pScreen->myNum != pContext->screenNum)
|
return result;
|
||||||
|
if (pWin->drawable.pScreen->myNum != pContext->screenNum)
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
|
|
||||||
if((c = (XpStPagePtr)xalloc(sizeof(XpStPageRec))) == (XpStPagePtr)NULL)
|
if((c = (XpStPagePtr)xalloc(sizeof(XpStPageRec))) == (XpStPagePtr)NULL)
|
||||||
|
@ -1943,8 +1944,11 @@ ProcXpPutDocumentData(ClientPtr client)
|
||||||
if (stuff->drawable) {
|
if (stuff->drawable) {
|
||||||
if (pContext->state & DOC_RAW_STARTED)
|
if (pContext->state & DOC_RAW_STARTED)
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
pDraw = (DrawablePtr)LookupDrawable(stuff->drawable, client);
|
result = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
|
||||||
if (!pDraw || pDraw->pScreen->myNum != pContext->screenNum)
|
DixUnknownAccess);
|
||||||
|
if (result != Success)
|
||||||
|
return result;
|
||||||
|
if (pDraw->pScreen->myNum != pContext->screenNum)
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
} else {
|
} else {
|
||||||
if (pContext->state & DOC_COOKED_STARTED)
|
if (pContext->state & DOC_COOKED_STARTED)
|
||||||
|
@ -1994,7 +1998,7 @@ ProcXpGetDocumentData(ClientPtr client)
|
||||||
if((pContext = (XpContextPtr)SecurityLookupIDByType(client,
|
if((pContext = (XpContextPtr)SecurityLookupIDByType(client,
|
||||||
stuff->printContext,
|
stuff->printContext,
|
||||||
RTcontext,
|
RTcontext,
|
||||||
SecurityWriteAccess))
|
DixWriteAccess))
|
||||||
== (XpContextPtr)NULL)
|
== (XpContextPtr)NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->printContext;
|
client->errorValue = stuff->printContext;
|
||||||
|
@ -2077,7 +2081,7 @@ ProcXpGetAttributes(ClientPtr client)
|
||||||
client,
|
client,
|
||||||
stuff->printContext,
|
stuff->printContext,
|
||||||
RTcontext,
|
RTcontext,
|
||||||
SecurityReadAccess))
|
DixReadAccess))
|
||||||
== (XpContextPtr)NULL)
|
== (XpContextPtr)NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->printContext;
|
client->errorValue = stuff->printContext;
|
||||||
|
@ -2149,7 +2153,7 @@ ProcXpSetAttributes(ClientPtr client)
|
||||||
client,
|
client,
|
||||||
stuff->printContext,
|
stuff->printContext,
|
||||||
RTcontext,
|
RTcontext,
|
||||||
SecurityWriteAccess))
|
DixWriteAccess))
|
||||||
== (XpContextPtr)NULL)
|
== (XpContextPtr)NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->printContext;
|
client->errorValue = stuff->printContext;
|
||||||
|
@ -2229,7 +2233,7 @@ ProcXpGetOneAttribute(ClientPtr client)
|
||||||
client,
|
client,
|
||||||
stuff->printContext,
|
stuff->printContext,
|
||||||
RTcontext,
|
RTcontext,
|
||||||
SecurityReadAccess))
|
DixReadAccess))
|
||||||
== (XpContextPtr)NULL)
|
== (XpContextPtr)NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->printContext;
|
client->errorValue = stuff->printContext;
|
||||||
|
@ -2300,7 +2304,7 @@ ProcXpSelectInput(ClientPtr client)
|
||||||
if((pContext=(XpContextPtr)SecurityLookupIDByType(client,
|
if((pContext=(XpContextPtr)SecurityLookupIDByType(client,
|
||||||
stuff->printContext,
|
stuff->printContext,
|
||||||
RTcontext,
|
RTcontext,
|
||||||
SecurityWriteAccess))
|
DixWriteAccess))
|
||||||
== (XpContextPtr)NULL)
|
== (XpContextPtr)NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->printContext;
|
client->errorValue = stuff->printContext;
|
||||||
|
@ -2336,7 +2340,7 @@ ProcXpInputSelected(ClientPtr client)
|
||||||
if((pContext=(XpContextPtr)SecurityLookupIDByType(client,
|
if((pContext=(XpContextPtr)SecurityLookupIDByType(client,
|
||||||
stuff->printContext,
|
stuff->printContext,
|
||||||
RTcontext,
|
RTcontext,
|
||||||
SecurityReadAccess))
|
DixReadAccess))
|
||||||
== (XpContextPtr)NULL)
|
== (XpContextPtr)NULL)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->printContext;
|
client->errorValue = stuff->printContext;
|
||||||
|
|
19
Xext/xtest.c
19
Xext/xtest.c
|
@ -139,12 +139,12 @@ ProcXTestCompareCursor(client)
|
||||||
xXTestCompareCursorReply rep;
|
xXTestCompareCursorReply rep;
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
CursorPtr pCursor;
|
CursorPtr pCursor;
|
||||||
register int n;
|
register int n, rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xXTestCompareCursorReq);
|
REQUEST_SIZE_MATCH(xXTestCompareCursorReq);
|
||||||
pWin = (WindowPtr)LookupWindow(stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return(BadWindow);
|
return rc;
|
||||||
if (stuff->cursor == None)
|
if (stuff->cursor == None)
|
||||||
pCursor = NullCursor;
|
pCursor = NullCursor;
|
||||||
else if (stuff->cursor == XTestCurrentCursor)
|
else if (stuff->cursor == XTestCurrentCursor)
|
||||||
|
@ -173,12 +173,10 @@ ProcXTestFakeInput(client)
|
||||||
register ClientPtr client;
|
register ClientPtr client;
|
||||||
{
|
{
|
||||||
REQUEST(xXTestFakeInputReq);
|
REQUEST(xXTestFakeInputReq);
|
||||||
int nev;
|
int nev, n, type, rc;
|
||||||
int n;
|
|
||||||
xEvent *ev;
|
xEvent *ev;
|
||||||
DeviceIntPtr dev = NULL;
|
DeviceIntPtr dev = NULL;
|
||||||
WindowPtr root;
|
WindowPtr root;
|
||||||
int type;
|
|
||||||
#ifdef XINPUT
|
#ifdef XINPUT
|
||||||
Bool extension = FALSE;
|
Bool extension = FALSE;
|
||||||
deviceValuator *dv = NULL;
|
deviceValuator *dv = NULL;
|
||||||
|
@ -367,9 +365,10 @@ ProcXTestFakeInput(client)
|
||||||
root = GetCurrentRootWindow();
|
root = GetCurrentRootWindow();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
root = LookupWindow(ev->u.keyButtonPointer.root, client);
|
rc = dixLookupWindow(&root, ev->u.keyButtonPointer.root, client,
|
||||||
if (!root)
|
DixUnknownAccess);
|
||||||
return BadWindow;
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
if (root->parent)
|
if (root->parent)
|
||||||
{
|
{
|
||||||
client->errorValue = ev->u.keyButtonPointer.root;
|
client->errorValue = ev->u.keyButtonPointer.root;
|
||||||
|
|
|
@ -373,10 +373,8 @@ ProcXvQueryAdaptors(ClientPtr client)
|
||||||
xvFormat format;
|
xvFormat format;
|
||||||
xvAdaptorInfo ainfo;
|
xvAdaptorInfo ainfo;
|
||||||
xvQueryAdaptorsReply rep;
|
xvQueryAdaptorsReply rep;
|
||||||
int totalSize;
|
int totalSize, na, nf, rc;
|
||||||
int na;
|
|
||||||
XvAdaptorPtr pa;
|
XvAdaptorPtr pa;
|
||||||
int nf;
|
|
||||||
XvFormatPtr pf;
|
XvFormatPtr pf;
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
ScreenPtr pScreen;
|
ScreenPtr pScreen;
|
||||||
|
@ -385,11 +383,9 @@ ProcXvQueryAdaptors(ClientPtr client)
|
||||||
REQUEST(xvQueryAdaptorsReq);
|
REQUEST(xvQueryAdaptorsReq);
|
||||||
REQUEST_SIZE_MATCH(xvQueryAdaptorsReq);
|
REQUEST_SIZE_MATCH(xvQueryAdaptorsReq);
|
||||||
|
|
||||||
if(!(pWin = (WindowPtr)LookupWindow(stuff->window, client) ))
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
{
|
if (rc != Success)
|
||||||
client->errorValue = stuff->window;
|
return rc;
|
||||||
return (BadWindow);
|
|
||||||
}
|
|
||||||
|
|
||||||
pScreen = pWin->drawable.pScreen;
|
pScreen = pWin->drawable.pScreen;
|
||||||
pxvs = (XvScreenPtr)pScreen->devPrivates[XvScreenIndex].ptr;
|
pxvs = (XvScreenPtr)pScreen->devPrivates[XvScreenIndex].ptr;
|
||||||
|
@ -531,9 +527,9 @@ ProcXvQueryEncodings(ClientPtr client)
|
||||||
static int
|
static int
|
||||||
ProcXvPutVideo(ClientPtr client)
|
ProcXvPutVideo(ClientPtr client)
|
||||||
{
|
{
|
||||||
register DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
XvPortPtr pPort;
|
XvPortPtr pPort;
|
||||||
register GCPtr pGC;
|
GCPtr pGC;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
REQUEST(xvPutVideoReq);
|
REQUEST(xvPutVideoReq);
|
||||||
|
@ -577,9 +573,9 @@ ProcXvPutVideo(ClientPtr client)
|
||||||
static int
|
static int
|
||||||
ProcXvPutStill(ClientPtr client)
|
ProcXvPutStill(ClientPtr client)
|
||||||
{
|
{
|
||||||
register DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
XvPortPtr pPort;
|
XvPortPtr pPort;
|
||||||
register GCPtr pGC;
|
GCPtr pGC;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
REQUEST(xvPutStillReq);
|
REQUEST(xvPutStillReq);
|
||||||
|
@ -624,9 +620,9 @@ ProcXvPutStill(ClientPtr client)
|
||||||
static int
|
static int
|
||||||
ProcXvGetVideo(ClientPtr client)
|
ProcXvGetVideo(ClientPtr client)
|
||||||
{
|
{
|
||||||
register DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
XvPortPtr pPort;
|
XvPortPtr pPort;
|
||||||
register GCPtr pGC;
|
GCPtr pGC;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
REQUEST(xvGetVideoReq);
|
REQUEST(xvGetVideoReq);
|
||||||
|
@ -671,9 +667,9 @@ ProcXvGetVideo(ClientPtr client)
|
||||||
static int
|
static int
|
||||||
ProcXvGetStill(ClientPtr client)
|
ProcXvGetStill(ClientPtr client)
|
||||||
{
|
{
|
||||||
register DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
XvPortPtr pPort;
|
XvPortPtr pPort;
|
||||||
register GCPtr pGC;
|
GCPtr pGC;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
REQUEST(xvGetStillReq);
|
REQUEST(xvGetStillReq);
|
||||||
|
@ -717,15 +713,14 @@ ProcXvGetStill(ClientPtr client)
|
||||||
static int
|
static int
|
||||||
ProcXvSelectVideoNotify(ClientPtr client)
|
ProcXvSelectVideoNotify(ClientPtr client)
|
||||||
{
|
{
|
||||||
register DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
|
int rc;
|
||||||
REQUEST(xvSelectVideoNotifyReq);
|
REQUEST(xvSelectVideoNotifyReq);
|
||||||
REQUEST_SIZE_MATCH(xvSelectVideoNotifyReq);
|
REQUEST_SIZE_MATCH(xvSelectVideoNotifyReq);
|
||||||
|
|
||||||
if(!(pDraw = (DrawablePtr)LOOKUP_DRAWABLE(stuff->drawable, client) ))
|
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixUnknownAccess);
|
||||||
{
|
if (rc != Success)
|
||||||
client->errorValue = stuff->drawable;
|
return rc;
|
||||||
return (BadWindow);
|
|
||||||
}
|
|
||||||
|
|
||||||
return XVCALL(diSelectVideoNotify)(client, pDraw, stuff->onoff);
|
return XVCALL(diSelectVideoNotify)(client, pDraw, stuff->onoff);
|
||||||
|
|
||||||
|
@ -822,8 +817,8 @@ ProcXvUngrabPort(ClientPtr client)
|
||||||
static int
|
static int
|
||||||
ProcXvStopVideo(ClientPtr client)
|
ProcXvStopVideo(ClientPtr client)
|
||||||
{
|
{
|
||||||
int status;
|
int status, rc;
|
||||||
register DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
XvPortPtr pPort;
|
XvPortPtr pPort;
|
||||||
REQUEST(xvStopVideoReq);
|
REQUEST(xvStopVideoReq);
|
||||||
REQUEST_SIZE_MATCH(xvStopVideoReq);
|
REQUEST_SIZE_MATCH(xvStopVideoReq);
|
||||||
|
@ -840,11 +835,9 @@ ProcXvStopVideo(ClientPtr client)
|
||||||
return (status);
|
return (status);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(pDraw = LOOKUP_DRAWABLE(stuff->drawable, client) ))
|
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixUnknownAccess);
|
||||||
{
|
if (rc != Success)
|
||||||
client->errorValue = stuff->drawable;
|
return rc;
|
||||||
return (BadDrawable);
|
|
||||||
}
|
|
||||||
|
|
||||||
return XVCALL(diStopVideo)(client, pPort, pDraw);
|
return XVCALL(diStopVideo)(client, pPort, pDraw);
|
||||||
|
|
||||||
|
@ -1877,11 +1870,11 @@ XineramaXvStopVideo(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xvStopVideoReq);
|
REQUEST_SIZE_MATCH(xvStopVideoReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->port, XvXRTPort, SecurityReadAccess)))
|
client, stuff->port, XvXRTPort, DixReadAccess)))
|
||||||
return _XvBadPort;
|
return _XvBadPort;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(i) {
|
FOR_NSCREENS_BACKWARD(i) {
|
||||||
|
@ -1905,7 +1898,7 @@ XineramaXvSetPortAttribute(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xvSetPortAttributeReq);
|
REQUEST_SIZE_MATCH(xvSetPortAttributeReq);
|
||||||
|
|
||||||
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->port, XvXRTPort, SecurityReadAccess)))
|
client, stuff->port, XvXRTPort, DixReadAccess)))
|
||||||
return _XvBadPort;
|
return _XvBadPort;
|
||||||
|
|
||||||
FOR_NSCREENS_BACKWARD(i) {
|
FOR_NSCREENS_BACKWARD(i) {
|
||||||
|
@ -1931,15 +1924,15 @@ XineramaXvShmPutImage(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xvShmPutImageReq);
|
REQUEST_SIZE_MATCH(xvShmPutImageReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->port, XvXRTPort, SecurityReadAccess)))
|
client, stuff->port, XvXRTPort, DixReadAccess)))
|
||||||
return _XvBadPort;
|
return _XvBadPort;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -1978,15 +1971,15 @@ XineramaXvPutImage(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xvPutImageReq);
|
REQUEST_AT_LEAST_SIZE(xvPutImageReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->port, XvXRTPort, SecurityReadAccess)))
|
client, stuff->port, XvXRTPort, DixReadAccess)))
|
||||||
return _XvBadPort;
|
return _XvBadPort;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -2023,15 +2016,15 @@ XineramaXvPutVideo(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xvPutVideoReq);
|
REQUEST_AT_LEAST_SIZE(xvPutVideoReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->port, XvXRTPort, SecurityReadAccess)))
|
client, stuff->port, XvXRTPort, DixReadAccess)))
|
||||||
return _XvBadPort;
|
return _XvBadPort;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
@ -2068,15 +2061,15 @@ XineramaXvPutStill(ClientPtr client)
|
||||||
REQUEST_AT_LEAST_SIZE(xvPutImageReq);
|
REQUEST_AT_LEAST_SIZE(xvPutImageReq);
|
||||||
|
|
||||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
|
|
||||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||||
return BadGC;
|
return BadGC;
|
||||||
|
|
||||||
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
||||||
client, stuff->port, XvXRTPort, SecurityReadAccess)))
|
client, stuff->port, XvXRTPort, DixReadAccess)))
|
||||||
return _XvBadPort;
|
return _XvBadPort;
|
||||||
|
|
||||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||||
|
|
|
@ -106,7 +106,7 @@ SProcXChangeDeviceDontPropagateList(register ClientPtr client)
|
||||||
int
|
int
|
||||||
ProcXChangeDeviceDontPropagateList(register ClientPtr client)
|
ProcXChangeDeviceDontPropagateList(register ClientPtr client)
|
||||||
{
|
{
|
||||||
int i;
|
int i, rc;
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
struct tmask tmp[EMASKSIZE];
|
struct tmask tmp[EMASKSIZE];
|
||||||
OtherInputMasks *others;
|
OtherInputMasks *others;
|
||||||
|
@ -121,11 +121,10 @@ ProcXChangeDeviceDontPropagateList(register ClientPtr client)
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
pWin = (WindowPtr) LookupWindow(stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin) {
|
if (rc != Success) {
|
||||||
client->errorValue = stuff->window;
|
|
||||||
SendErrorToClient(client, IReqCode, X_ChangeDeviceDontPropagateList, 0,
|
SendErrorToClient(client, IReqCode, X_ChangeDeviceDontPropagateList, 0,
|
||||||
BadWindow);
|
rc);
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -505,6 +505,7 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
||||||
WindowPtr pWin, confineTo;
|
WindowPtr pWin, confineTo;
|
||||||
CursorPtr cursor;
|
CursorPtr cursor;
|
||||||
GrabPtr grab;
|
GrabPtr grab;
|
||||||
|
int rc;
|
||||||
|
|
||||||
if ((this_device_mode != GrabModeSync) &&
|
if ((this_device_mode != GrabModeSync) &&
|
||||||
(this_device_mode != GrabModeAsync)) {
|
(this_device_mode != GrabModeAsync)) {
|
||||||
|
@ -524,15 +525,15 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
||||||
client->errorValue = ownerEvents;
|
client->errorValue = ownerEvents;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
pWin = LookupWindow(grabWindow, client);
|
rc = dixLookupWindow(&pWin, grabWindow, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
if (rconfineTo == None)
|
if (rconfineTo == None)
|
||||||
confineTo = NullWindow;
|
confineTo = NullWindow;
|
||||||
else {
|
else {
|
||||||
confineTo = LookupWindow(rconfineTo, client);
|
rc = dixLookupWindow(&confineTo, rconfineTo, client, DixUnknownAccess);
|
||||||
if (!confineTo)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
}
|
}
|
||||||
if (rcursor == None)
|
if (rcursor == None)
|
||||||
cursor = NullCursor;
|
cursor = NullCursor;
|
||||||
|
@ -562,6 +563,7 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
GrabPtr grab;
|
GrabPtr grab;
|
||||||
KeyClassPtr k = dev->key;
|
KeyClassPtr k = dev->key;
|
||||||
|
int rc;
|
||||||
|
|
||||||
if (k == NULL)
|
if (k == NULL)
|
||||||
return BadMatch;
|
return BadMatch;
|
||||||
|
@ -588,9 +590,9 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
||||||
client->errorValue = ownerEvents;
|
client->errorValue = ownerEvents;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
pWin = LookupWindow(grabWindow, client);
|
rc = dixLookupWindow(&pWin, grabWindow, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
|
|
||||||
grab = CreateGrab(client->index, dev, pWin,
|
grab = CreateGrab(client->index, dev, pWin,
|
||||||
mask, ownerEvents, this_device_mode, other_devices_mode,
|
mask, ownerEvents, this_device_mode, other_devices_mode,
|
||||||
|
@ -810,7 +812,7 @@ SendEvent(ClientPtr client, DeviceIntPtr d, Window dest, Bool propagate,
|
||||||
} else
|
} else
|
||||||
effectiveFocus = pWin = inputFocus;
|
effectiveFocus = pWin = inputFocus;
|
||||||
} else
|
} else
|
||||||
pWin = LookupWindow(dest, client);
|
dixLookupWindow(&pWin, dest, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (!pWin)
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
if ((propagate != xFalse) && (propagate != xTrue)) {
|
if ((propagate != xFalse) && (propagate != xTrue)) {
|
||||||
|
|
|
@ -100,7 +100,7 @@ int
|
||||||
ProcXGetDeviceDontPropagateList(register ClientPtr client)
|
ProcXGetDeviceDontPropagateList(register ClientPtr client)
|
||||||
{
|
{
|
||||||
CARD16 count = 0;
|
CARD16 count = 0;
|
||||||
int i;
|
int i, rc;
|
||||||
XEventClass *buf = NULL, *tbuf;
|
XEventClass *buf = NULL, *tbuf;
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
xGetDeviceDontPropagateListReply rep;
|
xGetDeviceDontPropagateListReply rep;
|
||||||
|
@ -115,11 +115,10 @@ ProcXGetDeviceDontPropagateList(register ClientPtr client)
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.count = 0;
|
rep.count = 0;
|
||||||
|
|
||||||
pWin = (WindowPtr) LookupWindow(stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin) {
|
if (rc != Success) {
|
||||||
client->errorValue = stuff->window;
|
|
||||||
SendErrorToClient(client, IReqCode, X_GetDeviceDontPropagateList, 0,
|
SendErrorToClient(client, IReqCode, X_GetDeviceDontPropagateList, 0,
|
||||||
BadWindow);
|
rc);
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,8 +98,7 @@ SProcXGetSelectedExtensionEvents(register ClientPtr client)
|
||||||
int
|
int
|
||||||
ProcXGetSelectedExtensionEvents(register ClientPtr client)
|
ProcXGetSelectedExtensionEvents(register ClientPtr client)
|
||||||
{
|
{
|
||||||
int i;
|
int i, rc, total_length = 0;
|
||||||
int total_length = 0;
|
|
||||||
xGetSelectedExtensionEventsReply rep;
|
xGetSelectedExtensionEventsReply rep;
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
XEventClass *buf = NULL;
|
XEventClass *buf = NULL;
|
||||||
|
@ -118,9 +117,10 @@ ProcXGetSelectedExtensionEvents(register ClientPtr client)
|
||||||
rep.this_client_count = 0;
|
rep.this_client_count = 0;
|
||||||
rep.all_clients_count = 0;
|
rep.all_clients_count = 0;
|
||||||
|
|
||||||
if (!(pWin = LookupWindow(stuff->window, client))) {
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
|
if (rc != Success) {
|
||||||
SendErrorToClient(client, IReqCode, X_GetSelectedExtensionEvents, 0,
|
SendErrorToClient(client, IReqCode, X_GetSelectedExtensionEvents, 0,
|
||||||
BadWindow);
|
rc);
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -170,11 +170,9 @@ ProcXSelectExtensionEvent(register ClientPtr client)
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
pWin = (WindowPtr) LookupWindow(stuff->window, client);
|
ret = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin) {
|
if (ret != Success) {
|
||||||
client->errorValue = stuff->window;
|
SendErrorToClient(client, IReqCode, X_SelectExtensionEvent, 0, ret);
|
||||||
SendErrorToClient(client, IReqCode, X_SelectExtensionEvent, 0,
|
|
||||||
BadWindow);
|
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,6 +105,7 @@ ProcXUngrabDeviceButton(ClientPtr client)
|
||||||
DeviceIntPtr mdev;
|
DeviceIntPtr mdev;
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
GrabRec temporaryGrab;
|
GrabRec temporaryGrab;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST(xUngrabDeviceButtonReq);
|
REQUEST(xUngrabDeviceButtonReq);
|
||||||
REQUEST_SIZE_MATCH(xUngrabDeviceButtonReq);
|
REQUEST_SIZE_MATCH(xUngrabDeviceButtonReq);
|
||||||
|
@ -134,9 +135,9 @@ ProcXUngrabDeviceButton(ClientPtr client)
|
||||||
} else
|
} else
|
||||||
mdev = (DeviceIntPtr) LookupKeyboardDevice();
|
mdev = (DeviceIntPtr) LookupKeyboardDevice();
|
||||||
|
|
||||||
pWin = LookupWindow(stuff->grabWindow, client);
|
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixUnknownAccess);
|
||||||
if (!pWin) {
|
if (rc != Success) {
|
||||||
SendErrorToClient(client, IReqCode, X_UngrabDeviceButton, 0, BadWindow);
|
SendErrorToClient(client, IReqCode, X_UngrabDeviceButton, 0, rc);
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,6 +105,7 @@ ProcXUngrabDeviceKey(ClientPtr client)
|
||||||
DeviceIntPtr mdev;
|
DeviceIntPtr mdev;
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
GrabRec temporaryGrab;
|
GrabRec temporaryGrab;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST(xUngrabDeviceKeyReq);
|
REQUEST(xUngrabDeviceKeyReq);
|
||||||
REQUEST_SIZE_MATCH(xUngrabDeviceKeyReq);
|
REQUEST_SIZE_MATCH(xUngrabDeviceKeyReq);
|
||||||
|
@ -133,9 +134,9 @@ ProcXUngrabDeviceKey(ClientPtr client)
|
||||||
} else
|
} else
|
||||||
mdev = (DeviceIntPtr) LookupKeyboardDevice();
|
mdev = (DeviceIntPtr) LookupKeyboardDevice();
|
||||||
|
|
||||||
pWin = LookupWindow(stuff->grabWindow, client);
|
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixUnknownAccess);
|
||||||
if (!pWin) {
|
if (rc != Success) {
|
||||||
SendErrorToClient(client, IReqCode, X_UngrabDeviceKey, 0, BadWindow);
|
SendErrorToClient(client, IReqCode, X_UngrabDeviceKey, 0, rc);
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
if (((stuff->key > dev->key->curKeySyms.maxKeyCode) ||
|
if (((stuff->key > dev->key->curKeySyms.maxKeyCode) ||
|
||||||
|
|
|
@ -269,7 +269,10 @@ ProcCompositeNameWindowPixmap (ClientPtr client)
|
||||||
client->errorValue = stuff->window;
|
client->errorValue = stuff->window;
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!pWin->viewable)
|
||||||
|
return BadMatch;
|
||||||
|
|
||||||
LEGAL_NEW_RESOURCE (stuff->pixmap, client);
|
LEGAL_NEW_RESOURCE (stuff->pixmap, client);
|
||||||
|
|
||||||
cw = GetCompWindow (pWin);
|
cw = GetCompWindow (pWin);
|
||||||
|
|
|
@ -93,10 +93,10 @@ typedef struct _compPixmapVisit {
|
||||||
static Bool
|
static Bool
|
||||||
compRepaintBorder (ClientPtr pClient, pointer closure)
|
compRepaintBorder (ClientPtr pClient, pointer closure)
|
||||||
{
|
{
|
||||||
WindowPtr pWindow = LookupWindow ((XID) closure, pClient);
|
WindowPtr pWindow;
|
||||||
|
int rc = dixLookupWindow(&pWindow, (XID)closure, pClient,DixUnknownAccess);
|
||||||
|
|
||||||
if (pWindow)
|
if (rc == Success) {
|
||||||
{
|
|
||||||
RegionRec exposed;
|
RegionRec exposed;
|
||||||
|
|
||||||
REGION_NULL(pScreen, &exposed);
|
REGION_NULL(pScreen, &exposed);
|
||||||
|
|
241
config/config.c
241
config/config.c
|
@ -36,10 +36,10 @@
|
||||||
/* the above comment lies. there is no better way. */
|
/* the above comment lies. there is no better way. */
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "inputstr.h"
|
#include "inputstr.h"
|
||||||
#include "config.h"
|
#include "hotplug.h"
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
|
||||||
#define MATCH_RULE "type='method_call',interface='org.x.config.input'"
|
#define CONFIG_MATCH_RULE "type='method_call',interface='org.x.config.input'"
|
||||||
|
|
||||||
#define MALFORMED_MSG "[config] malformed message, dropping"
|
#define MALFORMED_MSG "[config] malformed message, dropping"
|
||||||
#define MALFORMED_MESSAGE() { DebugF(MALFORMED_MSG "\n"); \
|
#define MALFORMED_MESSAGE() { DebugF(MALFORMED_MSG "\n"); \
|
||||||
|
@ -50,18 +50,44 @@
|
||||||
ret = BadValue; \
|
ret = BadValue; \
|
||||||
goto unwind; }
|
goto unwind; }
|
||||||
|
|
||||||
static DBusConnection *configConnection = NULL;
|
/* How often to attempt reconnecting when we get booted off the bus. */
|
||||||
static int configfd = -1;
|
#define RECONNECT_DELAY 10000 /* in ms */
|
||||||
static char busobject[32] = { 0 };
|
|
||||||
static char busname[64] = { 0 };
|
|
||||||
|
|
||||||
void
|
struct config_data {
|
||||||
configDispatch()
|
int fd;
|
||||||
|
DBusConnection *connection;
|
||||||
|
char busobject[32];
|
||||||
|
char busname[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct config_data *configData;
|
||||||
|
|
||||||
|
static CARD32 configReconnect(OsTimerPtr timer, CARD32 time, pointer arg);
|
||||||
|
|
||||||
|
static void
|
||||||
|
configWakeupHandler(pointer blockData, int err, pointer pReadMask)
|
||||||
{
|
{
|
||||||
if (!configConnection)
|
struct config_data *data = blockData;
|
||||||
return;
|
|
||||||
|
|
||||||
dbus_connection_read_write_dispatch(configConnection, 0);
|
if (data->connection && FD_ISSET(data->fd, (fd_set *) pReadMask))
|
||||||
|
dbus_connection_read_write_dispatch(data->connection, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
configBlockHandler(pointer data, struct timeval **tv, pointer pReadMask)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
configTeardown(void)
|
||||||
|
{
|
||||||
|
if (configData) {
|
||||||
|
RemoveGeneralSocket(configData->fd);
|
||||||
|
RemoveBlockAndWakeupHandlers(configBlockHandler, configWakeupHandler,
|
||||||
|
configData);
|
||||||
|
xfree(configData);
|
||||||
|
configData = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -217,23 +243,22 @@ configMessage(DBusConnection *connection, DBusMessage *message, void *closure)
|
||||||
ret = configAddDevice(message, &iter, &error);
|
ret = configAddDevice(message, &iter, &error);
|
||||||
else if (strcmp(dbus_message_get_member(message), "remove") == 0)
|
else if (strcmp(dbus_message_get_member(message), "remove") == 0)
|
||||||
ret = configRemoveDevice(message, &iter, &error);
|
ret = configRemoveDevice(message, &iter, &error);
|
||||||
}
|
if (ret != BadDrawable && ret != BadAlloc) {
|
||||||
|
reply = dbus_message_new_method_return(message);
|
||||||
|
dbus_message_iter_init_append(reply, &iter);
|
||||||
|
|
||||||
if (ret != BadDrawable && ret != BadAlloc) {
|
if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret)) {
|
||||||
reply = dbus_message_new_method_return(message);
|
ErrorF("[config] couldn't append to iterator\n");
|
||||||
dbus_message_iter_init_append(reply, &iter);
|
dbus_error_free(&error);
|
||||||
|
return DBUS_HANDLER_RESULT_HANDLED;
|
||||||
|
}
|
||||||
|
|
||||||
if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret)) {
|
if (!dbus_connection_send(bus, reply, NULL))
|
||||||
ErrorF("[config] couldn't append to iterator\n");
|
ErrorF("[config] failed to send reply\n");
|
||||||
dbus_error_free(&error);
|
dbus_connection_flush(bus);
|
||||||
return DBUS_HANDLER_RESULT_HANDLED;
|
|
||||||
|
dbus_message_unref(reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dbus_connection_send(bus, reply, NULL))
|
|
||||||
ErrorF("[config] failed to send reply\n");
|
|
||||||
dbus_connection_flush(bus);
|
|
||||||
|
|
||||||
dbus_message_unref(reply);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dbus_error_free(&error);
|
dbus_error_free(&error);
|
||||||
|
@ -246,71 +271,147 @@ configMessage(DBusConnection *connection, DBusMessage *message, void *closure)
|
||||||
return DBUS_HANDLER_RESULT_HANDLED;
|
return DBUS_HANDLER_RESULT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
/**
|
||||||
configInitialise()
|
* This is a filter, which only handles the disconnected signal, which
|
||||||
|
* doesn't go to the normal message handling function. This takes
|
||||||
|
* precedence over the message handling function, so have have to be
|
||||||
|
* careful to ignore anything we don't want to deal with here.
|
||||||
|
*
|
||||||
|
* Yes, this is brutally stupid.
|
||||||
|
*/
|
||||||
|
static DBusHandlerResult
|
||||||
|
configFilter(DBusConnection *connection, DBusMessage *message, void *closure)
|
||||||
|
{
|
||||||
|
if (dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL,
|
||||||
|
"Disconnected")) {
|
||||||
|
ErrorF("[dbus] disconnected from bus\n");
|
||||||
|
TimerSet(NULL, 0, RECONNECT_DELAY, configReconnect, NULL);
|
||||||
|
configTeardown();
|
||||||
|
return DBUS_HANDLER_RESULT_HANDLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
configSetup(void)
|
||||||
{
|
{
|
||||||
DBusConnection *bus = NULL;
|
|
||||||
DBusError error;
|
DBusError error;
|
||||||
DBusObjectPathVTable vtable = { .message_function = configMessage };
|
DBusObjectPathVTable vtable = { .message_function = configMessage };
|
||||||
|
|
||||||
configConnection = NULL;
|
if (!configData)
|
||||||
|
configData = (struct config_data *) xcalloc(sizeof(struct config_data), 1);
|
||||||
|
if (!configData) {
|
||||||
|
ErrorF("[dbus] failed to allocate data struct.\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
dbus_error_init(&error);
|
dbus_error_init(&error);
|
||||||
bus = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
|
configData->connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
|
||||||
if (!bus || dbus_error_is_set(&error)) {
|
if (!configData->connection || dbus_error_is_set(&error)) {
|
||||||
ErrorF("[dbus] some kind of error occurred: %s (%s)\n", error.name,
|
ErrorF("[dbus] some kind of error occurred: %s (%s)\n", error.name,
|
||||||
error.message);
|
error.message);
|
||||||
dbus_error_free(&error);
|
dbus_error_free(&error);
|
||||||
return;
|
xfree(configData);
|
||||||
|
configData = NULL;
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dbus_connection_get_unix_fd(bus, &configfd)) {
|
dbus_connection_set_exit_on_disconnect(configData->connection, FALSE);
|
||||||
dbus_connection_unref(bus);
|
|
||||||
|
if (!dbus_connection_get_unix_fd(configData->connection, &configData->fd)) {
|
||||||
|
dbus_connection_unref(configData->connection);
|
||||||
ErrorF("[dbus] couldn't get fd for bus\n");
|
ErrorF("[dbus] couldn't get fd for bus\n");
|
||||||
dbus_error_free(&error);
|
dbus_error_free(&error);
|
||||||
configfd = -1;
|
xfree(configData);
|
||||||
return;
|
configData = NULL;
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(busname, sizeof(busname), "org.x.config.display%d", atoi(display));
|
snprintf(configData->busname, sizeof(configData->busname),
|
||||||
if (!dbus_bus_request_name(bus, busname, 0, &error) ||
|
"org.x.config.display%d", atoi(display));
|
||||||
dbus_error_is_set(&error)) {
|
if (!dbus_bus_request_name(configData->connection, configData->busname,
|
||||||
|
0, &error) || dbus_error_is_set(&error)) {
|
||||||
ErrorF("[dbus] couldn't take over org.x.config: %s (%s)\n",
|
ErrorF("[dbus] couldn't take over org.x.config: %s (%s)\n",
|
||||||
error.name, error.message);
|
error.name, error.message);
|
||||||
dbus_error_free(&error);
|
dbus_error_free(&error);
|
||||||
dbus_connection_unref(bus);
|
dbus_connection_unref(configData->connection);
|
||||||
configfd = -1;
|
xfree(configData);
|
||||||
return;
|
configData = NULL;
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* blocks until we get a reply. */
|
/* blocks until we get a reply. */
|
||||||
dbus_bus_add_match(bus, MATCH_RULE, &error);
|
dbus_bus_add_match(configData->connection, CONFIG_MATCH_RULE, &error);
|
||||||
if (dbus_error_is_set(&error)) {
|
if (dbus_error_is_set(&error)) {
|
||||||
ErrorF("[dbus] couldn't match X.Org rule: %s (%s)\n", error.name,
|
ErrorF("[dbus] couldn't match X.Org rule: %s (%s)\n", error.name,
|
||||||
error.message);
|
error.message);
|
||||||
dbus_error_free(&error);
|
dbus_error_free(&error);
|
||||||
dbus_bus_release_name(bus, busname, &error);
|
dbus_bus_release_name(configData->connection, configData->busname,
|
||||||
dbus_connection_unref(bus);
|
&error);
|
||||||
configfd = -1;
|
dbus_connection_unref(configData->connection);
|
||||||
return;
|
xfree(configData);
|
||||||
|
configData = NULL;
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(busobject, sizeof(busobject), "/org/x/config/%d", atoi(display));
|
if (!dbus_connection_add_filter(configData->connection, configFilter,
|
||||||
if (!dbus_connection_register_object_path(bus, busobject, &vtable, bus)) {
|
configData, NULL)) {
|
||||||
ErrorF("[dbus] couldn't register object path\n");
|
|
||||||
configfd = -1;
|
ErrorF("[dbus] couldn't add signal filter: %s (%s)\n", error.name,
|
||||||
dbus_bus_release_name(bus, busname, &error);
|
error.message);
|
||||||
dbus_bus_remove_match(bus, MATCH_RULE, &error);
|
|
||||||
dbus_connection_unref(bus);
|
|
||||||
dbus_error_free(&error);
|
dbus_error_free(&error);
|
||||||
return;
|
dbus_bus_release_name(configData->connection, configData->busname,
|
||||||
|
&error);
|
||||||
|
dbus_bus_remove_match(configData->connection, CONFIG_MATCH_RULE,
|
||||||
|
&error);
|
||||||
|
dbus_connection_unref(configData->connection);
|
||||||
|
xfree(configData);
|
||||||
|
configData = NULL;
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DebugF("[dbus] registered object path %s\n", busobject);
|
snprintf(configData->busobject, sizeof(configData->busobject),
|
||||||
|
"/org/x/config/%d", atoi(display));
|
||||||
|
if (!dbus_connection_register_object_path(configData->connection,
|
||||||
|
configData->busobject, &vtable,
|
||||||
|
configData->connection)) {
|
||||||
|
ErrorF("[dbus] couldn't register object path\n");
|
||||||
|
dbus_bus_release_name(configData->connection, configData->busname,
|
||||||
|
&error);
|
||||||
|
dbus_bus_remove_match(configData->connection, CONFIG_MATCH_RULE,
|
||||||
|
&error);
|
||||||
|
dbus_connection_unref(configData->connection);
|
||||||
|
dbus_error_free(&error);
|
||||||
|
xfree(configData);
|
||||||
|
configData = NULL;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
DebugF("[dbus] registered object path %s\n", configData->busobject);
|
||||||
|
|
||||||
dbus_error_free(&error);
|
dbus_error_free(&error);
|
||||||
configConnection = bus;
|
AddGeneralSocket(configData->fd);
|
||||||
AddGeneralSocket(configfd);
|
|
||||||
|
RegisterBlockAndWakeupHandlers(configBlockHandler, configWakeupHandler,
|
||||||
|
configData);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static CARD32
|
||||||
|
configReconnect(OsTimerPtr timer, CARD32 time, pointer arg)
|
||||||
|
{
|
||||||
|
if (configSetup())
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return RECONNECT_DELAY;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
configInitialise()
|
||||||
|
{
|
||||||
|
TimerSet(NULL, 0, 1, configReconnect, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -318,26 +419,24 @@ configFini()
|
||||||
{
|
{
|
||||||
DBusError error;
|
DBusError error;
|
||||||
|
|
||||||
if (configConnection) {
|
if (configData) {
|
||||||
dbus_error_init(&error);
|
dbus_error_init(&error);
|
||||||
dbus_connection_unregister_object_path(configConnection, busobject);
|
dbus_connection_unregister_object_path(configData->connection,
|
||||||
dbus_bus_remove_match(configConnection, MATCH_RULE, &error);
|
configData->busobject);
|
||||||
dbus_bus_release_name(configConnection, busname, &error);
|
dbus_connection_remove_filter(configData->connection, configFilter,
|
||||||
dbus_connection_unref(configConnection);
|
configData);
|
||||||
RemoveGeneralSocket(configfd);
|
dbus_bus_remove_match(configData->connection, CONFIG_MATCH_RULE,
|
||||||
configConnection = NULL;
|
&error);
|
||||||
configfd = -1;
|
dbus_bus_release_name(configData->connection, configData->busname,
|
||||||
|
&error);
|
||||||
|
dbus_connection_unref(configData->connection);
|
||||||
dbus_error_free(&error);
|
dbus_error_free(&error);
|
||||||
|
configTeardown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !HAVE_DBUS */
|
#else /* !HAVE_DBUS */
|
||||||
|
|
||||||
void
|
|
||||||
configDispatch()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
configInitialise()
|
configInitialise()
|
||||||
{
|
{
|
||||||
|
|
20
configure.ac
20
configure.ac
|
@ -174,7 +174,7 @@ AC_CACHE_CHECK([for SYSV IPC],
|
||||||
[AC_TRY_LINK([
|
[AC_TRY_LINK([
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
],[
|
],[
|
||||||
int main () {
|
{
|
||||||
int id;
|
int id;
|
||||||
id = shmget(IPC_PRIVATE, 512, SHM_W | SHM_R);
|
id = shmget(IPC_PRIVATE, 512, SHM_W | SHM_R);
|
||||||
if (id < 0) return -1;
|
if (id < 0) return -1;
|
||||||
|
@ -391,7 +391,7 @@ AC_ARG_WITH(mesa-source, AS_HELP_STRING([--with-mesa-source=MESA_SOURCE], [P
|
||||||
AC_ARG_WITH(fontdir, AS_HELP_STRING([--with-fontdir=FONTDIR], [Path to top level dir where fonts are installed (default: ${libdir}/X11/fonts)]),
|
AC_ARG_WITH(fontdir, AS_HELP_STRING([--with-fontdir=FONTDIR], [Path to top level dir where fonts are installed (default: ${libdir}/X11/fonts)]),
|
||||||
[ FONTDIR="$withval" ],
|
[ FONTDIR="$withval" ],
|
||||||
[ FONTDIR="${libdir}/X11/fonts" ])
|
[ FONTDIR="${libdir}/X11/fonts" ])
|
||||||
DEFAULT_FONT_PATH="${FONTDIR}/misc/,${FONTDIR}/TTF/,${FONTDIR}/OTF,${FONTDIR}/Type1/,${FONTDIR}/CID/,${FONTDIR}/100dpi/,${FONTDIR}/75dpi/"
|
DEFAULT_FONT_PATH="${FONTDIR}/misc/,${FONTDIR}/TTF/,${FONTDIR}/OTF,${FONTDIR}/Type1/,${FONTDIR}/100dpi/,${FONTDIR}/75dpi/"
|
||||||
AC_ARG_WITH(default-font-path, AS_HELP_STRING([--with-default-font-path=PATH], [Comma separated list of font dirs]),
|
AC_ARG_WITH(default-font-path, AS_HELP_STRING([--with-default-font-path=PATH], [Comma separated list of font dirs]),
|
||||||
[ FONTPATH="$withval" ],
|
[ FONTPATH="$withval" ],
|
||||||
[ FONTPATH="${DEFAULT_FONT_PATH}" ])
|
[ FONTPATH="${DEFAULT_FONT_PATH}" ])
|
||||||
|
@ -545,7 +545,7 @@ XEXT_LIB='$(top_builddir)/Xext/libXext.la'
|
||||||
XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
|
XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
|
||||||
|
|
||||||
dnl Core modules for most extensions, et al.
|
dnl Core modules for most extensions, et al.
|
||||||
REQUIRED_MODULES="randrproto renderproto [fixesproto >= 4.0] damageproto xcmiscproto xextproto xproto xtrans [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto [inputproto >= 1.4] [kbproto >= 1.0.3]"
|
REQUIRED_MODULES="[randrproto >= 1.2] renderproto [fixesproto >= 4.0] damageproto xcmiscproto xextproto xproto xtrans [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto [inputproto >= 1.4] [kbproto >= 1.0.3]"
|
||||||
REQUIRED_LIBS="xfont xau fontenc"
|
REQUIRED_LIBS="xfont xau fontenc"
|
||||||
|
|
||||||
if test "x$DBUS" = xauto; then
|
if test "x$DBUS" = xauto; then
|
||||||
|
@ -655,6 +655,9 @@ if test "x$DRI" = xyes; then
|
||||||
PKG_CHECK_MODULES([DRIPROTO], [xf86driproto])
|
PKG_CHECK_MODULES([DRIPROTO], [xf86driproto])
|
||||||
PKG_CHECK_MODULES([LIBDRM], [libdrm >= 2.3.0])
|
PKG_CHECK_MODULES([LIBDRM], [libdrm >= 2.3.0])
|
||||||
PKG_CHECK_MODULES([GL], [glproto >= 1.4.1])
|
PKG_CHECK_MODULES([GL], [glproto >= 1.4.1])
|
||||||
|
PKG_CHECK_EXISTS(libdrm >= 2.2.0,
|
||||||
|
[AC_DEFINE([HAVE_LIBDRM_2_2], 1,
|
||||||
|
[Has version 2.2 (or newer) of the drm library])])
|
||||||
AC_SUBST(DRIPROTO_CFLAGS)
|
AC_SUBST(DRIPROTO_CFLAGS)
|
||||||
AC_SUBST(LIBDRM_CFLAGS)
|
AC_SUBST(LIBDRM_CFLAGS)
|
||||||
AC_SUBST(LIBDRM_LIBS)
|
AC_SUBST(LIBDRM_LIBS)
|
||||||
|
@ -1004,7 +1007,7 @@ dnl ---------------------------------------------------------------------------
|
||||||
dnl DMX DDX
|
dnl DMX DDX
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to build Xdmx DDX])
|
AC_MSG_CHECKING([whether to build Xdmx DDX])
|
||||||
PKG_CHECK_MODULES([DMXMODULES], [xmuu xext x11 xrender xfont xi dmxproto xau $XDMCP_MODULES], [have_dmx=yes], [have_dmx=no])
|
PKG_CHECK_MODULES([DMXMODULES], [xmuu xext x11 xrender xfixes xfont xi dmxproto xau $XDMCP_MODULES], [have_dmx=yes], [have_dmx=no])
|
||||||
if test "x$DMX" = xauto; then
|
if test "x$DMX" = xauto; then
|
||||||
DMX="$have_dmx"
|
DMX="$have_dmx"
|
||||||
fi
|
fi
|
||||||
|
@ -1056,7 +1059,7 @@ AC_MSG_RESULT([$XVFB])
|
||||||
AM_CONDITIONAL(XVFB, [test "x$XVFB" = xyes])
|
AM_CONDITIONAL(XVFB, [test "x$XVFB" = xyes])
|
||||||
|
|
||||||
if test "x$XVFB" = xyes; then
|
if test "x$XVFB" = xyes; then
|
||||||
XVFB_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $XPSTUBS_LIB $CWRAP_LIB $OS_LIB $LIBS"
|
XVFB_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $XPSTUBS_LIB $CWRAP_LIB $OS_LIB $LIBS"
|
||||||
AC_SUBST([XVFB_LIBS])
|
AC_SUBST([XVFB_LIBS])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -1383,6 +1386,7 @@ dnl has it in libc), or if libdl is needed to get it.
|
||||||
AC_DEFINE_DIR(__XCONFIGFILE__, XF86CONFIGFILE, [Name of configuration file])
|
AC_DEFINE_DIR(__XCONFIGFILE__, XF86CONFIGFILE, [Name of configuration file])
|
||||||
AC_DEFINE_DIR(XF86CONFIGFILE, XF86CONFIGFILE, [Name of configuration file])
|
AC_DEFINE_DIR(XF86CONFIGFILE, XF86CONFIGFILE, [Name of configuration file])
|
||||||
AC_DEFINE_DIR(DEFAULT_MODULE_PATH, moduledir, [Default module search path])
|
AC_DEFINE_DIR(DEFAULT_MODULE_PATH, moduledir, [Default module search path])
|
||||||
|
AC_DEFINE_DIR(DEFAULT_LIBRARY_PATH, libdir, [Default library install path])
|
||||||
AC_DEFINE_DIR(DEFAULT_LOGPREFIX, LOGPREFIX, [Default log location])
|
AC_DEFINE_DIR(DEFAULT_LOGPREFIX, LOGPREFIX, [Default log location])
|
||||||
AC_DEFINE_UNQUOTED(__VENDORDWEBSUPPORT__, ["$VENDOR_WEB"], [Vendor web address for support])
|
AC_DEFINE_UNQUOTED(__VENDORDWEBSUPPORT__, ["$VENDOR_WEB"], [Vendor web address for support])
|
||||||
|
|
||||||
|
@ -1758,13 +1762,11 @@ AM_CONDITIONAL(BUILD_KBD_MODE, [test x$BUILD_KBD_MODE = xyes])
|
||||||
AM_CONDITIONAL(BSD_KBD_MODE, [test x$KBD_MODE_TYPE = xbsd])
|
AM_CONDITIONAL(BSD_KBD_MODE, [test x$KBD_MODE_TYPE = xbsd])
|
||||||
AM_CONDITIONAL(SUN_KBD_MODE, [test x$KBD_MODE_TYPE = xsun])
|
AM_CONDITIONAL(SUN_KBD_MODE, [test x$KBD_MODE_TYPE = xsun])
|
||||||
|
|
||||||
CFLAGS="$XSERVER_CFLAGS $CFLAGS"
|
|
||||||
AC_SUBST([CFLAGS])
|
|
||||||
|
|
||||||
BUILD_DATE="$(date +'%Y%m%d')"
|
BUILD_DATE="$(date +'%Y%m%d')"
|
||||||
AC_SUBST([BUILD_DATE])
|
AC_SUBST([BUILD_DATE])
|
||||||
|
|
||||||
DIX_CFLAGS="-DHAVE_DIX_CONFIG_H"
|
DIX_CFLAGS="-DHAVE_DIX_CONFIG_H $XSERVER_CFLAGS"
|
||||||
|
|
||||||
AC_SUBST([DIX_CFLAGS])
|
AC_SUBST([DIX_CFLAGS])
|
||||||
|
|
||||||
AC_SUBST([libdir exec_prefix prefix])
|
AC_SUBST([libdir exec_prefix prefix])
|
||||||
|
|
|
@ -34,6 +34,7 @@ MANDEFS = \
|
||||||
-D__miscmansuffix__=$(MISC_MAN_SUFFIX) \
|
-D__miscmansuffix__=$(MISC_MAN_SUFFIX) \
|
||||||
-D__drivermansuffix__=$(DRIVER_MAN_SUFFIX) \
|
-D__drivermansuffix__=$(DRIVER_MAN_SUFFIX) \
|
||||||
-D__adminmansuffix__=$(ADMIN_MAN_SUFFIX) \
|
-D__adminmansuffix__=$(ADMIN_MAN_SUFFIX) \
|
||||||
|
-D__mandir__=$(mandir) \
|
||||||
-D__projectroot__=$(prefix) \
|
-D__projectroot__=$(prefix) \
|
||||||
-D__xconfigfile__=$(__XCONFIGFILE__) -D__xconfigdir__=$(XCONFIGDIR) \
|
-D__xconfigfile__=$(__XCONFIGFILE__) -D__xconfigdir__=$(XCONFIGDIR) \
|
||||||
-D__xlogfile__=$(XLOGFILE) -D__xservername__=$(XSERVERNAME)
|
-D__xlogfile__=$(XLOGFILE) -D__xservername__=$(XSERVERNAME)
|
||||||
|
|
|
@ -173,13 +173,17 @@ ProcDamageCreate (ClientPtr client)
|
||||||
DamageExtPtr pDamageExt;
|
DamageExtPtr pDamageExt;
|
||||||
DamageReportLevel level;
|
DamageReportLevel level;
|
||||||
RegionPtr pRegion;
|
RegionPtr pRegion;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST(xDamageCreateReq);
|
REQUEST(xDamageCreateReq);
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xDamageCreateReq);
|
REQUEST_SIZE_MATCH(xDamageCreateReq);
|
||||||
LEGAL_NEW_RESOURCE(stuff->damage, client);
|
LEGAL_NEW_RESOURCE(stuff->damage, client);
|
||||||
SECURITY_VERIFY_DRAWABLE (pDrawable, stuff->drawable, client,
|
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||||
SecurityReadAccess);
|
DixReadAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
|
||||||
switch (stuff->level) {
|
switch (stuff->level) {
|
||||||
case XDamageReportRawRectangles:
|
case XDamageReportRawRectangles:
|
||||||
level = DamageReportRawRegion;
|
level = DamageReportRawRegion;
|
||||||
|
@ -237,7 +241,7 @@ ProcDamageDestroy (ClientPtr client)
|
||||||
DamageExtPtr pDamageExt;
|
DamageExtPtr pDamageExt;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xDamageDestroyReq);
|
REQUEST_SIZE_MATCH(xDamageDestroyReq);
|
||||||
VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, SecurityWriteAccess);
|
VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, DixWriteAccess);
|
||||||
FreeResource (stuff->damage, RT_NONE);
|
FreeResource (stuff->damage, RT_NONE);
|
||||||
return (client->noClientException);
|
return (client->noClientException);
|
||||||
}
|
}
|
||||||
|
@ -251,9 +255,9 @@ ProcDamageSubtract (ClientPtr client)
|
||||||
RegionPtr pParts;
|
RegionPtr pParts;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xDamageSubtractReq);
|
REQUEST_SIZE_MATCH(xDamageSubtractReq);
|
||||||
VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, SecurityWriteAccess);
|
VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, DixWriteAccess);
|
||||||
VERIFY_REGION_OR_NONE(pRepair, stuff->repair, client, SecurityWriteAccess);
|
VERIFY_REGION_OR_NONE(pRepair, stuff->repair, client, DixWriteAccess);
|
||||||
VERIFY_REGION_OR_NONE(pParts, stuff->parts, client, SecurityWriteAccess);
|
VERIFY_REGION_OR_NONE(pParts, stuff->parts, client, DixWriteAccess);
|
||||||
|
|
||||||
if (pDamageExt->level != DamageReportRawRegion)
|
if (pDamageExt->level != DamageReportRawRegion)
|
||||||
{
|
{
|
||||||
|
|
32
dbe/dbe.c
32
dbe/dbe.c
|
@ -405,11 +405,9 @@ ProcDbeAllocateBackBufferName(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xDbeAllocateBackBufferNameReq);
|
REQUEST_SIZE_MATCH(xDbeAllocateBackBufferNameReq);
|
||||||
|
|
||||||
/* The window must be valid. */
|
/* The window must be valid. */
|
||||||
if (!(pWin = SecurityLookupWindow(stuff->window, client,
|
status = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||||
SecurityWriteAccess)))
|
if (status != Success)
|
||||||
{
|
return status;
|
||||||
return(BadWindow);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The window must be InputOutput. */
|
/* The window must be InputOutput. */
|
||||||
if (pWin->drawable.class != InputOutput)
|
if (pWin->drawable.class != InputOutput)
|
||||||
|
@ -633,9 +631,9 @@ ProcDbeDeallocateBackBufferName(ClientPtr client)
|
||||||
|
|
||||||
/* Buffer name must be valid */
|
/* Buffer name must be valid */
|
||||||
if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client,
|
if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client,
|
||||||
stuff->buffer, dbeWindowPrivResType, SecurityDestroyAccess)) ||
|
stuff->buffer, dbeWindowPrivResType, DixDestroyAccess)) ||
|
||||||
!(SecurityLookupIDByType(client, stuff->buffer, dbeDrawableResType,
|
!(SecurityLookupIDByType(client, stuff->buffer, dbeDrawableResType,
|
||||||
SecurityDestroyAccess)))
|
DixDestroyAccess)))
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->buffer;
|
client->errorValue = stuff->buffer;
|
||||||
return(dbeErrorBase + DbeBadBuffer);
|
return(dbeErrorBase + DbeBadBuffer);
|
||||||
|
@ -729,11 +727,11 @@ ProcDbeSwapBuffers(ClientPtr client)
|
||||||
/* Check all windows to swap. */
|
/* Check all windows to swap. */
|
||||||
|
|
||||||
/* Each window must be a valid window - BadWindow. */
|
/* Each window must be a valid window - BadWindow. */
|
||||||
if (!(pWin = SecurityLookupWindow(dbeSwapInfo[i].window, client,
|
error = dixLookupWindow(&pWin, dbeSwapInfo[i].window, client,
|
||||||
SecurityWriteAccess)))
|
DixWriteAccess);
|
||||||
{
|
if (error != Success) {
|
||||||
DEALLOCATE_LOCAL(swapInfo);
|
DEALLOCATE_LOCAL(swapInfo);
|
||||||
return(BadWindow);
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Each window must be double-buffered - BadMatch. */
|
/* Each window must be double-buffered - BadMatch. */
|
||||||
|
@ -867,7 +865,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
|
||||||
xDbeGetVisualInfoReply rep;
|
xDbeGetVisualInfoReply rep;
|
||||||
Drawable *drawables;
|
Drawable *drawables;
|
||||||
DrawablePtr *pDrawables = NULL;
|
DrawablePtr *pDrawables = NULL;
|
||||||
register int i, j, n;
|
register int i, j, n, rc;
|
||||||
register int count; /* number of visual infos in reply */
|
register int count; /* number of visual infos in reply */
|
||||||
register int length; /* length of reply */
|
register int length; /* length of reply */
|
||||||
ScreenPtr pScreen;
|
ScreenPtr pScreen;
|
||||||
|
@ -889,11 +887,11 @@ ProcDbeGetVisualInfo(ClientPtr client)
|
||||||
|
|
||||||
for (i = 0; i < stuff->n; i++)
|
for (i = 0; i < stuff->n; i++)
|
||||||
{
|
{
|
||||||
if (!(pDrawables[i] = (DrawablePtr)SecurityLookupDrawable(
|
rc = dixLookupDrawable(pDrawables+i, drawables[i], client, 0,
|
||||||
drawables[i], client, SecurityReadAccess)))
|
DixReadAccess);
|
||||||
{
|
if (rc != Success) {
|
||||||
DEALLOCATE_LOCAL(pDrawables);
|
DEALLOCATE_LOCAL(pDrawables);
|
||||||
return(BadDrawable);
|
return rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1047,7 +1045,7 @@ ProcDbeGetBackBufferAttributes(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xDbeGetBackBufferAttributesReq);
|
REQUEST_SIZE_MATCH(xDbeGetBackBufferAttributesReq);
|
||||||
|
|
||||||
if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client,
|
if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client,
|
||||||
stuff->buffer, dbeWindowPrivResType, SecurityReadAccess)))
|
stuff->buffer, dbeWindowPrivResType, DixReadAccess)))
|
||||||
{
|
{
|
||||||
rep.attributes = None;
|
rep.attributes = None;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ Xserver-dtrace.h: $(srcdir)/Xserver.d
|
||||||
dtrace-dix.o: $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS)
|
dtrace-dix.o: $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS)
|
||||||
$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d .libs/*.o
|
$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d .libs/*.o
|
||||||
|
|
||||||
noinst_LIBRARIES = dix.O
|
noinst_PROGRAMS = dix.O
|
||||||
|
|
||||||
dix.O: dtrace-dix.o $(am_libdix_la_OBJECTS)
|
dix.O: dtrace-dix.o $(am_libdix_la_OBJECTS)
|
||||||
ld -r -o $@ .libs/*.o
|
ld -r -o $@ .libs/*.o
|
||||||
|
|
|
@ -903,7 +903,7 @@ AllocColor (ColormapPtr pmap,
|
||||||
{
|
{
|
||||||
ColormapPtr prootmap = (ColormapPtr)
|
ColormapPtr prootmap = (ColormapPtr)
|
||||||
SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap,
|
SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap,
|
||||||
RT_COLORMAP, SecurityReadAccess);
|
RT_COLORMAP, DixReadAccess);
|
||||||
|
|
||||||
if (pmap->class == prootmap->class)
|
if (pmap->class == prootmap->class)
|
||||||
FindColorInRootCmap (prootmap, prootmap->red, entries, &rgb,
|
FindColorInRootCmap (prootmap, prootmap->red, entries, &rgb,
|
||||||
|
@ -920,7 +920,7 @@ AllocColor (ColormapPtr pmap,
|
||||||
{
|
{
|
||||||
ColormapPtr prootmap = (ColormapPtr)
|
ColormapPtr prootmap = (ColormapPtr)
|
||||||
SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap,
|
SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap,
|
||||||
RT_COLORMAP, SecurityReadAccess);
|
RT_COLORMAP, DixReadAccess);
|
||||||
|
|
||||||
if (pmap->class == prootmap->class)
|
if (pmap->class == prootmap->class)
|
||||||
{
|
{
|
||||||
|
|
|
@ -262,9 +262,9 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
|
||||||
GlyphSharePtr pShare;
|
GlyphSharePtr pShare;
|
||||||
|
|
||||||
sourcefont = (FontPtr) SecurityLookupIDByType(client, source, RT_FONT,
|
sourcefont = (FontPtr) SecurityLookupIDByType(client, source, RT_FONT,
|
||||||
SecurityReadAccess);
|
DixReadAccess);
|
||||||
maskfont = (FontPtr) SecurityLookupIDByType(client, mask, RT_FONT,
|
maskfont = (FontPtr) SecurityLookupIDByType(client, mask, RT_FONT,
|
||||||
SecurityReadAccess);
|
DixReadAccess);
|
||||||
|
|
||||||
if (!sourcefont)
|
if (!sourcefont)
|
||||||
{
|
{
|
||||||
|
|
|
@ -69,9 +69,7 @@ SOFTWARE.
|
||||||
#ifdef XKB
|
#ifdef XKB
|
||||||
#include <X11/extensions/XKBsrv.h>
|
#include <X11/extensions/XKBsrv.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef XACE
|
|
||||||
#include "xace.h"
|
#include "xace.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "dispatch.h"
|
#include "dispatch.h"
|
||||||
#include "swaprep.h"
|
#include "swaprep.h"
|
||||||
|
@ -1178,10 +1176,8 @@ DoSetModifierMapping(ClientPtr client, KeyCode *inputMap,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XACE
|
|
||||||
if (!XaceHook(XACE_DEVICE_ACCESS, client, pDev, TRUE))
|
if (!XaceHook(XACE_DEVICE_ACCESS, client, pDev, TRUE))
|
||||||
return BadAccess;
|
return BadAccess;
|
||||||
#endif
|
|
||||||
|
|
||||||
/* None of the modifiers (old or new) may be down while we change
|
/* None of the modifiers (old or new) may be down while we change
|
||||||
* the map. */
|
* the map. */
|
||||||
|
@ -1302,14 +1298,12 @@ ProcChangeKeyboardMapping(ClientPtr client)
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XACE
|
|
||||||
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
|
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
|
||||||
if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key) {
|
if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key) {
|
||||||
if (!XaceHook(XACE_DEVICE_ACCESS, client, pDev, TRUE))
|
if (!XaceHook(XACE_DEVICE_ACCESS, client, pDev, TRUE))
|
||||||
return BadAccess;
|
return BadAccess;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
keysyms.minKeyCode = stuff->firstKeyCode;
|
keysyms.minKeyCode = stuff->firstKeyCode;
|
||||||
keysyms.maxKeyCode = stuff->firstKeyCode + stuff->keyCodes - 1;
|
keysyms.maxKeyCode = stuff->firstKeyCode + stuff->keyCodes - 1;
|
||||||
|
@ -1655,7 +1649,6 @@ ProcChangeKeyboardControl (ClientPtr client)
|
||||||
if (client->req_len != (sizeof(xChangeKeyboardControlReq)>>2)+Ones(vmask))
|
if (client->req_len != (sizeof(xChangeKeyboardControlReq)>>2)+Ones(vmask))
|
||||||
return BadLength;
|
return BadLength;
|
||||||
|
|
||||||
#ifdef XACE
|
|
||||||
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
|
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
|
||||||
if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
|
if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
|
||||||
pDev->kbdfeed && pDev->kbdfeed->CtrlProc) {
|
pDev->kbdfeed && pDev->kbdfeed->CtrlProc) {
|
||||||
|
@ -1663,7 +1656,6 @@ ProcChangeKeyboardControl (ClientPtr client)
|
||||||
return BadAccess;
|
return BadAccess;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
|
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
|
||||||
if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
|
if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
|
||||||
|
@ -1848,16 +1840,16 @@ ProcGetMotionEvents(ClientPtr client)
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
xTimecoord * coords = (xTimecoord *) NULL;
|
xTimecoord * coords = (xTimecoord *) NULL;
|
||||||
xGetMotionEventsReply rep;
|
xGetMotionEventsReply rep;
|
||||||
int i, count, xmin, xmax, ymin, ymax;
|
int i, count, xmin, xmax, ymin, ymax, rc;
|
||||||
unsigned long nEvents;
|
unsigned long nEvents;
|
||||||
DeviceIntPtr mouse = inputInfo.pointer;
|
DeviceIntPtr mouse = inputInfo.pointer;
|
||||||
TimeStamp start, stop;
|
TimeStamp start, stop;
|
||||||
REQUEST(xGetMotionEventsReq);
|
REQUEST(xGetMotionEventsReq);
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xGetMotionEventsReq);
|
REQUEST_SIZE_MATCH(xGetMotionEventsReq);
|
||||||
pWin = SecurityLookupWindow(stuff->window, client, TRUE);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
if (mouse->valuator->motionHintWindow)
|
if (mouse->valuator->motionHintWindow)
|
||||||
MaybeStopHint(mouse, client);
|
MaybeStopHint(mouse, client);
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
|
@ -1920,15 +1912,13 @@ ProcQueryKeymap(ClientPtr client)
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
rep.length = 2;
|
rep.length = 2;
|
||||||
#ifdef XACE
|
|
||||||
if (!XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
|
if (XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
|
||||||
{
|
for (i = 0; i<32; i++)
|
||||||
bzero((char *)&rep.map[0], 32);
|
rep.map[i] = down[i];
|
||||||
}
|
|
||||||
else
|
else
|
||||||
#endif
|
bzero((char *)&rep.map[0], 32);
|
||||||
for (i = 0; i<32; i++)
|
|
||||||
rep.map[i] = down[i];
|
|
||||||
WriteReplyToClient(client, sizeof(xQueryKeymapReply), &rep);
|
WriteReplyToClient(client, sizeof(xQueryKeymapReply), &rep);
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
488
dix/dispatch.c
488
dix/dispatch.c
File diff suppressed because it is too large
Load Diff
|
@ -1178,7 +1178,7 @@ doPolyText(ClientPtr client, register PTclosurePtr c)
|
||||||
if (c->slept &&
|
if (c->slept &&
|
||||||
c->pDraw &&
|
c->pDraw &&
|
||||||
c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did,
|
c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did,
|
||||||
RC_DRAWABLE, SecurityWriteAccess))
|
RC_DRAWABLE, DixWriteAccess))
|
||||||
{
|
{
|
||||||
/* Our drawable has disappeared. Treat like client died... ask
|
/* Our drawable has disappeared. Treat like client died... ask
|
||||||
the FPE code to clean up after client and avoid further
|
the FPE code to clean up after client and avoid further
|
||||||
|
@ -1208,7 +1208,7 @@ doPolyText(ClientPtr client, register PTclosurePtr c)
|
||||||
| ((Font)*(c->pElt+2)) << 16
|
| ((Font)*(c->pElt+2)) << 16
|
||||||
| ((Font)*(c->pElt+1)) << 24;
|
| ((Font)*(c->pElt+1)) << 24;
|
||||||
pFont = (FontPtr)SecurityLookupIDByType(client, fid, RT_FONT,
|
pFont = (FontPtr)SecurityLookupIDByType(client, fid, RT_FONT,
|
||||||
SecurityReadAccess);
|
DixReadAccess);
|
||||||
if (!pFont)
|
if (!pFont)
|
||||||
{
|
{
|
||||||
client->errorValue = fid;
|
client->errorValue = fid;
|
||||||
|
@ -1463,7 +1463,7 @@ doImageText(ClientPtr client, register ITclosurePtr c)
|
||||||
if (c->slept &&
|
if (c->slept &&
|
||||||
c->pDraw &&
|
c->pDraw &&
|
||||||
c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did,
|
c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did,
|
||||||
RC_DRAWABLE, SecurityWriteAccess))
|
RC_DRAWABLE, DixWriteAccess))
|
||||||
{
|
{
|
||||||
/* Our drawable has disappeared. Treat like client died... ask
|
/* Our drawable has disappeared. Treat like client died... ask
|
||||||
the FPE code to clean up after client. */
|
the FPE code to clean up after client. */
|
||||||
|
@ -2016,7 +2016,7 @@ FontPtr
|
||||||
find_old_font(XID id)
|
find_old_font(XID id)
|
||||||
{
|
{
|
||||||
return (FontPtr) SecurityLookupIDByType(NullClient, id, RT_NONE,
|
return (FontPtr) SecurityLookupIDByType(NullClient, id, RT_NONE,
|
||||||
SecurityUnknownAccess);
|
DixUnknownAccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
Font
|
Font
|
||||||
|
|
205
dix/dixutils.c
205
dix/dixutils.c
|
@ -95,9 +95,7 @@ Author: Adobe Systems Incorporated
|
||||||
#include "scrnintstr.h"
|
#include "scrnintstr.h"
|
||||||
#define XK_LATIN1
|
#define XK_LATIN1
|
||||||
#include <X11/keysymdef.h>
|
#include <X11/keysymdef.h>
|
||||||
#ifdef XACE
|
|
||||||
#include "xace.h"
|
#include "xace.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CompareTimeStamps returns -1, 0, or +1 depending on if the first
|
* CompareTimeStamps returns -1, 0, or +1 depending on if the first
|
||||||
|
@ -196,115 +194,144 @@ CompareISOLatin1Lowered(unsigned char *s1, int s1len,
|
||||||
return (int) c1 - (int) c2;
|
return (int) c1 - (int) c2;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XACE
|
/*
|
||||||
|
* dixLookupWindow and dixLookupDrawable:
|
||||||
/* SecurityLookupWindow and SecurityLookupDrawable:
|
* Look up the window/drawable taking into account the client doing the
|
||||||
* Look up the window/drawable taking into account the client doing
|
* lookup, the type of drawable desired, and the type of access desired.
|
||||||
* the lookup and the type of access desired. Return the window/drawable
|
* Return Success with *pDraw set if the window/drawable exists and the client
|
||||||
* if it exists and the client is allowed access, else return NULL.
|
* is allowed access, else return an error code with *pDraw set to NULL. The
|
||||||
* Most Proc* functions should be calling these instead of
|
* access mask values are defined in resource.h. The type mask values are
|
||||||
* LookupWindow and LookupDrawable, which do no access checks.
|
* defined in pixmap.h, with zero equivalent to M_DRAWABLE.
|
||||||
* XACE note: need to see if client->lastDrawableID can still be used here.
|
|
||||||
*/
|
*/
|
||||||
|
_X_EXPORT int
|
||||||
_X_EXPORT WindowPtr
|
dixLookupDrawable(DrawablePtr *pDraw, XID id, ClientPtr client,
|
||||||
SecurityLookupWindow(XID rid, ClientPtr client, Mask access_mode)
|
Mask type, Mask access)
|
||||||
{
|
{
|
||||||
client->errorValue = rid;
|
DrawablePtr pTmp;
|
||||||
if(rid == INVALID)
|
RESTYPE rtype;
|
||||||
return NULL;
|
*pDraw = NULL;
|
||||||
return (WindowPtr)SecurityLookupIDByType(client, rid, RT_WINDOW, access_mode);
|
client->errorValue = id;
|
||||||
}
|
|
||||||
|
|
||||||
|
if (id == INVALID)
|
||||||
|
return BadDrawable;
|
||||||
|
|
||||||
_X_EXPORT pointer
|
if (id == client->lastDrawableID) {
|
||||||
SecurityLookupDrawable(XID rid, ClientPtr client, Mask access_mode)
|
pTmp = client->lastDrawable;
|
||||||
{
|
|
||||||
register DrawablePtr pDraw;
|
|
||||||
|
|
||||||
if(rid == INVALID)
|
/* an access check is required for cached drawables */
|
||||||
return (pointer) NULL;
|
rtype = (pTmp->type | M_WINDOW) ? RT_WINDOW : RT_PIXMAP;
|
||||||
pDraw = (DrawablePtr)SecurityLookupIDByClass(client, rid, RC_DRAWABLE,
|
if (!XaceHook(XACE_RESOURCE_ACCESS, client, id, rtype, access, pTmp))
|
||||||
access_mode);
|
return BadDrawable;
|
||||||
if (pDraw && (pDraw->type != UNDRAWABLE_WINDOW))
|
} else
|
||||||
return (pointer)pDraw;
|
pTmp = (DrawablePtr)SecurityLookupIDByClass(client, id, RC_DRAWABLE,
|
||||||
return (pointer)NULL;
|
access);
|
||||||
}
|
if (!pTmp)
|
||||||
|
return BadDrawable;
|
||||||
|
if (!((1 << pTmp->type) | (type ? type : M_DRAWABLE)))
|
||||||
|
return BadMatch;
|
||||||
|
|
||||||
/* We can't replace the LookupWindow and LookupDrawable functions with
|
if (pTmp->type | M_DRAWABLE) {
|
||||||
* macros because of compatibility with loadable servers.
|
client->lastDrawable = pTmp;
|
||||||
*/
|
client->lastDrawableID = id;
|
||||||
|
|
||||||
_X_EXPORT WindowPtr
|
|
||||||
LookupWindow(XID rid, ClientPtr client)
|
|
||||||
{
|
|
||||||
return SecurityLookupWindow(rid, client, SecurityUnknownAccess);
|
|
||||||
}
|
|
||||||
|
|
||||||
_X_EXPORT pointer
|
|
||||||
LookupDrawable(XID rid, ClientPtr client)
|
|
||||||
{
|
|
||||||
return SecurityLookupDrawable(rid, client, SecurityUnknownAccess);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* not XACE */
|
|
||||||
|
|
||||||
WindowPtr
|
|
||||||
LookupWindow(XID rid, ClientPtr client)
|
|
||||||
{
|
|
||||||
WindowPtr pWin;
|
|
||||||
|
|
||||||
client->errorValue = rid;
|
|
||||||
if(rid == INVALID)
|
|
||||||
return NULL;
|
|
||||||
if (client->lastDrawableID == rid)
|
|
||||||
{
|
|
||||||
if (client->lastDrawable->type == DRAWABLE_WINDOW)
|
|
||||||
return ((WindowPtr) client->lastDrawable);
|
|
||||||
return (WindowPtr) NULL;
|
|
||||||
}
|
|
||||||
pWin = (WindowPtr)LookupIDByType(rid, RT_WINDOW);
|
|
||||||
if (pWin && pWin->drawable.type == DRAWABLE_WINDOW) {
|
|
||||||
client->lastDrawable = (DrawablePtr) pWin;
|
|
||||||
client->lastDrawableID = rid;
|
|
||||||
client->lastGCID = INVALID;
|
client->lastGCID = INVALID;
|
||||||
client->lastGC = (GCPtr)NULL;
|
client->lastGC = (GCPtr)NULL;
|
||||||
}
|
}
|
||||||
return pWin;
|
*pDraw = pTmp;
|
||||||
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_X_EXPORT int
|
||||||
pointer
|
dixLookupWindow(WindowPtr *pWin, XID id, ClientPtr client, Mask access)
|
||||||
LookupDrawable(XID rid, ClientPtr client)
|
|
||||||
{
|
{
|
||||||
register DrawablePtr pDraw;
|
int rc;
|
||||||
|
rc = dixLookupDrawable((DrawablePtr*)pWin, id, client, M_WINDOW, access);
|
||||||
if(rid == INVALID)
|
return (rc == BadDrawable) ? BadWindow : rc;
|
||||||
return (pointer) NULL;
|
|
||||||
if (client->lastDrawableID == rid)
|
|
||||||
return ((pointer) client->lastDrawable);
|
|
||||||
pDraw = (DrawablePtr)LookupIDByClass(rid, RC_DRAWABLE);
|
|
||||||
if (pDraw && (pDraw->type != UNDRAWABLE_WINDOW))
|
|
||||||
return (pointer)pDraw;
|
|
||||||
return (pointer)NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* XACE */
|
_X_EXPORT int
|
||||||
|
dixLookupGC(GCPtr *pGC, XID id, ClientPtr client, Mask access)
|
||||||
|
{
|
||||||
|
GCPtr pTmp = (GCPtr)SecurityLookupIDByType(client, id, RT_GC, access);
|
||||||
|
if (pTmp) {
|
||||||
|
*pGC = pTmp;
|
||||||
|
return Success;
|
||||||
|
}
|
||||||
|
client->errorValue = id;
|
||||||
|
*pGC = NULL;
|
||||||
|
return BadGC;
|
||||||
|
}
|
||||||
|
|
||||||
_X_EXPORT ClientPtr
|
_X_EXPORT int
|
||||||
LookupClient(XID rid, ClientPtr client)
|
dixLookupClient(ClientPtr *pClient, XID rid, ClientPtr client, Mask access)
|
||||||
{
|
{
|
||||||
pointer pRes = (pointer)SecurityLookupIDByClass(client, rid, RC_ANY,
|
pointer pRes = (pointer)SecurityLookupIDByClass(client, rid, RC_ANY,
|
||||||
SecurityReadAccess);
|
DixReadAccess);
|
||||||
int clientIndex = CLIENT_ID(rid);
|
int clientIndex = CLIENT_ID(rid);
|
||||||
|
client->errorValue = rid;
|
||||||
|
|
||||||
if (clientIndex && pRes && clients[clientIndex] && !(rid & SERVER_BIT))
|
if (clientIndex && pRes && clients[clientIndex] && !(rid & SERVER_BIT)) {
|
||||||
{
|
*pClient = clients[clientIndex];
|
||||||
return clients[clientIndex];
|
return Success;
|
||||||
}
|
}
|
||||||
return (ClientPtr)NULL;
|
*pClient = NULL;
|
||||||
|
return BadValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These are deprecated compatibility functions and will be removed soon!
|
||||||
|
* Please use the new dixLookup*() functions above.
|
||||||
|
*/
|
||||||
|
_X_EXPORT _X_DEPRECATED WindowPtr
|
||||||
|
SecurityLookupWindow(XID id, ClientPtr client, Mask access_mode)
|
||||||
|
{
|
||||||
|
WindowPtr pWin;
|
||||||
|
int i = dixLookupWindow(&pWin, id, client, access_mode);
|
||||||
|
static int warn = 1;
|
||||||
|
if (warn-- > 0)
|
||||||
|
ErrorF("Warning: LookupWindow()/SecurityLookupWindow() "
|
||||||
|
"are deprecated. Please convert your driver/module "
|
||||||
|
"to use dixLookupWindow().\n");
|
||||||
|
return (i == Success) ? pWin : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
_X_EXPORT _X_DEPRECATED WindowPtr
|
||||||
|
LookupWindow(XID id, ClientPtr client)
|
||||||
|
{
|
||||||
|
return SecurityLookupWindow(id, client, DixUnknownAccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
_X_EXPORT _X_DEPRECATED pointer
|
||||||
|
SecurityLookupDrawable(XID id, ClientPtr client, Mask access_mode)
|
||||||
|
{
|
||||||
|
DrawablePtr pDraw;
|
||||||
|
int i = dixLookupDrawable(&pDraw, id, client, M_DRAWABLE, access_mode);
|
||||||
|
static int warn = 1;
|
||||||
|
if (warn-- > 0)
|
||||||
|
ErrorF("Warning: LookupDrawable()/SecurityLookupDrawable() "
|
||||||
|
"are deprecated. Please convert your driver/module "
|
||||||
|
"to use dixLookupDrawable().\n");
|
||||||
|
return (i == Success) ? pDraw : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
_X_EXPORT _X_DEPRECATED pointer
|
||||||
|
LookupDrawable(XID id, ClientPtr client)
|
||||||
|
{
|
||||||
|
return SecurityLookupDrawable(id, client, DixUnknownAccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
_X_EXPORT _X_DEPRECATED ClientPtr
|
||||||
|
LookupClient(XID id, ClientPtr client)
|
||||||
|
{
|
||||||
|
ClientPtr pClient;
|
||||||
|
int i = dixLookupClient(&pClient, id, client, DixUnknownAccess);
|
||||||
|
static int warn = 1;
|
||||||
|
if (warn-- > 0)
|
||||||
|
ErrorF("Warning: LookupClient() is deprecated. Please convert your "
|
||||||
|
"driver/module to use dixLookupClient().\n");
|
||||||
|
return (i == Success) ? pClient : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* end deprecated functions */
|
||||||
|
|
||||||
int
|
int
|
||||||
AlterSaveSetForClient(ClientPtr client, WindowPtr pWin, unsigned mode,
|
AlterSaveSetForClient(ClientPtr client, WindowPtr pWin, unsigned mode,
|
||||||
|
|
175
dix/events.c
175
dix/events.c
|
@ -137,9 +137,7 @@ of the copyright holder.
|
||||||
extern Bool XkbFilterEvents(ClientPtr, int, xEvent *);
|
extern Bool XkbFilterEvents(ClientPtr, int, xEvent *);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef XACE
|
|
||||||
#include "xace.h"
|
#include "xace.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef XSERVER_DTRACE
|
#ifdef XSERVER_DTRACE
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -2230,16 +2228,15 @@ static int
|
||||||
XineramaWarpPointer(ClientPtr client)
|
XineramaWarpPointer(ClientPtr client)
|
||||||
{
|
{
|
||||||
WindowPtr dest = NULL;
|
WindowPtr dest = NULL;
|
||||||
int x, y;
|
int x, y, rc;
|
||||||
|
|
||||||
REQUEST(xWarpPointerReq);
|
REQUEST(xWarpPointerReq);
|
||||||
|
|
||||||
|
|
||||||
if (stuff->dstWid != None)
|
if (stuff->dstWid != None) {
|
||||||
{
|
rc = dixLookupWindow(&dest, stuff->dstWid, client, DixReadAccess);
|
||||||
dest = SecurityLookupWindow(stuff->dstWid, client, SecurityReadAccess);
|
if (rc != Success)
|
||||||
if (!dest)
|
return rc;
|
||||||
return BadWindow;
|
|
||||||
}
|
}
|
||||||
x = sprite.hotPhys.x;
|
x = sprite.hotPhys.x;
|
||||||
y = sprite.hotPhys.y;
|
y = sprite.hotPhys.y;
|
||||||
|
@ -2250,8 +2247,9 @@ XineramaWarpPointer(ClientPtr client)
|
||||||
XID winID = stuff->srcWid;
|
XID winID = stuff->srcWid;
|
||||||
WindowPtr source;
|
WindowPtr source;
|
||||||
|
|
||||||
source = SecurityLookupWindow(winID, client, SecurityReadAccess);
|
rc = dixLookupWindow(&source, winID, client, DixReadAccess);
|
||||||
if (!source) return BadWindow;
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
|
||||||
winX = source->drawable.x;
|
winX = source->drawable.x;
|
||||||
winY = source->drawable.y;
|
winY = source->drawable.y;
|
||||||
|
@ -2303,7 +2301,7 @@ int
|
||||||
ProcWarpPointer(ClientPtr client)
|
ProcWarpPointer(ClientPtr client)
|
||||||
{
|
{
|
||||||
WindowPtr dest = NULL;
|
WindowPtr dest = NULL;
|
||||||
int x, y;
|
int x, y, rc;
|
||||||
ScreenPtr newScreen;
|
ScreenPtr newScreen;
|
||||||
|
|
||||||
REQUEST(xWarpPointerReq);
|
REQUEST(xWarpPointerReq);
|
||||||
|
@ -2315,11 +2313,10 @@ ProcWarpPointer(ClientPtr client)
|
||||||
return XineramaWarpPointer(client);
|
return XineramaWarpPointer(client);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (stuff->dstWid != None)
|
if (stuff->dstWid != None) {
|
||||||
{
|
rc = dixLookupWindow(&dest, stuff->dstWid, client, DixReadAccess);
|
||||||
dest = SecurityLookupWindow(stuff->dstWid, client, SecurityReadAccess);
|
if (rc != Success)
|
||||||
if (!dest)
|
return rc;
|
||||||
return BadWindow;
|
|
||||||
}
|
}
|
||||||
x = sprite.hotPhys.x;
|
x = sprite.hotPhys.x;
|
||||||
y = sprite.hotPhys.y;
|
y = sprite.hotPhys.y;
|
||||||
|
@ -2330,8 +2327,9 @@ ProcWarpPointer(ClientPtr client)
|
||||||
XID winID = stuff->srcWid;
|
XID winID = stuff->srcWid;
|
||||||
WindowPtr source;
|
WindowPtr source;
|
||||||
|
|
||||||
source = SecurityLookupWindow(winID, client, SecurityReadAccess);
|
rc = dixLookupWindow(&source, winID, client, DixReadAccess);
|
||||||
if (!source) return BadWindow;
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
|
||||||
winX = source->drawable.x;
|
winX = source->drawable.x;
|
||||||
winY = source->drawable.y;
|
winY = source->drawable.y;
|
||||||
|
@ -2463,10 +2461,8 @@ CheckPassiveGrabsOnWindow(
|
||||||
(grab->confineTo->realized &&
|
(grab->confineTo->realized &&
|
||||||
BorderSizeNotEmpty(grab->confineTo))))
|
BorderSizeNotEmpty(grab->confineTo))))
|
||||||
{
|
{
|
||||||
#ifdef XACE
|
|
||||||
if (!XaceHook(XACE_DEVICE_ACCESS, wClient(pWin), device, FALSE))
|
if (!XaceHook(XACE_DEVICE_ACCESS, wClient(pWin), device, FALSE))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
#endif
|
|
||||||
#ifdef XKB
|
#ifdef XKB
|
||||||
if (!noXkbExtension) {
|
if (!noXkbExtension) {
|
||||||
XE_KBPTR.state &= 0x1f00;
|
XE_KBPTR.state &= 0x1f00;
|
||||||
|
@ -2827,9 +2823,7 @@ drawable.id:0;
|
||||||
if (deactivateGrab)
|
if (deactivateGrab)
|
||||||
(*keybd->DeactivateGrab)(keybd);
|
(*keybd->DeactivateGrab)(keybd);
|
||||||
|
|
||||||
#ifdef XACE
|
|
||||||
XaceHook(XACE_KEY_AVAIL, xE, keybd, count);
|
XaceHook(XACE_KEY_AVAIL, xE, keybd, count);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XKB
|
#ifdef XKB
|
||||||
|
@ -3253,17 +3247,13 @@ EnterLeaveEvent(
|
||||||
if ((type == EnterNotify) && (mask & KeymapStateMask))
|
if ((type == EnterNotify) && (mask & KeymapStateMask))
|
||||||
{
|
{
|
||||||
xKeymapEvent ke;
|
xKeymapEvent ke;
|
||||||
|
|
||||||
#ifdef XACE
|
|
||||||
ClientPtr client = grab ? rClient(grab)
|
ClientPtr client = grab ? rClient(grab)
|
||||||
: clients[CLIENT_ID(pWin->drawable.id)];
|
: clients[CLIENT_ID(pWin->drawable.id)];
|
||||||
if (!XaceHook(XACE_DEVICE_ACCESS, client, keybd, FALSE))
|
if (XaceHook(XACE_DEVICE_ACCESS, client, keybd, FALSE))
|
||||||
{
|
memmove((char *)&ke.map[0], (char *)&keybd->key->down[1], 31);
|
||||||
bzero((char *)&ke.map[0], 31);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
#endif
|
bzero((char *)&ke.map[0], 31);
|
||||||
memmove((char *)&ke.map[0], (char *)&keybd->key->down[1], 31);
|
|
||||||
ke.type = KeymapNotify;
|
ke.type = KeymapNotify;
|
||||||
if (grab)
|
if (grab)
|
||||||
(void)TryClientEvents(rClient(grab), (xEvent *)&ke, 1, mask,
|
(void)TryClientEvents(rClient(grab), (xEvent *)&ke, 1, mask,
|
||||||
|
@ -3349,15 +3339,12 @@ FocusEvent(DeviceIntPtr dev, int type, int mode, int detail, register WindowPtr
|
||||||
((pWin->eventMask | wOtherEventMasks(pWin)) & KeymapStateMask))
|
((pWin->eventMask | wOtherEventMasks(pWin)) & KeymapStateMask))
|
||||||
{
|
{
|
||||||
xKeymapEvent ke;
|
xKeymapEvent ke;
|
||||||
#ifdef XACE
|
|
||||||
ClientPtr client = clients[CLIENT_ID(pWin->drawable.id)];
|
ClientPtr client = clients[CLIENT_ID(pWin->drawable.id)];
|
||||||
if (!XaceHook(XACE_DEVICE_ACCESS, client, dev, FALSE))
|
if (XaceHook(XACE_DEVICE_ACCESS, client, dev, FALSE))
|
||||||
{
|
memmove((char *)&ke.map[0], (char *)&dev->key->down[1], 31);
|
||||||
bzero((char *)&ke.map[0], 31);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
#endif
|
bzero((char *)&ke.map[0], 31);
|
||||||
memmove((char *)&ke.map[0], (char *)&dev->key->down[1], 31);
|
|
||||||
ke.type = KeymapNotify;
|
ke.type = KeymapNotify;
|
||||||
(void)DeliverEventsToWindow(pWin, (xEvent *)&ke, 1,
|
(void)DeliverEventsToWindow(pWin, (xEvent *)&ke, 1,
|
||||||
KeymapStateMask, NullGrab, 0);
|
KeymapStateMask, NullGrab, 0);
|
||||||
|
@ -3545,8 +3532,8 @@ SetInputFocus(
|
||||||
Bool followOK)
|
Bool followOK)
|
||||||
{
|
{
|
||||||
register FocusClassPtr focus;
|
register FocusClassPtr focus;
|
||||||
register WindowPtr focusWin;
|
WindowPtr focusWin;
|
||||||
int mode;
|
int mode, rc;
|
||||||
TimeStamp time;
|
TimeStamp time;
|
||||||
|
|
||||||
UpdateCurrentTime();
|
UpdateCurrentTime();
|
||||||
|
@ -3563,14 +3550,12 @@ SetInputFocus(
|
||||||
focusWin = (WindowPtr)(long)focusID;
|
focusWin = (WindowPtr)(long)focusID;
|
||||||
else if ((focusID == FollowKeyboard) && followOK)
|
else if ((focusID == FollowKeyboard) && followOK)
|
||||||
focusWin = inputInfo.keyboard->focus->win;
|
focusWin = inputInfo.keyboard->focus->win;
|
||||||
else if (!(focusWin = SecurityLookupWindow(focusID, client,
|
else {
|
||||||
SecurityReadAccess)))
|
rc = dixLookupWindow(&focusWin, focusID, client, DixReadAccess);
|
||||||
return BadWindow;
|
if (rc != Success)
|
||||||
else
|
return rc;
|
||||||
{
|
|
||||||
/* It is a match error to try to set the input focus to an
|
/* It is a match error to try to set the input focus to an
|
||||||
unviewable window. */
|
unviewable window. */
|
||||||
|
|
||||||
if(!focusWin->realized)
|
if(!focusWin->realized)
|
||||||
return(BadMatch);
|
return(BadMatch);
|
||||||
}
|
}
|
||||||
|
@ -3620,10 +3605,10 @@ ProcSetInputFocus(client)
|
||||||
REQUEST(xSetInputFocusReq);
|
REQUEST(xSetInputFocusReq);
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xSetInputFocusReq);
|
REQUEST_SIZE_MATCH(xSetInputFocusReq);
|
||||||
#ifdef XACE
|
|
||||||
if (!XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
|
if (!XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
|
||||||
return Success;
|
return Success;
|
||||||
#endif
|
|
||||||
return SetInputFocus(client, inputInfo.keyboard, stuff->focus,
|
return SetInputFocus(client, inputInfo.keyboard, stuff->focus,
|
||||||
stuff->revertTo, stuff->time, FALSE);
|
stuff->revertTo, stuff->time, FALSE);
|
||||||
}
|
}
|
||||||
|
@ -3659,6 +3644,7 @@ ProcGrabPointer(ClientPtr client)
|
||||||
CursorPtr cursor, oldCursor;
|
CursorPtr cursor, oldCursor;
|
||||||
REQUEST(xGrabPointerReq);
|
REQUEST(xGrabPointerReq);
|
||||||
TimeStamp time;
|
TimeStamp time;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xGrabPointerReq);
|
REQUEST_SIZE_MATCH(xGrabPointerReq);
|
||||||
UpdateCurrentTime();
|
UpdateCurrentTime();
|
||||||
|
@ -3684,24 +3670,24 @@ ProcGrabPointer(ClientPtr client)
|
||||||
client->errorValue = stuff->eventMask;
|
client->errorValue = stuff->eventMask;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess);
|
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
if (stuff->confineTo == None)
|
if (stuff->confineTo == None)
|
||||||
confineTo = NullWindow;
|
confineTo = NullWindow;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
confineTo = SecurityLookupWindow(stuff->confineTo, client,
|
rc = dixLookupWindow(&confineTo, stuff->confineTo, client,
|
||||||
SecurityReadAccess);
|
DixReadAccess);
|
||||||
if (!confineTo)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
}
|
}
|
||||||
if (stuff->cursor == None)
|
if (stuff->cursor == None)
|
||||||
cursor = NullCursor;
|
cursor = NullCursor;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
|
cursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
|
||||||
RT_CURSOR, SecurityReadAccess);
|
RT_CURSOR, DixReadAccess);
|
||||||
if (!cursor)
|
if (!cursor)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->cursor;
|
client->errorValue = stuff->cursor;
|
||||||
|
@ -3775,7 +3761,7 @@ ProcChangeActivePointerGrab(ClientPtr client)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
newCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
|
newCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
|
||||||
RT_CURSOR, SecurityReadAccess);
|
RT_CURSOR, DixReadAccess);
|
||||||
if (!newCursor)
|
if (!newCursor)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->cursor;
|
client->errorValue = stuff->cursor;
|
||||||
|
@ -3825,9 +3811,10 @@ GrabDevice(register ClientPtr client, register DeviceIntPtr dev,
|
||||||
unsigned this_mode, unsigned other_mode, Window grabWindow,
|
unsigned this_mode, unsigned other_mode, Window grabWindow,
|
||||||
unsigned ownerEvents, Time ctime, Mask mask, CARD8 *status)
|
unsigned ownerEvents, Time ctime, Mask mask, CARD8 *status)
|
||||||
{
|
{
|
||||||
register WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
register GrabPtr grab;
|
register GrabPtr grab;
|
||||||
TimeStamp time;
|
TimeStamp time;
|
||||||
|
int rc;
|
||||||
|
|
||||||
UpdateCurrentTime();
|
UpdateCurrentTime();
|
||||||
if ((this_mode != GrabModeSync) && (this_mode != GrabModeAsync))
|
if ((this_mode != GrabModeSync) && (this_mode != GrabModeAsync))
|
||||||
|
@ -3845,9 +3832,9 @@ GrabDevice(register ClientPtr client, register DeviceIntPtr dev,
|
||||||
client->errorValue = ownerEvents;
|
client->errorValue = ownerEvents;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
pWin = SecurityLookupWindow(grabWindow, client, SecurityReadAccess);
|
rc = dixLookupWindow(&pWin, grabWindow, client, DixReadAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
time = ClientTimeToServerTime(ctime);
|
time = ClientTimeToServerTime(ctime);
|
||||||
grab = dev->grab;
|
grab = dev->grab;
|
||||||
if (grab && !SameClient(grab, client))
|
if (grab && !SameClient(grab, client))
|
||||||
|
@ -3885,18 +3872,17 @@ ProcGrabKeyboard(ClientPtr client)
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xGrabKeyboardReq);
|
REQUEST_SIZE_MATCH(xGrabKeyboardReq);
|
||||||
#ifdef XACE
|
|
||||||
if (!XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
|
if (XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
|
||||||
{
|
result = GrabDevice(client, inputInfo.keyboard, stuff->keyboardMode,
|
||||||
|
stuff->pointerMode, stuff->grabWindow,
|
||||||
|
stuff->ownerEvents, stuff->time,
|
||||||
|
KeyPressMask | KeyReleaseMask, &rep.status);
|
||||||
|
else {
|
||||||
result = Success;
|
result = Success;
|
||||||
rep.status = AlreadyGrabbed;
|
rep.status = AlreadyGrabbed;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
#endif
|
|
||||||
result = GrabDevice(client, inputInfo.keyboard, stuff->keyboardMode,
|
|
||||||
stuff->pointerMode, stuff->grabWindow,
|
|
||||||
stuff->ownerEvents, stuff->time,
|
|
||||||
KeyPressMask | KeyReleaseMask, &rep.status);
|
|
||||||
if (result != Success)
|
if (result != Success)
|
||||||
return result;
|
return result;
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
|
@ -3932,11 +3918,12 @@ ProcQueryPointer(ClientPtr client)
|
||||||
WindowPtr pWin, t;
|
WindowPtr pWin, t;
|
||||||
REQUEST(xResourceReq);
|
REQUEST(xResourceReq);
|
||||||
DeviceIntPtr mouse = inputInfo.pointer;
|
DeviceIntPtr mouse = inputInfo.pointer;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xResourceReq);
|
REQUEST_SIZE_MATCH(xResourceReq);
|
||||||
pWin = SecurityLookupWindow(stuff->id, client, SecurityReadAccess);
|
rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
if (mouse->valuator->motionHintWindow)
|
if (mouse->valuator->motionHintWindow)
|
||||||
MaybeStopHint(mouse, client);
|
MaybeStopHint(mouse, client);
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
|
@ -4100,8 +4087,8 @@ ProcSendEvent(ClientPtr client)
|
||||||
effectiveFocus = pWin = inputFocus;
|
effectiveFocus = pWin = inputFocus;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
pWin = SecurityLookupWindow(stuff->destination, client,
|
dixLookupWindow(&pWin, stuff->destination, client, DixReadAccess);
|
||||||
SecurityReadAccess);
|
|
||||||
if (!pWin)
|
if (!pWin)
|
||||||
return BadWindow;
|
return BadWindow;
|
||||||
if ((stuff->propagate != xFalse) && (stuff->propagate != xTrue))
|
if ((stuff->propagate != xFalse) && (stuff->propagate != xTrue))
|
||||||
|
@ -4137,11 +4124,12 @@ ProcUngrabKey(ClientPtr client)
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
GrabRec tempGrab;
|
GrabRec tempGrab;
|
||||||
DeviceIntPtr keybd = inputInfo.keyboard;
|
DeviceIntPtr keybd = inputInfo.keyboard;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xUngrabKeyReq);
|
REQUEST_SIZE_MATCH(xUngrabKeyReq);
|
||||||
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess);
|
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
|
|
||||||
if (((stuff->key > keybd->key->curKeySyms.maxKeyCode) ||
|
if (((stuff->key > keybd->key->curKeySyms.maxKeyCode) ||
|
||||||
(stuff->key < keybd->key->curKeySyms.minKeyCode))
|
(stuff->key < keybd->key->curKeySyms.minKeyCode))
|
||||||
|
@ -4178,6 +4166,7 @@ ProcGrabKey(ClientPtr client)
|
||||||
REQUEST(xGrabKeyReq);
|
REQUEST(xGrabKeyReq);
|
||||||
GrabPtr grab;
|
GrabPtr grab;
|
||||||
DeviceIntPtr keybd = inputInfo.keyboard;
|
DeviceIntPtr keybd = inputInfo.keyboard;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xGrabKeyReq);
|
REQUEST_SIZE_MATCH(xGrabKeyReq);
|
||||||
if ((stuff->ownerEvents != xTrue) && (stuff->ownerEvents != xFalse))
|
if ((stuff->ownerEvents != xTrue) && (stuff->ownerEvents != xFalse))
|
||||||
|
@ -4210,9 +4199,9 @@ ProcGrabKey(ClientPtr client)
|
||||||
client->errorValue = stuff->modifiers;
|
client->errorValue = stuff->modifiers;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess);
|
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
|
|
||||||
grab = CreateGrab(client->index, keybd, pWin,
|
grab = CreateGrab(client->index, keybd, pWin,
|
||||||
(Mask)(KeyPressMask | KeyReleaseMask), (Bool)stuff->ownerEvents,
|
(Mask)(KeyPressMask | KeyReleaseMask), (Bool)stuff->ownerEvents,
|
||||||
|
@ -4232,6 +4221,7 @@ ProcGrabButton(ClientPtr client)
|
||||||
REQUEST(xGrabButtonReq);
|
REQUEST(xGrabButtonReq);
|
||||||
CursorPtr cursor;
|
CursorPtr cursor;
|
||||||
GrabPtr grab;
|
GrabPtr grab;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xGrabButtonReq);
|
REQUEST_SIZE_MATCH(xGrabButtonReq);
|
||||||
if ((stuff->pointerMode != GrabModeSync) &&
|
if ((stuff->pointerMode != GrabModeSync) &&
|
||||||
|
@ -4262,23 +4252,23 @@ ProcGrabButton(ClientPtr client)
|
||||||
client->errorValue = stuff->eventMask;
|
client->errorValue = stuff->eventMask;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess);
|
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
if (stuff->confineTo == None)
|
if (stuff->confineTo == None)
|
||||||
confineTo = NullWindow;
|
confineTo = NullWindow;
|
||||||
else {
|
else {
|
||||||
confineTo = SecurityLookupWindow(stuff->confineTo, client,
|
rc = dixLookupWindow(&confineTo, stuff->confineTo, client,
|
||||||
SecurityReadAccess);
|
DixReadAccess);
|
||||||
if (!confineTo)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
}
|
}
|
||||||
if (stuff->cursor == None)
|
if (stuff->cursor == None)
|
||||||
cursor = NullCursor;
|
cursor = NullCursor;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
|
cursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
|
||||||
RT_CURSOR, SecurityReadAccess);
|
RT_CURSOR, DixReadAccess);
|
||||||
if (!cursor)
|
if (!cursor)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->cursor;
|
client->errorValue = stuff->cursor;
|
||||||
|
@ -4303,6 +4293,7 @@ ProcUngrabButton(ClientPtr client)
|
||||||
REQUEST(xUngrabButtonReq);
|
REQUEST(xUngrabButtonReq);
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
GrabRec tempGrab;
|
GrabRec tempGrab;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xUngrabButtonReq);
|
REQUEST_SIZE_MATCH(xUngrabButtonReq);
|
||||||
if ((stuff->modifiers != AnyModifier) &&
|
if ((stuff->modifiers != AnyModifier) &&
|
||||||
|
@ -4311,9 +4302,9 @@ ProcUngrabButton(ClientPtr client)
|
||||||
client->errorValue = stuff->modifiers;
|
client->errorValue = stuff->modifiers;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess);
|
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
tempGrab.resource = client->clientAsMask;
|
tempGrab.resource = client->clientAsMask;
|
||||||
tempGrab.device = inputInfo.pointer;
|
tempGrab.device = inputInfo.pointer;
|
||||||
tempGrab.window = pWin;
|
tempGrab.window = pWin;
|
||||||
|
@ -4465,7 +4456,7 @@ ProcRecolorCursor(ClientPtr client)
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xRecolorCursorReq);
|
REQUEST_SIZE_MATCH(xRecolorCursorReq);
|
||||||
pCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
|
pCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
|
||||||
RT_CURSOR, SecurityWriteAccess);
|
RT_CURSOR, DixWriteAccess);
|
||||||
if ( !pCursor)
|
if ( !pCursor)
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->cursor;
|
client->errorValue = stuff->cursor;
|
||||||
|
|
|
@ -59,9 +59,7 @@ SOFTWARE.
|
||||||
#include "gcstruct.h"
|
#include "gcstruct.h"
|
||||||
#include "scrnintstr.h"
|
#include "scrnintstr.h"
|
||||||
#include "dispatch.h"
|
#include "dispatch.h"
|
||||||
#ifdef XACE
|
|
||||||
#include "xace.h"
|
#include "xace.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#define EXTENSION_BASE 128
|
#define EXTENSION_BASE 128
|
||||||
#define EXTENSION_EVENT_BASE 64
|
#define EXTENSION_EVENT_BASE 64
|
||||||
|
@ -256,11 +254,9 @@ GetExtensionEntry(int major)
|
||||||
_X_EXPORT void
|
_X_EXPORT void
|
||||||
DeclareExtensionSecurity(char *extname, Bool secure)
|
DeclareExtensionSecurity(char *extname, Bool secure)
|
||||||
{
|
{
|
||||||
#ifdef XACE
|
|
||||||
int i = FindExtension(extname, strlen(extname));
|
int i = FindExtension(extname, strlen(extname));
|
||||||
if (i >= 0)
|
if (i >= 0)
|
||||||
XaceHook(XACE_DECLARE_EXT_SECURE, extensions[i], secure);
|
XaceHook(XACE_DECLARE_EXT_SECURE, extensions[i], secure);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_X_EXPORT unsigned short
|
_X_EXPORT unsigned short
|
||||||
|
@ -336,12 +332,7 @@ ProcQueryExtension(ClientPtr client)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
i = FindExtension((char *)&stuff[1], stuff->nbytes);
|
i = FindExtension((char *)&stuff[1], stuff->nbytes);
|
||||||
if (i < 0
|
if (i < 0 || !XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
|
||||||
#ifdef XACE
|
|
||||||
/* call callbacks to find out whether to show extension */
|
|
||||||
|| !XaceHook(XACE_EXT_ACCESS, client, extensions[i])
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
reply.present = xFalse;
|
reply.present = xFalse;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -376,11 +367,10 @@ ProcListExtensions(ClientPtr client)
|
||||||
|
|
||||||
for (i=0; i<NumExtensions; i++)
|
for (i=0; i<NumExtensions; i++)
|
||||||
{
|
{
|
||||||
#ifdef XACE
|
|
||||||
/* call callbacks to find out whether to show extension */
|
/* call callbacks to find out whether to show extension */
|
||||||
if (!XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
|
if (!XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
|
||||||
continue;
|
continue;
|
||||||
#endif
|
|
||||||
total_length += strlen(extensions[i]->name) + 1;
|
total_length += strlen(extensions[i]->name) + 1;
|
||||||
reply.nExtensions += 1 + extensions[i]->num_aliases;
|
reply.nExtensions += 1 + extensions[i]->num_aliases;
|
||||||
for (j = extensions[i]->num_aliases; --j >= 0;)
|
for (j = extensions[i]->num_aliases; --j >= 0;)
|
||||||
|
@ -393,10 +383,9 @@ ProcListExtensions(ClientPtr client)
|
||||||
for (i=0; i<NumExtensions; i++)
|
for (i=0; i<NumExtensions; i++)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
#ifdef XACE
|
|
||||||
if (!XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
|
if (!XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
|
||||||
continue;
|
continue;
|
||||||
#endif
|
|
||||||
*bufptr++ = len = strlen(extensions[i]->name);
|
*bufptr++ = len = strlen(extensions[i]->name);
|
||||||
memmove(bufptr, extensions[i]->name, len);
|
memmove(bufptr, extensions[i]->name, len);
|
||||||
bufptr += len;
|
bufptr += len;
|
||||||
|
|
8
dix/gc.c
8
dix/gc.c
|
@ -271,7 +271,7 @@ dixChangeGC(ClientPtr client, register GC *pGC, register BITS32 mask, CARD32 *pC
|
||||||
{
|
{
|
||||||
NEXTVAL(XID, newpix);
|
NEXTVAL(XID, newpix);
|
||||||
pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
|
pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
|
||||||
newpix, RT_PIXMAP, SecurityReadAccess);
|
newpix, RT_PIXMAP, DixReadAccess);
|
||||||
}
|
}
|
||||||
if (pPixmap)
|
if (pPixmap)
|
||||||
{
|
{
|
||||||
|
@ -307,7 +307,7 @@ dixChangeGC(ClientPtr client, register GC *pGC, register BITS32 mask, CARD32 *pC
|
||||||
{
|
{
|
||||||
NEXTVAL(XID, newstipple)
|
NEXTVAL(XID, newstipple)
|
||||||
pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
|
pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
|
||||||
newstipple, RT_PIXMAP, SecurityReadAccess);
|
newstipple, RT_PIXMAP, DixReadAccess);
|
||||||
}
|
}
|
||||||
if (pPixmap)
|
if (pPixmap)
|
||||||
{
|
{
|
||||||
|
@ -349,7 +349,7 @@ dixChangeGC(ClientPtr client, register GC *pGC, register BITS32 mask, CARD32 *pC
|
||||||
{
|
{
|
||||||
NEXTVAL(XID, newfont)
|
NEXTVAL(XID, newfont)
|
||||||
pFont = (FontPtr)SecurityLookupIDByType(client, newfont,
|
pFont = (FontPtr)SecurityLookupIDByType(client, newfont,
|
||||||
RT_FONT, SecurityReadAccess);
|
RT_FONT, DixReadAccess);
|
||||||
}
|
}
|
||||||
if (pFont)
|
if (pFont)
|
||||||
{
|
{
|
||||||
|
@ -416,7 +416,7 @@ dixChangeGC(ClientPtr client, register GC *pGC, register BITS32 mask, CARD32 *pC
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
|
pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
|
||||||
pid, RT_PIXMAP, SecurityReadAccess);
|
pid, RT_PIXMAP, DixReadAccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pPixmap)
|
if (pPixmap)
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include "cursorstr.h"
|
#include "cursorstr.h"
|
||||||
#include "dixstruct.h"
|
#include "dixstruct.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
#include "dixevents.h"
|
||||||
#include "mipointer.h"
|
#include "mipointer.h"
|
||||||
|
|
||||||
#ifdef XKB
|
#ifdef XKB
|
||||||
|
@ -47,10 +48,6 @@
|
||||||
extern Bool XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies);
|
extern Bool XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef XACE
|
|
||||||
#include "xace.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef PANORAMIX
|
#ifdef PANORAMIX
|
||||||
#include "panoramiX.h"
|
#include "panoramiX.h"
|
||||||
#include "panoramiXsrv.h"
|
#include "panoramiXsrv.h"
|
||||||
|
@ -487,6 +484,8 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
|
||||||
int num_events = 0, final_valuator = 0;
|
int num_events = 0, final_valuator = 0;
|
||||||
CARD32 ms = 0;
|
CARD32 ms = 0;
|
||||||
deviceKeyButtonPointer *kbp = NULL;
|
deviceKeyButtonPointer *kbp = NULL;
|
||||||
|
/* Thanks to a broken lib, we _always_ have to chase DeviceMotionNotifies
|
||||||
|
* with DeviceValuators. */
|
||||||
Bool sendValuators = (type == MotionNotify || flags & POINTER_ABSOLUTE);
|
Bool sendValuators = (type == MotionNotify || flags & POINTER_ABSOLUTE);
|
||||||
DeviceIntPtr pointer = NULL;
|
DeviceIntPtr pointer = NULL;
|
||||||
int x = 0, y = 0;
|
int x = 0, y = 0;
|
||||||
|
@ -503,15 +502,16 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
|
||||||
else
|
else
|
||||||
num_events = 1;
|
num_events = 1;
|
||||||
|
|
||||||
|
if (type == MotionNotify && num_valuators <= 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Do we need to send a DeviceValuator event? */
|
/* Do we need to send a DeviceValuator event? */
|
||||||
if ((num_valuators + first_valuator) > 2 && sendValuators) {
|
if (sendValuators) {
|
||||||
if ((((num_valuators - 1) / 6) + 1) > MAX_VALUATOR_EVENTS)
|
if ((((num_valuators - 1) / 6) + 1) > MAX_VALUATOR_EVENTS)
|
||||||
num_valuators = MAX_VALUATOR_EVENTS * 6;
|
num_valuators = MAX_VALUATOR_EVENTS * 6;
|
||||||
num_events += ((num_valuators - 1) / 6) + 1;
|
num_events += ((num_valuators - 1) / 6) + 1;
|
||||||
}
|
}
|
||||||
else if (type == MotionNotify && num_valuators <= 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
final_valuator = num_valuators + first_valuator;
|
final_valuator = num_valuators + first_valuator;
|
||||||
|
|
||||||
|
@ -604,7 +604,7 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
|
||||||
kbp->root_y = y;
|
kbp->root_y = y;
|
||||||
|
|
||||||
events++;
|
events++;
|
||||||
if (final_valuator > 2 && sendValuators) {
|
if (sendValuators) {
|
||||||
kbp->deviceid |= MORE_EVENTS;
|
kbp->deviceid |= MORE_EVENTS;
|
||||||
clipValuators(pDev, first_valuator, num_valuators, valuators);
|
clipValuators(pDev, first_valuator, num_valuators, valuators);
|
||||||
events = getValuatorEvents(events, pDev, first_valuator,
|
events = getValuatorEvents(events, pDev, first_valuator,
|
||||||
|
@ -748,7 +748,7 @@ SwitchCorePointer(DeviceIntPtr pDev)
|
||||||
* to shift the pointer to get it inside the new bounds.
|
* to shift the pointer to get it inside the new bounds.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
PostSyntheticMotion(int x, int y, int screenNum, unsigned long time)
|
PostSyntheticMotion(int x, int y, ScreenPtr pScreen, unsigned long time)
|
||||||
{
|
{
|
||||||
xEvent xE;
|
xEvent xE;
|
||||||
|
|
||||||
|
@ -757,8 +757,8 @@ PostSyntheticMotion(int x, int y, int screenNum, unsigned long time)
|
||||||
will translate from sprite screen to screen 0 upon reentry
|
will translate from sprite screen to screen 0 upon reentry
|
||||||
to the DIX layer. */
|
to the DIX layer. */
|
||||||
if (!noPanoramiXExtension) {
|
if (!noPanoramiXExtension) {
|
||||||
x += panoramiXdataPtr[0].x - panoramiXdataPtr[screenNum].x;
|
x += panoramiXdataPtr[0].x - panoramiXdataPtr[pScreen->myNum].x;
|
||||||
y += panoramiXdataPtr[0].y - panoramiXdataPtr[screenNum].y;
|
y += panoramiXdataPtr[0].y - panoramiXdataPtr[pScreen->myNum].y;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -766,6 +766,7 @@ PostSyntheticMotion(int x, int y, int screenNum, unsigned long time)
|
||||||
xE.u.u.type = MotionNotify;
|
xE.u.u.type = MotionNotify;
|
||||||
xE.u.keyButtonPointer.rootX = x;
|
xE.u.keyButtonPointer.rootX = x;
|
||||||
xE.u.keyButtonPointer.rootY = y;
|
xE.u.keyButtonPointer.rootY = y;
|
||||||
|
xE.u.keyButtonPointer.time = time;
|
||||||
|
|
||||||
(*inputInfo.pointer->public.processInputProc)(&xE, inputInfo.pointer, 1);
|
(*inputInfo.pointer->public.processInputProc)(&xE, inputInfo.pointer, 1);
|
||||||
}
|
}
|
||||||
|
|
21
dix/main.c
21
dix/main.c
|
@ -98,7 +98,7 @@ Equipment Corporation.
|
||||||
#include <X11/fonts/font.h>
|
#include <X11/fonts/font.h>
|
||||||
#include "opaque.h"
|
#include "opaque.h"
|
||||||
#include "servermd.h"
|
#include "servermd.h"
|
||||||
#include "config.h"
|
#include "hotplug.h"
|
||||||
#include "site.h"
|
#include "site.h"
|
||||||
#include "dixfont.h"
|
#include "dixfont.h"
|
||||||
#include "extnsionst.h"
|
#include "extnsionst.h"
|
||||||
|
@ -309,9 +309,9 @@ main(int argc, char *argv[], char *envp[])
|
||||||
DPMSPowerLevel = 0;
|
DPMSPowerLevel = 0;
|
||||||
#endif
|
#endif
|
||||||
InitBlockAndWakeupHandlers();
|
InitBlockAndWakeupHandlers();
|
||||||
configInitialise();
|
|
||||||
/* Perform any operating system dependent initializations you'd like */
|
/* Perform any operating system dependent initializations you'd like */
|
||||||
OsInit();
|
OsInit();
|
||||||
|
configInitialise();
|
||||||
if(serverGeneration == 1)
|
if(serverGeneration == 1)
|
||||||
{
|
{
|
||||||
CreateWellKnownSockets();
|
CreateWellKnownSockets();
|
||||||
|
@ -414,21 +414,24 @@ main(int argc, char *argv[], char *envp[])
|
||||||
ErrorF("failed to set default font path '%s'",
|
ErrorF("failed to set default font path '%s'",
|
||||||
defaultFontPath);
|
defaultFontPath);
|
||||||
}
|
}
|
||||||
if (!SetDefaultFont(defaultTextFont))
|
if (!SetDefaultFont(defaultTextFont)) {
|
||||||
FatalError("could not open default font '%s'", defaultTextFont);
|
FatalError("could not open default font '%s'", defaultTextFont);
|
||||||
|
}
|
||||||
#ifdef NULL_ROOT_CURSOR
|
#ifdef NULL_ROOT_CURSOR
|
||||||
cm.width = 0;
|
cm.width = 0;
|
||||||
cm.height = 0;
|
cm.height = 0;
|
||||||
cm.xhot = 0;
|
cm.xhot = 0;
|
||||||
cm.yhot = 0;
|
cm.yhot = 0;
|
||||||
|
|
||||||
if (!(rootCursor = AllocCursor(NULL, NULL, &cm, 0, 0, 0, 0, 0, 0)))
|
if (!(rootCursor = AllocCursor(NULL, NULL, &cm, 0, 0, 0, 0, 0, 0))) {
|
||||||
FatalError("could not create empty root cursor");
|
FatalError("could not create empty root cursor");
|
||||||
|
}
|
||||||
AddResource(FakeClientID(0), RT_CURSOR, (pointer)rootCursor);
|
AddResource(FakeClientID(0), RT_CURSOR, (pointer)rootCursor);
|
||||||
#else
|
#else
|
||||||
if (!(rootCursor = CreateRootCursor(defaultCursorFont, 0)))
|
if (!(rootCursor = CreateRootCursor(defaultCursorFont, 0))) {
|
||||||
FatalError("could not open default cursor font '%s'",
|
FatalError("could not open default cursor font '%s'",
|
||||||
defaultCursorFont);
|
defaultCursorFont);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef DPMSExtension
|
#ifdef DPMSExtension
|
||||||
/* check all screens, looking for DPMS Capabilities */
|
/* check all screens, looking for DPMS Capabilities */
|
||||||
|
@ -452,13 +455,15 @@ main(int argc, char *argv[], char *envp[])
|
||||||
|
|
||||||
#ifdef PANORAMIX
|
#ifdef PANORAMIX
|
||||||
if (!noPanoramiXExtension) {
|
if (!noPanoramiXExtension) {
|
||||||
if (!PanoramiXCreateConnectionBlock())
|
if (!PanoramiXCreateConnectionBlock()) {
|
||||||
FatalError("could not create connection block info");
|
FatalError("could not create connection block info");
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (!CreateConnectionBlock())
|
if (!CreateConnectionBlock()) {
|
||||||
FatalError("could not create connection block info");
|
FatalError("could not create connection block info");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Dispatch();
|
Dispatch();
|
||||||
|
|
122
dix/property.c
122
dix/property.c
|
@ -58,9 +58,7 @@ SOFTWARE.
|
||||||
#include "dixstruct.h"
|
#include "dixstruct.h"
|
||||||
#include "dispatch.h"
|
#include "dispatch.h"
|
||||||
#include "swaprep.h"
|
#include "swaprep.h"
|
||||||
#ifdef XACE
|
|
||||||
#include "xace.h"
|
#include "xace.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
* Property Stuff
|
* Property Stuff
|
||||||
|
@ -96,7 +94,7 @@ PrintPropertys(WindowPtr pWin)
|
||||||
int
|
int
|
||||||
ProcRotateProperties(ClientPtr client)
|
ProcRotateProperties(ClientPtr client)
|
||||||
{
|
{
|
||||||
int i, j, delta;
|
int i, j, delta, rc;
|
||||||
REQUEST(xRotatePropertiesReq);
|
REQUEST(xRotatePropertiesReq);
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
register Atom * atoms;
|
register Atom * atoms;
|
||||||
|
@ -106,10 +104,9 @@ ProcRotateProperties(ClientPtr client)
|
||||||
|
|
||||||
REQUEST_FIXED_SIZE(xRotatePropertiesReq, stuff->nAtoms << 2);
|
REQUEST_FIXED_SIZE(xRotatePropertiesReq, stuff->nAtoms << 2);
|
||||||
UpdateCurrentTime();
|
UpdateCurrentTime();
|
||||||
pWin = (WindowPtr) SecurityLookupWindow(stuff->window, client,
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||||
SecurityWriteAccess);
|
if (rc != Success)
|
||||||
if (!pWin)
|
return rc;
|
||||||
return(BadWindow);
|
|
||||||
if (!stuff->nAtoms)
|
if (!stuff->nAtoms)
|
||||||
return(Success);
|
return(Success);
|
||||||
atoms = (Atom *) & stuff[1];
|
atoms = (Atom *) & stuff[1];
|
||||||
|
@ -118,27 +115,19 @@ ProcRotateProperties(ClientPtr client)
|
||||||
return(BadAlloc);
|
return(BadAlloc);
|
||||||
for (i = 0; i < stuff->nAtoms; i++)
|
for (i = 0; i < stuff->nAtoms; i++)
|
||||||
{
|
{
|
||||||
#ifdef XACE
|
|
||||||
char action = XaceHook(XACE_PROPERTY_ACCESS, client, pWin, atoms[i],
|
char action = XaceHook(XACE_PROPERTY_ACCESS, client, pWin, atoms[i],
|
||||||
SecurityReadAccess|SecurityWriteAccess);
|
DixReadAccess|DixWriteAccess);
|
||||||
#endif
|
|
||||||
if (!ValidAtom(atoms[i])
|
if (!ValidAtom(atoms[i]) || (XaceErrorOperation == action)) {
|
||||||
#ifdef XACE
|
|
||||||
|| (SecurityErrorOperation == action)
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
{
|
|
||||||
DEALLOCATE_LOCAL(props);
|
DEALLOCATE_LOCAL(props);
|
||||||
client->errorValue = atoms[i];
|
client->errorValue = atoms[i];
|
||||||
return BadAtom;
|
return BadAtom;
|
||||||
}
|
}
|
||||||
#ifdef XACE
|
if (XaceIgnoreOperation == action) {
|
||||||
if (SecurityIgnoreOperation == action)
|
|
||||||
{
|
|
||||||
DEALLOCATE_LOCAL(props);
|
DEALLOCATE_LOCAL(props);
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
for (j = i + 1; j < stuff->nAtoms; j++)
|
for (j = i + 1; j < stuff->nAtoms; j++)
|
||||||
if (atoms[j] == atoms[i])
|
if (atoms[j] == atoms[i])
|
||||||
{
|
{
|
||||||
|
@ -191,9 +180,7 @@ ProcChangeProperty(ClientPtr client)
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
char format, mode;
|
char format, mode;
|
||||||
unsigned long len;
|
unsigned long len;
|
||||||
int sizeInBytes;
|
int sizeInBytes, totalSize, err;
|
||||||
int totalSize;
|
|
||||||
int err;
|
|
||||||
REQUEST(xChangePropertyReq);
|
REQUEST(xChangePropertyReq);
|
||||||
|
|
||||||
REQUEST_AT_LEAST_SIZE(xChangePropertyReq);
|
REQUEST_AT_LEAST_SIZE(xChangePropertyReq);
|
||||||
|
@ -218,10 +205,9 @@ ProcChangeProperty(ClientPtr client)
|
||||||
totalSize = len * sizeInBytes;
|
totalSize = len * sizeInBytes;
|
||||||
REQUEST_FIXED_SIZE(xChangePropertyReq, totalSize);
|
REQUEST_FIXED_SIZE(xChangePropertyReq, totalSize);
|
||||||
|
|
||||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
err = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||||
SecurityWriteAccess);
|
if (err != Success)
|
||||||
if (!pWin)
|
return err;
|
||||||
return(BadWindow);
|
|
||||||
if (!ValidAtom(stuff->property))
|
if (!ValidAtom(stuff->property))
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->property;
|
client->errorValue = stuff->property;
|
||||||
|
@ -233,17 +219,15 @@ ProcChangeProperty(ClientPtr client)
|
||||||
return(BadAtom);
|
return(BadAtom);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XACE
|
|
||||||
switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
|
switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
|
||||||
SecurityWriteAccess))
|
DixWriteAccess))
|
||||||
{
|
{
|
||||||
case SecurityErrorOperation:
|
case XaceErrorOperation:
|
||||||
client->errorValue = stuff->property;
|
client->errorValue = stuff->property;
|
||||||
return BadAtom;
|
return BadAtom;
|
||||||
case SecurityIgnoreOperation:
|
case XaceIgnoreOperation:
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
err = ChangeWindowProperty(pWin, stuff->property, stuff->type, (int)format,
|
err = ChangeWindowProperty(pWin, stuff->property, stuff->type, (int)format,
|
||||||
(int)mode, len, (pointer)&stuff[1], TRUE);
|
(int)mode, len, (pointer)&stuff[1], TRUE);
|
||||||
|
@ -457,18 +441,18 @@ int
|
||||||
ProcGetProperty(ClientPtr client)
|
ProcGetProperty(ClientPtr client)
|
||||||
{
|
{
|
||||||
PropertyPtr pProp, prevProp;
|
PropertyPtr pProp, prevProp;
|
||||||
unsigned long n, len, ind;
|
unsigned long n, len, ind, rc;
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
xGetPropertyReply reply;
|
xGetPropertyReply reply;
|
||||||
|
Mask access_mode = DixReadAccess;
|
||||||
REQUEST(xGetPropertyReq);
|
REQUEST(xGetPropertyReq);
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xGetPropertyReq);
|
REQUEST_SIZE_MATCH(xGetPropertyReq);
|
||||||
if (stuff->delete)
|
if (stuff->delete)
|
||||||
UpdateCurrentTime();
|
UpdateCurrentTime();
|
||||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||||
SecurityReadAccess);
|
if (rc != Success)
|
||||||
if (!pWin)
|
return rc;
|
||||||
return BadWindow;
|
|
||||||
|
|
||||||
if (!ValidAtom(stuff->property))
|
if (!ValidAtom(stuff->property))
|
||||||
{
|
{
|
||||||
|
@ -501,24 +485,18 @@ ProcGetProperty(ClientPtr client)
|
||||||
if (!pProp)
|
if (!pProp)
|
||||||
return NullPropertyReply(client, None, 0, &reply);
|
return NullPropertyReply(client, None, 0, &reply);
|
||||||
|
|
||||||
#ifdef XACE
|
if (stuff->delete)
|
||||||
|
access_mode |= DixDestroyAccess;
|
||||||
|
switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
|
||||||
|
access_mode))
|
||||||
{
|
{
|
||||||
Mask access_mode = SecurityReadAccess;
|
case XaceErrorOperation:
|
||||||
|
client->errorValue = stuff->property;
|
||||||
if (stuff->delete)
|
return BadAtom;;
|
||||||
access_mode |= SecurityDestroyAccess;
|
case XaceIgnoreOperation:
|
||||||
switch(XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
|
return NullPropertyReply(client, pProp->type, pProp->format, &reply);
|
||||||
access_mode))
|
|
||||||
{
|
|
||||||
case SecurityErrorOperation:
|
|
||||||
client->errorValue = stuff->property;
|
|
||||||
return BadAtom;;
|
|
||||||
case SecurityIgnoreOperation:
|
|
||||||
return NullPropertyReply(client, pProp->type, pProp->format,
|
|
||||||
&reply);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
/* If the request type and actual type don't match. Return the
|
/* If the request type and actual type don't match. Return the
|
||||||
property information, but not the data. */
|
property information, but not the data. */
|
||||||
|
|
||||||
|
@ -602,16 +580,15 @@ ProcListProperties(ClientPtr client)
|
||||||
{
|
{
|
||||||
Atom *pAtoms = NULL, *temppAtoms;
|
Atom *pAtoms = NULL, *temppAtoms;
|
||||||
xListPropertiesReply xlpr;
|
xListPropertiesReply xlpr;
|
||||||
int numProps = 0;
|
int rc, numProps = 0;
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
PropertyPtr pProp;
|
PropertyPtr pProp;
|
||||||
REQUEST(xResourceReq);
|
REQUEST(xResourceReq);
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xResourceReq);
|
REQUEST_SIZE_MATCH(xResourceReq);
|
||||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->id, client,
|
rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
|
||||||
SecurityReadAccess);
|
if (rc != Success)
|
||||||
if (!pWin)
|
return rc;
|
||||||
return(BadWindow);
|
|
||||||
|
|
||||||
pProp = wUserProps (pWin);
|
pProp = wUserProps (pWin);
|
||||||
while (pProp)
|
while (pProp)
|
||||||
|
@ -653,27 +630,24 @@ ProcDeleteProperty(register ClientPtr client)
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xDeletePropertyReq);
|
REQUEST_SIZE_MATCH(xDeletePropertyReq);
|
||||||
UpdateCurrentTime();
|
UpdateCurrentTime();
|
||||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
result = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||||
SecurityWriteAccess);
|
if (result != Success)
|
||||||
if (!pWin)
|
return result;
|
||||||
return(BadWindow);
|
|
||||||
if (!ValidAtom(stuff->property))
|
if (!ValidAtom(stuff->property))
|
||||||
{
|
{
|
||||||
client->errorValue = stuff->property;
|
client->errorValue = stuff->property;
|
||||||
return (BadAtom);
|
return (BadAtom);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XACE
|
switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
|
||||||
switch(XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
|
DixDestroyAccess))
|
||||||
SecurityDestroyAccess))
|
|
||||||
{
|
{
|
||||||
case SecurityErrorOperation:
|
case XaceErrorOperation:
|
||||||
client->errorValue = stuff->property;
|
client->errorValue = stuff->property;
|
||||||
return BadAtom;;
|
return BadAtom;;
|
||||||
case SecurityIgnoreOperation:
|
case XaceIgnoreOperation:
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
result = DeleteProperty(pWin, stuff->property);
|
result = DeleteProperty(pWin, stuff->property);
|
||||||
if (client->noClientException != Success)
|
if (client->noClientException != Success)
|
||||||
|
|
|
@ -148,9 +148,7 @@ Equipment Corporation.
|
||||||
#include "panoramiX.h"
|
#include "panoramiX.h"
|
||||||
#include "panoramiXsrv.h"
|
#include "panoramiXsrv.h"
|
||||||
#endif
|
#endif
|
||||||
#ifdef XACE
|
|
||||||
#include "xace.h"
|
#include "xace.h"
|
||||||
#endif
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#ifdef XSERVER_DTRACE
|
#ifdef XSERVER_DTRACE
|
||||||
|
@ -904,11 +902,10 @@ SecurityLookupIDByType(ClientPtr client, XID id, RESTYPE rtype, Mask mode)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef XACE
|
|
||||||
if (retval && client &&
|
if (retval && client &&
|
||||||
!XaceHook(XACE_RESOURCE_ACCESS, client, id, rtype, mode, retval))
|
!XaceHook(XACE_RESOURCE_ACCESS, client, id, rtype, mode, retval))
|
||||||
retval = NULL;
|
retval = NULL;
|
||||||
#endif
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -932,11 +929,10 @@ SecurityLookupIDByClass(ClientPtr client, XID id, RESTYPE classes, Mask mode)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef XACE
|
|
||||||
if (retval && client &&
|
if (retval && client &&
|
||||||
!XaceHook(XACE_RESOURCE_ACCESS, client, id, res->type, mode, retval))
|
!XaceHook(XACE_RESOURCE_ACCESS, client, id, res->type, mode, retval))
|
||||||
retval = NULL;
|
retval = NULL;
|
||||||
#endif
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -948,12 +944,12 @@ _X_EXPORT pointer
|
||||||
LookupIDByType(XID id, RESTYPE rtype)
|
LookupIDByType(XID id, RESTYPE rtype)
|
||||||
{
|
{
|
||||||
return SecurityLookupIDByType(NullClient, id, rtype,
|
return SecurityLookupIDByType(NullClient, id, rtype,
|
||||||
SecurityUnknownAccess);
|
DixUnknownAccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
_X_EXPORT pointer
|
_X_EXPORT pointer
|
||||||
LookupIDByClass(XID id, RESTYPE classes)
|
LookupIDByClass(XID id, RESTYPE classes)
|
||||||
{
|
{
|
||||||
return SecurityLookupIDByClass(NullClient, id, classes,
|
return SecurityLookupIDByClass(NullClient, id, classes,
|
||||||
SecurityUnknownAccess);
|
DixUnknownAccess);
|
||||||
}
|
}
|
||||||
|
|
52
dix/window.c
52
dix/window.c
|
@ -126,9 +126,7 @@ Equipment Corporation.
|
||||||
#ifdef XAPPGROUP
|
#ifdef XAPPGROUP
|
||||||
#include "appgroup.h"
|
#include "appgroup.h"
|
||||||
#endif
|
#endif
|
||||||
#ifdef XACE
|
|
||||||
#include "xace.h"
|
#include "xace.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
/******
|
/******
|
||||||
* Window stuff for server
|
* Window stuff for server
|
||||||
|
@ -531,9 +529,7 @@ InitRootWindow(WindowPtr pWin)
|
||||||
/* We SHOULD check for an error value here XXX */
|
/* We SHOULD check for an error value here XXX */
|
||||||
(*pScreen->ChangeWindowAttributes)(pWin, backFlag);
|
(*pScreen->ChangeWindowAttributes)(pWin, backFlag);
|
||||||
|
|
||||||
#ifdef XACE
|
|
||||||
XaceHook(XACE_WINDOW_INIT, serverClient, pWin);
|
XaceHook(XACE_WINDOW_INIT, serverClient, pWin);
|
||||||
#endif
|
|
||||||
|
|
||||||
MapWindow(pWin, serverClient);
|
MapWindow(pWin, serverClient);
|
||||||
}
|
}
|
||||||
|
@ -738,18 +734,16 @@ CreateWindow(Window wid, register WindowPtr pParent, int x, int y, unsigned w,
|
||||||
}
|
}
|
||||||
|
|
||||||
pWin->borderWidth = bw;
|
pWin->borderWidth = bw;
|
||||||
#ifdef XACE
|
|
||||||
/* can't let untrusted clients have background None windows;
|
/* can't let untrusted clients have background None windows;
|
||||||
* they make it too easy to steal window contents
|
* they make it too easy to steal window contents
|
||||||
*/
|
*/
|
||||||
if (!XaceHook(XACE_BACKGRND_ACCESS, client, pWin))
|
if (XaceHook(XACE_BACKGRND_ACCESS, client, pWin))
|
||||||
{
|
pWin->backgroundState = None;
|
||||||
|
else {
|
||||||
pWin->backgroundState = BackgroundPixel;
|
pWin->backgroundState = BackgroundPixel;
|
||||||
pWin->background.pixel = 0;
|
pWin->background.pixel = 0;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
#endif
|
|
||||||
pWin->backgroundState = None;
|
|
||||||
|
|
||||||
pWin->borderIsPixel = pParent->borderIsPixel;
|
pWin->borderIsPixel = pParent->borderIsPixel;
|
||||||
pWin->border = pParent->border;
|
pWin->border = pParent->border;
|
||||||
|
@ -769,9 +763,7 @@ CreateWindow(Window wid, register WindowPtr pParent, int x, int y, unsigned w,
|
||||||
REGION_NULL(pScreen, &pWin->winSize);
|
REGION_NULL(pScreen, &pWin->winSize);
|
||||||
REGION_NULL(pScreen, &pWin->borderSize);
|
REGION_NULL(pScreen, &pWin->borderSize);
|
||||||
|
|
||||||
#ifdef XACE
|
|
||||||
XaceHook(XACE_WINDOW_INIT, client, pWin);
|
XaceHook(XACE_WINDOW_INIT, client, pWin);
|
||||||
#endif
|
|
||||||
|
|
||||||
pHead = RealChildHead(pParent);
|
pHead = RealChildHead(pParent);
|
||||||
if (pHead)
|
if (pHead)
|
||||||
|
@ -1036,24 +1028,18 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
|
||||||
borderRelative = TRUE;
|
borderRelative = TRUE;
|
||||||
if (pixID == None)
|
if (pixID == None)
|
||||||
{
|
{
|
||||||
#ifdef XACE
|
|
||||||
/* can't let untrusted clients have background None windows */
|
/* can't let untrusted clients have background None windows */
|
||||||
if (XaceHook(XACE_BACKGRND_ACCESS, client, pWin))
|
if (XaceHook(XACE_BACKGRND_ACCESS, client, pWin)) {
|
||||||
{
|
if (pWin->backgroundState == BackgroundPixmap)
|
||||||
#endif
|
(*pScreen->DestroyPixmap)(pWin->background.pixmap);
|
||||||
if (pWin->backgroundState == BackgroundPixmap)
|
if (!pWin->parent)
|
||||||
(*pScreen->DestroyPixmap)(pWin->background.pixmap);
|
MakeRootTile(pWin);
|
||||||
if (!pWin->parent)
|
else
|
||||||
MakeRootTile(pWin);
|
pWin->backgroundState = None;
|
||||||
else
|
} else {
|
||||||
pWin->backgroundState = None;
|
/* didn't change the backgrnd to None, so don't tell ddx */
|
||||||
#ifdef XACE
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ /* didn't change the background to None, so don't tell ddx */
|
|
||||||
index2 = 0;
|
index2 = 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else if (pixID == ParentRelative)
|
else if (pixID == ParentRelative)
|
||||||
{
|
{
|
||||||
|
@ -1076,7 +1062,7 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pPixmap = (PixmapPtr)SecurityLookupIDByType(client, pixID,
|
pPixmap = (PixmapPtr)SecurityLookupIDByType(client, pixID,
|
||||||
RT_PIXMAP, SecurityReadAccess);
|
RT_PIXMAP, DixReadAccess);
|
||||||
if (pPixmap != (PixmapPtr) NULL)
|
if (pPixmap != (PixmapPtr) NULL)
|
||||||
{
|
{
|
||||||
if ((pPixmap->drawable.depth != pWin->drawable.depth) ||
|
if ((pPixmap->drawable.depth != pWin->drawable.depth) ||
|
||||||
|
@ -1137,7 +1123,7 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pPixmap = (PixmapPtr)SecurityLookupIDByType(client, pixID,
|
pPixmap = (PixmapPtr)SecurityLookupIDByType(client, pixID,
|
||||||
RT_PIXMAP, SecurityReadAccess);
|
RT_PIXMAP, DixReadAccess);
|
||||||
if (pPixmap)
|
if (pPixmap)
|
||||||
{
|
{
|
||||||
if ((pPixmap->drawable.depth != pWin->drawable.depth) ||
|
if ((pPixmap->drawable.depth != pWin->drawable.depth) ||
|
||||||
|
@ -1347,7 +1333,7 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
|
||||||
goto PatchUp;
|
goto PatchUp;
|
||||||
}
|
}
|
||||||
pCmap = (ColormapPtr)SecurityLookupIDByType(client, cmap,
|
pCmap = (ColormapPtr)SecurityLookupIDByType(client, cmap,
|
||||||
RT_COLORMAP, SecurityReadAccess);
|
RT_COLORMAP, DixReadAccess);
|
||||||
if (!pCmap)
|
if (!pCmap)
|
||||||
{
|
{
|
||||||
error = BadColor;
|
error = BadColor;
|
||||||
|
@ -1423,7 +1409,7 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pCursor = (CursorPtr)SecurityLookupIDByType(client, cursorID,
|
pCursor = (CursorPtr)SecurityLookupIDByType(client, cursorID,
|
||||||
RT_CURSOR, SecurityReadAccess);
|
RT_CURSOR, DixReadAccess);
|
||||||
if (!pCursor)
|
if (!pCursor)
|
||||||
{
|
{
|
||||||
error = BadCursor;
|
error = BadCursor;
|
||||||
|
@ -2313,7 +2299,7 @@ ConfigureWindow(register WindowPtr pWin, register Mask mask, XID *vlist, ClientP
|
||||||
sibwid = (Window ) *pVlist;
|
sibwid = (Window ) *pVlist;
|
||||||
pVlist++;
|
pVlist++;
|
||||||
pSib = (WindowPtr )SecurityLookupIDByType(client, sibwid,
|
pSib = (WindowPtr )SecurityLookupIDByType(client, sibwid,
|
||||||
RT_WINDOW, SecurityReadAccess);
|
RT_WINDOW, DixReadAccess);
|
||||||
if (!pSib)
|
if (!pSib)
|
||||||
{
|
{
|
||||||
client->errorValue = sibwid;
|
client->errorValue = sibwid;
|
||||||
|
@ -2739,11 +2725,9 @@ MapWindow(register WindowPtr pWin, ClientPtr client)
|
||||||
if (pWin->mapped)
|
if (pWin->mapped)
|
||||||
return(Success);
|
return(Success);
|
||||||
|
|
||||||
#ifdef XACE
|
|
||||||
/* general check for permission to map window */
|
/* general check for permission to map window */
|
||||||
if (!XaceHook(XACE_MAP_ACCESS, client, pWin))
|
if (!XaceHook(XACE_MAP_ACCESS, client, pWin))
|
||||||
return Success;
|
return Success;
|
||||||
#endif
|
|
||||||
|
|
||||||
pScreen = pWin->drawable.pScreen;
|
pScreen = pWin->drawable.pScreen;
|
||||||
if ( (pParent = pWin->parent) )
|
if ( (pParent = pWin->parent) )
|
||||||
|
|
|
@ -159,6 +159,14 @@ default state is platform and configuration specific.
|
||||||
disables DPMS (display power management services). The default state
|
disables DPMS (display power management services). The default state
|
||||||
is platform and configuration specific.
|
is platform and configuration specific.
|
||||||
.TP 8
|
.TP 8
|
||||||
|
.BI \-extension extensionName
|
||||||
|
disables named extension. If an unknown extension name is specified,
|
||||||
|
a list of accepted extension names is printed.
|
||||||
|
.TP 8
|
||||||
|
.BI \+extension extensionName
|
||||||
|
enables named extension. If an unknown extension name is specified,
|
||||||
|
a list of accepted extension names is printed.
|
||||||
|
.TP 8
|
||||||
.B \-f \fIvolume\fP
|
.B \-f \fIvolume\fP
|
||||||
sets feep (bell) volume (allowable range: 0-100).
|
sets feep (bell) volume (allowable range: 0-100).
|
||||||
.TP 8
|
.TP 8
|
||||||
|
|
3
fb/fb.h
3
fb/fb.h
|
@ -1341,6 +1341,9 @@ fbCreateDefColormap(ScreenPtr pScreen);
|
||||||
void
|
void
|
||||||
fbClearVisualTypes(void);
|
fbClearVisualTypes(void);
|
||||||
|
|
||||||
|
Bool
|
||||||
|
fbHasVisualTypes (int depth);
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
fbSetVisualTypes (int depth, int visuals, int bitsPerRGB);
|
fbSetVisualTypes (int depth, int visuals, int bitsPerRGB);
|
||||||
|
|
||||||
|
|
|
@ -268,7 +268,7 @@ ProcAppleWMSelectInput (client)
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH (xAppleWMSelectInputReq);
|
REQUEST_SIZE_MATCH (xAppleWMSelectInputReq);
|
||||||
pHead = (WMEventPtr *)SecurityLookupIDByType(client,
|
pHead = (WMEventPtr *)SecurityLookupIDByType(client,
|
||||||
eventResource, EventType, SecurityWriteAccess);
|
eventResource, EventType, DixWriteAccess);
|
||||||
if (stuff->mask != 0) {
|
if (stuff->mask != 0) {
|
||||||
if (pHead) {
|
if (pHead) {
|
||||||
/* check for existing entry. */
|
/* check for existing entry. */
|
||||||
|
@ -490,11 +490,9 @@ ProcAppleWMSetWindowLevel(
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xAppleWMSetWindowLevelReq);
|
REQUEST_SIZE_MATCH(xAppleWMSetWindowLevelReq);
|
||||||
|
|
||||||
if (!(pWin = SecurityLookupWindow((Drawable)stuff->window,
|
if (Success != dixLookupWindow(&pWin, stuff->window, client,
|
||||||
client, SecurityReadAccess)))
|
DixReadAccess))
|
||||||
{
|
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
|
||||||
|
|
||||||
if (stuff->level < 0 || stuff->level >= AppleWMNumWindowLevels) {
|
if (stuff->level < 0 || stuff->level >= AppleWMNumWindowLevels) {
|
||||||
return BadValue;
|
return BadValue;
|
||||||
|
@ -602,11 +600,9 @@ ProcAppleWMFrameDraw(
|
||||||
|
|
||||||
REQUEST_AT_LEAST_SIZE(xAppleWMFrameDrawReq);
|
REQUEST_AT_LEAST_SIZE(xAppleWMFrameDrawReq);
|
||||||
|
|
||||||
if (!(pWin = SecurityLookupWindow((Drawable)stuff->window,
|
if (Success != dixLookupWindow(&pWin, stuff->window, client,
|
||||||
client, SecurityReadAccess)))
|
DixReadAccess))
|
||||||
{
|
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
|
||||||
|
|
||||||
ir = make_box (stuff->ix, stuff->iy, stuff->iw, stuff->ih);
|
ir = make_box (stuff->ix, stuff->iy, stuff->iw, stuff->ih);
|
||||||
or = make_box (stuff->ox, stuff->oy, stuff->ow, stuff->oh);
|
or = make_box (stuff->ox, stuff->oy, stuff->ow, stuff->oh);
|
||||||
|
|
|
@ -170,12 +170,13 @@ static int ProcPseudoramiXGetState(ClientPtr client)
|
||||||
REQUEST(xPanoramiXGetStateReq);
|
REQUEST(xPanoramiXGetStateReq);
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
xPanoramiXGetStateReply rep;
|
xPanoramiXGetStateReply rep;
|
||||||
register int n;
|
register int n, rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xPanoramiXGetStateReq);
|
REQUEST_SIZE_MATCH(xPanoramiXGetStateReq);
|
||||||
pWin = LookupWindow (stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
|
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
|
@ -196,12 +197,13 @@ static int ProcPseudoramiXGetScreenCount(ClientPtr client)
|
||||||
REQUEST(xPanoramiXGetScreenCountReq);
|
REQUEST(xPanoramiXGetScreenCountReq);
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
xPanoramiXGetScreenCountReply rep;
|
xPanoramiXGetScreenCountReply rep;
|
||||||
register int n;
|
register int n, rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq);
|
REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq);
|
||||||
pWin = LookupWindow (stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
|
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
|
@ -222,12 +224,13 @@ static int ProcPseudoramiXGetScreenSize(ClientPtr client)
|
||||||
REQUEST(xPanoramiXGetScreenSizeReq);
|
REQUEST(xPanoramiXGetScreenSizeReq);
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
xPanoramiXGetScreenSizeReply rep;
|
xPanoramiXGetScreenSizeReply rep;
|
||||||
register int n;
|
register int n, rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
|
REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
|
||||||
pWin = LookupWindow (stuff->window, client);
|
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||||
if (!pWin)
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
|
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
|
|
|
@ -213,6 +213,7 @@ ProcAppleDRICreateSurface(
|
||||||
DrawablePtr pDrawable;
|
DrawablePtr pDrawable;
|
||||||
xp_surface_id sid;
|
xp_surface_id sid;
|
||||||
unsigned int key[2];
|
unsigned int key[2];
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST(xAppleDRICreateSurfaceReq);
|
REQUEST(xAppleDRICreateSurfaceReq);
|
||||||
REQUEST_SIZE_MATCH(xAppleDRICreateSurfaceReq);
|
REQUEST_SIZE_MATCH(xAppleDRICreateSurfaceReq);
|
||||||
|
@ -220,12 +221,10 @@ ProcAppleDRICreateSurface(
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
|
|
||||||
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable(
|
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||||
(Drawable)stuff->drawable,
|
DixReadAccess);
|
||||||
client,
|
if (rc != Success)
|
||||||
SecurityReadAccess))) {
|
return rc;
|
||||||
return BadValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
rep.key_0 = rep.key_1 = rep.uid = 0;
|
rep.key_0 = rep.key_1 = rep.uid = 0;
|
||||||
|
|
||||||
|
@ -252,13 +251,12 @@ ProcAppleDRIDestroySurface(
|
||||||
REQUEST(xAppleDRIDestroySurfaceReq);
|
REQUEST(xAppleDRIDestroySurfaceReq);
|
||||||
DrawablePtr pDrawable;
|
DrawablePtr pDrawable;
|
||||||
REQUEST_SIZE_MATCH(xAppleDRIDestroySurfaceReq);
|
REQUEST_SIZE_MATCH(xAppleDRIDestroySurfaceReq);
|
||||||
|
int rc;
|
||||||
|
|
||||||
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable(
|
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||||
(Drawable)stuff->drawable,
|
DixReadAccess);
|
||||||
client,
|
if (rc != Success)
|
||||||
SecurityReadAccess))) {
|
return rc;
|
||||||
return BadValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!DRIDestroySurface( screenInfo.screens[stuff->screen],
|
if (!DRIDestroySurface( screenInfo.screens[stuff->screen],
|
||||||
(Drawable)stuff->drawable,
|
(Drawable)stuff->drawable,
|
||||||
|
|
|
@ -27,7 +27,7 @@ endif
|
||||||
|
|
||||||
AM_YFLAGS = -d
|
AM_YFLAGS = -d
|
||||||
AM_CFLAGS = \
|
AM_CFLAGS = \
|
||||||
\
|
$(DIX_CFLAGS) \
|
||||||
-I$(top_srcdir)/hw/dmx \
|
-I$(top_srcdir)/hw/dmx \
|
||||||
$(GLX_INCS) \
|
$(GLX_INCS) \
|
||||||
-DHAVE_DMX_CONFIG_H \
|
-DHAVE_DMX_CONFIG_H \
|
||||||
|
|
18
hw/dmx/dmx.c
18
hw/dmx/dmx.c
|
@ -282,12 +282,12 @@ static int ProcDMXForceWindowCreation(ClientPtr client)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!(win = SecurityLookupIDByType(client, stuff->window, XRT_WINDOW,
|
if (!(win = SecurityLookupIDByType(client, stuff->window, XRT_WINDOW,
|
||||||
SecurityReadAccess)))
|
DixReadAccess)))
|
||||||
return -1; /* BadWindow */
|
return -1; /* BadWindow */
|
||||||
|
|
||||||
FOR_NSCREENS(i) {
|
FOR_NSCREENS(i) {
|
||||||
if (!(pWin = SecurityLookupWindow(win->info[i].id, client,
|
if (Success != dixLookupWindow(&pWin, win->info[i].id, client,
|
||||||
SecurityReadAccess)))
|
DixReadAccess))
|
||||||
return -1; /* BadWindow */
|
return -1; /* BadWindow */
|
||||||
|
|
||||||
dmxForceWindowCreation(pWin);
|
dmxForceWindowCreation(pWin);
|
||||||
|
@ -296,8 +296,8 @@ static int ProcDMXForceWindowCreation(ClientPtr client)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!(pWin = SecurityLookupWindow(stuff->window, client,
|
if (Success != dixLookupWindow(&pWin, stuff->window, client,
|
||||||
SecurityReadAccess)))
|
DixReadAccess))
|
||||||
return -1; /* BadWindow */
|
return -1; /* BadWindow */
|
||||||
|
|
||||||
dmxForceWindowCreation(pWin);
|
dmxForceWindowCreation(pWin);
|
||||||
|
@ -556,12 +556,12 @@ static int dmxPopulatePanoramiX(ClientPtr client, Window window,
|
||||||
DMXWindowAttributesRec attr;
|
DMXWindowAttributesRec attr;
|
||||||
|
|
||||||
if (!(win = SecurityLookupIDByType(client, window, XRT_WINDOW,
|
if (!(win = SecurityLookupIDByType(client, window, XRT_WINDOW,
|
||||||
SecurityReadAccess)))
|
DixReadAccess)))
|
||||||
return -1; /* BadWindow */
|
return -1; /* BadWindow */
|
||||||
|
|
||||||
FOR_NSCREENS(i) {
|
FOR_NSCREENS(i) {
|
||||||
if (!(pWin = SecurityLookupWindow(win->info[i].id, client,
|
if (Success != dixLookupWindow(&pWin, win->info[i].id, client,
|
||||||
SecurityReadAccess)))
|
DixReadAccess))
|
||||||
return -1; /* BadWindow */
|
return -1; /* BadWindow */
|
||||||
if (dmxGetWindowAttributes(pWin, &attr)) {
|
if (dmxGetWindowAttributes(pWin, &attr)) {
|
||||||
screens[count] = attr.screen;
|
screens[count] = attr.screen;
|
||||||
|
@ -587,7 +587,7 @@ static int dmxPopulate(ClientPtr client, Window window, CARD32 *screens,
|
||||||
pos, vis);
|
pos, vis);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!(pWin = SecurityLookupWindow(window, client, SecurityReadAccess)))
|
if (Success != dixLookupWindow(&pWin, window, client, DixReadAccess))
|
||||||
return -1; /* BadWindow */
|
return -1; /* BadWindow */
|
||||||
|
|
||||||
dmxGetWindowAttributes(pWin, &attr);
|
dmxGetWindowAttributes(pWin, &attr);
|
||||||
|
|
|
@ -1056,6 +1056,116 @@ static Bool dmxCompareScreens(DMXScreenInfo *new, DMXScreenInfo *old)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef RENDER
|
||||||
|
/** Restore Render's picture */
|
||||||
|
static void dmxBERestoreRenderPict(pointer value, XID id, pointer n)
|
||||||
|
{
|
||||||
|
PicturePtr pPicture = value; /* The picture */
|
||||||
|
DrawablePtr pDraw = pPicture->pDrawable; /* The picture's drawable */
|
||||||
|
int scrnNum = (int)n;
|
||||||
|
|
||||||
|
if (pDraw->pScreen->myNum != scrnNum) {
|
||||||
|
/* Picture not on the screen we are restoring*/
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pDraw->type == DRAWABLE_PIXMAP) {
|
||||||
|
PixmapPtr pPixmap = (PixmapPtr)pDraw;
|
||||||
|
|
||||||
|
/* Create and restore the pixmap drawable */
|
||||||
|
dmxBECreatePixmap(pPixmap);
|
||||||
|
dmxBERestorePixmap(pPixmap);
|
||||||
|
}
|
||||||
|
|
||||||
|
dmxBECreatePicture(pPicture);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Restore Render's glyphs */
|
||||||
|
static void dmxBERestoreRenderGlyph(pointer value, XID id, pointer n)
|
||||||
|
{
|
||||||
|
GlyphSetPtr glyphSet = value;
|
||||||
|
int scrnNum = (int)n;
|
||||||
|
dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
||||||
|
DMXScreenInfo *dmxScreen = &dmxScreens[scrnNum];
|
||||||
|
GlyphRefPtr table;
|
||||||
|
char *images;
|
||||||
|
Glyph *gids;
|
||||||
|
XGlyphInfo *glyphs;
|
||||||
|
char *pos;
|
||||||
|
int beret;
|
||||||
|
int len_images = 0;
|
||||||
|
int i;
|
||||||
|
int ctr;
|
||||||
|
|
||||||
|
if (glyphPriv->glyphSets[scrnNum]) {
|
||||||
|
/* Only restore glyphs on the screen we are attaching */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* First we must create the glyph set on the backend. */
|
||||||
|
if ((beret = dmxBECreateGlyphSet(scrnNum, glyphSet)) != Success) {
|
||||||
|
dmxLog(dmxWarning,
|
||||||
|
"\tdmxBERestoreRenderGlyph failed to create glyphset!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now for the complex part, restore the glyph data */
|
||||||
|
table = glyphSet->hash.table;
|
||||||
|
|
||||||
|
/* We need to know how much memory to allocate for this part */
|
||||||
|
for (i = 0; i < glyphSet->hash.hashSet->size; i++) {
|
||||||
|
GlyphRefPtr gr = &table[i];
|
||||||
|
GlyphPtr gl = gr->glyph;
|
||||||
|
|
||||||
|
if (!gl || gl == DeletedGlyph) continue;
|
||||||
|
len_images += gl->size - sizeof(gl->info);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now allocate the memory we need */
|
||||||
|
images = ALLOCATE_LOCAL(len_images*sizeof(char));
|
||||||
|
gids = ALLOCATE_LOCAL(glyphSet->hash.tableEntries*sizeof(Glyph));
|
||||||
|
glyphs = ALLOCATE_LOCAL(glyphSet->hash.tableEntries*sizeof(XGlyphInfo));
|
||||||
|
|
||||||
|
memset(images, 0, len_images * sizeof(char));
|
||||||
|
pos = images;
|
||||||
|
ctr = 0;
|
||||||
|
|
||||||
|
/* Fill the allocated memory with the proper data */
|
||||||
|
for (i = 0; i < glyphSet->hash.hashSet->size; i++) {
|
||||||
|
GlyphRefPtr gr = &table[i];
|
||||||
|
GlyphPtr gl = gr->glyph;
|
||||||
|
|
||||||
|
if (!gl || gl == DeletedGlyph) continue;
|
||||||
|
|
||||||
|
/* First lets put the data into gids */
|
||||||
|
gids[ctr] = gr->signature;
|
||||||
|
|
||||||
|
/* Next do the glyphs data structures */
|
||||||
|
glyphs[ctr].width = gl->info.width;
|
||||||
|
glyphs[ctr].height = gl->info.height;
|
||||||
|
glyphs[ctr].x = gl->info.x;
|
||||||
|
glyphs[ctr].y = gl->info.y;
|
||||||
|
glyphs[ctr].xOff = gl->info.xOff;
|
||||||
|
glyphs[ctr].yOff = gl->info.yOff;
|
||||||
|
|
||||||
|
/* Copy the images from the DIX's data into the buffer */
|
||||||
|
memcpy(pos, gl+1, gl->size - sizeof(gl->info));
|
||||||
|
pos += gl->size - sizeof(gl->info);
|
||||||
|
ctr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now restore the glyph data */
|
||||||
|
XRenderAddGlyphs(dmxScreen->beDisplay, glyphPriv->glyphSets[scrnNum],
|
||||||
|
gids,glyphs, glyphSet->hash.tableEntries, images,
|
||||||
|
len_images);
|
||||||
|
|
||||||
|
/* Clean up */
|
||||||
|
DEALLOCATE_LOCAL(len_images);
|
||||||
|
DEALLOCATE_LOCAL(gids);
|
||||||
|
DEALLOCATE_LOCAL(glyphs);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/** Reattach previously detached back-end screen. */
|
/** Reattach previously detached back-end screen. */
|
||||||
int dmxAttachScreen(int idx, DMXScreenAttributesPtr attr)
|
int dmxAttachScreen(int idx, DMXScreenAttributesPtr attr)
|
||||||
{
|
{
|
||||||
|
@ -1174,6 +1284,20 @@ int dmxAttachScreen(int idx, DMXScreenAttributesPtr attr)
|
||||||
/* Create window hierarchy (top down) */
|
/* Create window hierarchy (top down) */
|
||||||
dmxBECreateWindowTree(idx);
|
dmxBECreateWindowTree(idx);
|
||||||
|
|
||||||
|
#ifdef RENDER
|
||||||
|
/* Restore the picture state for RENDER */
|
||||||
|
for (i = currentMaxClients; --i >= 0; )
|
||||||
|
if (clients[i])
|
||||||
|
FindClientResourcesByType(clients[i],PictureType,
|
||||||
|
dmxBERestoreRenderPict,(pointer)idx);
|
||||||
|
|
||||||
|
/* Restore the glyph state for RENDER */
|
||||||
|
for (i = currentMaxClients; --i >= 0; )
|
||||||
|
if (clients[i])
|
||||||
|
FindClientResourcesByType(clients[i],GlyphSetType,
|
||||||
|
dmxBERestoreRenderGlyph,(pointer)idx);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Refresh screen by generating exposure events for all windows */
|
/* Refresh screen by generating exposure events for all windows */
|
||||||
dmxForceExposures(idx);
|
dmxForceExposures(idx);
|
||||||
|
|
||||||
|
@ -1362,8 +1486,15 @@ static void dmxBEDestroyResources(pointer value, XID id, RESTYPE type,
|
||||||
#ifdef RENDER
|
#ifdef RENDER
|
||||||
} else if ((type & TypeMask) == (PictureType & TypeMask)) {
|
} else if ((type & TypeMask) == (PictureType & TypeMask)) {
|
||||||
PicturePtr pPict = value;
|
PicturePtr pPict = value;
|
||||||
if (pPict->pDrawable->pScreen->myNum == scrnNum)
|
if (pPict->pDrawable->pScreen->myNum == scrnNum) {
|
||||||
|
/* Free the pixmaps on the backend if needed */
|
||||||
|
if (pPict->pDrawable->type == DRAWABLE_PIXMAP) {
|
||||||
|
PixmapPtr pPixmap = (PixmapPtr)(pPict->pDrawable);
|
||||||
|
dmxBESavePixmap(pPixmap);
|
||||||
|
dmxBEFreePixmap(pPixmap);
|
||||||
|
}
|
||||||
dmxBEFreePicture((PicturePtr)value);
|
dmxBEFreePicture((PicturePtr)value);
|
||||||
|
}
|
||||||
} else if ((type & TypeMask) == (GlyphSetType & TypeMask)) {
|
} else if ((type & TypeMask) == (GlyphSetType & TypeMask)) {
|
||||||
dmxBEFreeGlyphSet(pScreen, (GlyphSetPtr)value);
|
dmxBEFreeGlyphSet(pScreen, (GlyphSetPtr)value);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -624,7 +624,7 @@ void InitOutput(ScreenInfo *pScreenInfo, int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure that the command-line arguments are sane. */
|
/* Make sure that the command-line arguments are sane. */
|
||||||
if (dmxAddRemoveScreens && (!noRenderExtension || dmxGLXProxy)) {
|
if (dmxAddRemoveScreens && dmxGLXProxy) {
|
||||||
/* Currently it is not possible to support GLX and Render
|
/* Currently it is not possible to support GLX and Render
|
||||||
* extensions with dynamic screen addition/removal due to the
|
* extensions with dynamic screen addition/removal due to the
|
||||||
* state that each extension keeps, which cannot be restored. */
|
* state that each extension keeps, which cannot be restored. */
|
||||||
|
|
107
hw/dmx/dmxpict.c
107
hw/dmx/dmxpict.c
|
@ -223,6 +223,36 @@ Bool dmxBEFreeGlyphSet(ScreenPtr pScreen, GlyphSetPtr glyphSet)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Create \a glyphSet on the backend screen number \a idx. */
|
||||||
|
int dmxBECreateGlyphSet(int idx, GlyphSetPtr glyphSet)
|
||||||
|
{
|
||||||
|
XRenderPictFormat *pFormat;
|
||||||
|
DMXScreenInfo *dmxScreen = &dmxScreens[idx];
|
||||||
|
dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
||||||
|
PictFormatPtr pFmt = glyphSet->format;
|
||||||
|
int (*oldErrorHandler)(Display *, XErrorEvent *);
|
||||||
|
|
||||||
|
pFormat = dmxFindFormat(dmxScreen, pFmt);
|
||||||
|
if (!pFormat) {
|
||||||
|
return BadMatch;
|
||||||
|
}
|
||||||
|
|
||||||
|
dmxGlyphLastError = 0;
|
||||||
|
oldErrorHandler = XSetErrorHandler(dmxGlyphErrorHandler);
|
||||||
|
|
||||||
|
/* Catch when this fails */
|
||||||
|
glyphPriv->glyphSets[idx]
|
||||||
|
= XRenderCreateGlyphSet(dmxScreen->beDisplay, pFormat);
|
||||||
|
|
||||||
|
XSetErrorHandler(oldErrorHandler);
|
||||||
|
|
||||||
|
if (dmxGlyphLastError) {
|
||||||
|
return dmxGlyphLastError;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Success;
|
||||||
|
}
|
||||||
|
|
||||||
/** Create a Glyph Set on each screen. Save the glyphset ID from each
|
/** Create a Glyph Set on each screen. Save the glyphset ID from each
|
||||||
* screen in the Glyph Set's private structure. Fail if the format
|
* screen in the Glyph Set's private structure. Fail if the format
|
||||||
* requested is not available or if the Glyph Set cannot be created on
|
* requested is not available or if the Glyph Set cannot be created on
|
||||||
|
@ -235,40 +265,32 @@ static int dmxProcRenderCreateGlyphSet(ClientPtr client)
|
||||||
ret = dmxSaveRenderVector[stuff->renderReqType](client);
|
ret = dmxSaveRenderVector[stuff->renderReqType](client);
|
||||||
|
|
||||||
if (ret == Success) {
|
if (ret == Success) {
|
||||||
int (*oldErrorHandler)(Display *, XErrorEvent *);
|
|
||||||
GlyphSetPtr glyphSet;
|
GlyphSetPtr glyphSet;
|
||||||
dmxGlyphPrivPtr glyphPriv;
|
dmxGlyphPrivPtr glyphPriv;
|
||||||
int i;
|
int i;
|
||||||
PictFormatPtr pFmt;
|
|
||||||
XRenderPictFormat *pFormat;
|
|
||||||
|
|
||||||
/* Look up glyphSet that was just created ???? */
|
/* Look up glyphSet that was just created ???? */
|
||||||
/* Store glyphsets from backends in glyphSet->devPrivate ????? */
|
/* Store glyphsets from backends in glyphSet->devPrivate ????? */
|
||||||
/* Make sure we handle all errors here!! */
|
/* Make sure we handle all errors here!! */
|
||||||
|
|
||||||
glyphSet = SecurityLookupIDByType(client, stuff->gsid, GlyphSetType,
|
glyphSet = SecurityLookupIDByType(client, stuff->gsid, GlyphSetType,
|
||||||
SecurityDestroyAccess);
|
DixDestroyAccess);
|
||||||
glyphPriv = xalloc(sizeof(dmxGlyphPrivRec));
|
glyphPriv = xalloc(sizeof(dmxGlyphPrivRec));
|
||||||
if (!glyphPriv) return BadAlloc;
|
if (!glyphPriv) return BadAlloc;
|
||||||
glyphPriv->glyphSets = NULL;
|
glyphPriv->glyphSets = NULL;
|
||||||
MAXSCREENSALLOC_RETURN(glyphPriv->glyphSets, BadAlloc);
|
MAXSCREENSALLOC_RETURN(glyphPriv->glyphSets, BadAlloc);
|
||||||
DMX_SET_GLYPH_PRIV(glyphSet, glyphPriv);
|
DMX_SET_GLYPH_PRIV(glyphSet, glyphPriv);
|
||||||
|
|
||||||
pFmt = SecurityLookupIDByType(client, stuff->format, PictFormatType,
|
|
||||||
SecurityReadAccess);
|
|
||||||
|
|
||||||
oldErrorHandler = XSetErrorHandler(dmxGlyphErrorHandler);
|
|
||||||
|
|
||||||
for (i = 0; i < dmxNumScreens; i++) {
|
for (i = 0; i < dmxNumScreens; i++) {
|
||||||
DMXScreenInfo *dmxScreen = &dmxScreens[i];
|
DMXScreenInfo *dmxScreen = &dmxScreens[i];
|
||||||
|
int beret;
|
||||||
|
|
||||||
if (!dmxScreen->beDisplay) {
|
if (!dmxScreen->beDisplay) {
|
||||||
glyphPriv->glyphSets[i] = 0;
|
glyphPriv->glyphSets[i] = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
pFormat = dmxFindFormat(dmxScreen, pFmt);
|
if ((beret = dmxBECreateGlyphSet(i, glyphSet)) != Success) {
|
||||||
if (!pFormat) {
|
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
/* Free the glyph sets we've allocated thus far */
|
/* Free the glyph sets we've allocated thus far */
|
||||||
|
@ -278,30 +300,9 @@ static int dmxProcRenderCreateGlyphSet(ClientPtr client)
|
||||||
/* Free the resource created by render */
|
/* Free the resource created by render */
|
||||||
FreeResource(stuff->gsid, RT_NONE);
|
FreeResource(stuff->gsid, RT_NONE);
|
||||||
|
|
||||||
ret = BadMatch;
|
return beret;
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Catch when this fails */
|
|
||||||
glyphPriv->glyphSets[i]
|
|
||||||
= XRenderCreateGlyphSet(dmxScreen->beDisplay, pFormat);
|
|
||||||
|
|
||||||
if (dmxGlyphLastError) {
|
|
||||||
int j;
|
|
||||||
|
|
||||||
/* Free the glyph sets we've allocated thus far */
|
|
||||||
for (j = 0; j < i; j++)
|
|
||||||
dmxBEFreeGlyphSet(screenInfo.screens[j], glyphSet);
|
|
||||||
|
|
||||||
/* Free the resource created by render */
|
|
||||||
FreeResource(stuff->gsid, RT_NONE);
|
|
||||||
|
|
||||||
ret = dmxGlyphLastError;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
XSetErrorHandler(oldErrorHandler);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -315,7 +316,7 @@ static int dmxProcRenderFreeGlyphSet(ClientPtr client)
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xRenderFreeGlyphSetReq);
|
REQUEST_SIZE_MATCH(xRenderFreeGlyphSetReq);
|
||||||
glyphSet = SecurityLookupIDByType(client, stuff->glyphset, GlyphSetType,
|
glyphSet = SecurityLookupIDByType(client, stuff->glyphset, GlyphSetType,
|
||||||
SecurityDestroyAccess);
|
DixDestroyAccess);
|
||||||
|
|
||||||
if (glyphSet && glyphSet->refcnt == 1) {
|
if (glyphSet && glyphSet->refcnt == 1) {
|
||||||
dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
||||||
|
@ -358,7 +359,7 @@ static int dmxProcRenderAddGlyphs(ClientPtr client)
|
||||||
int nbytes;
|
int nbytes;
|
||||||
|
|
||||||
glyphSet = SecurityLookupIDByType(client, stuff->glyphset,
|
glyphSet = SecurityLookupIDByType(client, stuff->glyphset,
|
||||||
GlyphSetType, SecurityReadAccess);
|
GlyphSetType, DixReadAccess);
|
||||||
glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
||||||
|
|
||||||
nglyphs = stuff->nglyphs;
|
nglyphs = stuff->nglyphs;
|
||||||
|
@ -401,7 +402,7 @@ static int dmxProcRenderFreeGlyphs(ClientPtr client)
|
||||||
|
|
||||||
REQUEST_AT_LEAST_SIZE(xRenderFreeGlyphsReq);
|
REQUEST_AT_LEAST_SIZE(xRenderFreeGlyphsReq);
|
||||||
glyphSet = SecurityLookupIDByType(client, stuff->glyphset, GlyphSetType,
|
glyphSet = SecurityLookupIDByType(client, stuff->glyphset, GlyphSetType,
|
||||||
SecurityWriteAccess);
|
DixWriteAccess);
|
||||||
|
|
||||||
if (glyphSet) {
|
if (glyphSet) {
|
||||||
dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
||||||
|
@ -473,13 +474,13 @@ static int dmxProcRenderCompositeGlyphs(ClientPtr client)
|
||||||
dmxGlyphPrivPtr glyphPriv;
|
dmxGlyphPrivPtr glyphPriv;
|
||||||
|
|
||||||
pSrc = SecurityLookupIDByType(client, stuff->src, PictureType,
|
pSrc = SecurityLookupIDByType(client, stuff->src, PictureType,
|
||||||
SecurityReadAccess);
|
DixReadAccess);
|
||||||
pSrcPriv = DMX_GET_PICT_PRIV(pSrc);
|
pSrcPriv = DMX_GET_PICT_PRIV(pSrc);
|
||||||
if (!pSrcPriv->pict)
|
if (!pSrcPriv->pict)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
pDst = SecurityLookupIDByType(client, stuff->dst, PictureType,
|
pDst = SecurityLookupIDByType(client, stuff->dst, PictureType,
|
||||||
SecurityWriteAccess);
|
DixWriteAccess);
|
||||||
pDstPriv = DMX_GET_PICT_PRIV(pDst);
|
pDstPriv = DMX_GET_PICT_PRIV(pDst);
|
||||||
if (!pDstPriv->pict)
|
if (!pDstPriv->pict)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -496,7 +497,7 @@ static int dmxProcRenderCompositeGlyphs(ClientPtr client)
|
||||||
|
|
||||||
if (stuff->maskFormat)
|
if (stuff->maskFormat)
|
||||||
pFmt = SecurityLookupIDByType(client, stuff->maskFormat,
|
pFmt = SecurityLookupIDByType(client, stuff->maskFormat,
|
||||||
PictFormatType, SecurityReadAccess);
|
PictFormatType, DixReadAccess);
|
||||||
else
|
else
|
||||||
pFmt = NULL;
|
pFmt = NULL;
|
||||||
|
|
||||||
|
@ -547,7 +548,7 @@ static int dmxProcRenderCompositeGlyphs(ClientPtr client)
|
||||||
curElt = elts;
|
curElt = elts;
|
||||||
|
|
||||||
glyphSet = SecurityLookupIDByType(client, stuff->glyphset,
|
glyphSet = SecurityLookupIDByType(client, stuff->glyphset,
|
||||||
GlyphSetType, SecurityReadAccess);
|
GlyphSetType, DixReadAccess);
|
||||||
glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
||||||
|
|
||||||
while (buffer + sizeof(xGlyphElt) < end) {
|
while (buffer + sizeof(xGlyphElt) < end) {
|
||||||
|
@ -558,7 +559,7 @@ static int dmxProcRenderCompositeGlyphs(ClientPtr client)
|
||||||
glyphSet = SecurityLookupIDByType(client,
|
glyphSet = SecurityLookupIDByType(client,
|
||||||
*((CARD32 *)buffer),
|
*((CARD32 *)buffer),
|
||||||
GlyphSetType,
|
GlyphSetType,
|
||||||
SecurityReadAccess);
|
DixReadAccess);
|
||||||
glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
||||||
buffer += 4;
|
buffer += 4;
|
||||||
} else {
|
} else {
|
||||||
|
@ -622,7 +623,7 @@ static int dmxProcRenderSetPictureTransform(ClientPtr client)
|
||||||
REQUEST(xRenderSetPictureTransformReq);
|
REQUEST(xRenderSetPictureTransformReq);
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xRenderSetPictureTransformReq);
|
REQUEST_SIZE_MATCH(xRenderSetPictureTransformReq);
|
||||||
VERIFY_PICTURE(pPicture, stuff->picture, client, SecurityWriteAccess,
|
VERIFY_PICTURE(pPicture, stuff->picture, client, DixWriteAccess,
|
||||||
RenderErrBase + BadPicture);
|
RenderErrBase + BadPicture);
|
||||||
|
|
||||||
/* For the following to work with PanoramiX, it assumes that Render
|
/* For the following to work with PanoramiX, it assumes that Render
|
||||||
|
@ -663,7 +664,7 @@ static int dmxProcRenderSetPictureFilter(ClientPtr client)
|
||||||
REQUEST(xRenderSetPictureFilterReq);
|
REQUEST(xRenderSetPictureFilterReq);
|
||||||
|
|
||||||
REQUEST_AT_LEAST_SIZE(xRenderSetPictureFilterReq);
|
REQUEST_AT_LEAST_SIZE(xRenderSetPictureFilterReq);
|
||||||
VERIFY_PICTURE(pPicture, stuff->picture, client, SecurityWriteAccess,
|
VERIFY_PICTURE(pPicture, stuff->picture, client, DixWriteAccess,
|
||||||
RenderErrBase + BadPicture);
|
RenderErrBase + BadPicture);
|
||||||
|
|
||||||
/* For the following to work with PanoramiX, it assumes that Render
|
/* For the following to work with PanoramiX, it assumes that Render
|
||||||
|
@ -753,6 +754,20 @@ void dmxCreatePictureList(WindowPtr pWindow)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Create \a pPicture on the backend. */
|
||||||
|
int dmxBECreatePicture(PicturePtr pPicture)
|
||||||
|
{
|
||||||
|
dmxPictPrivPtr pPictPriv = DMX_GET_PICT_PRIV(pPicture);
|
||||||
|
|
||||||
|
/* Create picutre on BE */
|
||||||
|
pPictPriv->pict = dmxDoCreatePicture(pPicture);
|
||||||
|
|
||||||
|
/* Flush changes to the backend server */
|
||||||
|
dmxValidatePicture(pPicture, (1 << (CPLastBit+1)) - 1);
|
||||||
|
|
||||||
|
return Success;
|
||||||
|
}
|
||||||
|
|
||||||
/** Create a picture. This function handles the CreatePicture
|
/** Create a picture. This function handles the CreatePicture
|
||||||
* unwrapping/wrapping and calls dmxDoCreatePicture to actually create
|
* unwrapping/wrapping and calls dmxDoCreatePicture to actually create
|
||||||
* the picture on the appropriate screen. */
|
* the picture on the appropriate screen. */
|
||||||
|
@ -853,7 +868,11 @@ int dmxChangePictureClip(PicturePtr pPicture, int clipType,
|
||||||
/* The clip has already been changed into a region by the mi
|
/* The clip has already been changed into a region by the mi
|
||||||
* routine called above.
|
* routine called above.
|
||||||
*/
|
*/
|
||||||
if (pPicture->clientClip) {
|
if (clipType == CT_NONE) {
|
||||||
|
/* Disable clipping, show all */
|
||||||
|
XFixesSetPictureClipRegion(dmxScreen->beDisplay,
|
||||||
|
pPictPriv->pict, 0, 0, None);
|
||||||
|
} else if (pPicture->clientClip) {
|
||||||
RegionPtr pClip = pPicture->clientClip;
|
RegionPtr pClip = pPicture->clientClip;
|
||||||
BoxPtr pBox = REGION_RECTS(pClip);
|
BoxPtr pBox = REGION_RECTS(pClip);
|
||||||
int nBox = REGION_NUM_RECTS(pClip);
|
int nBox = REGION_NUM_RECTS(pClip);
|
||||||
|
|
|
@ -112,7 +112,9 @@ extern void dmxTriFan(CARD8 op,
|
||||||
INT16 xSrc, INT16 ySrc,
|
INT16 xSrc, INT16 ySrc,
|
||||||
int npoint, xPointFixed *points);
|
int npoint, xPointFixed *points);
|
||||||
|
|
||||||
|
extern int dmxBECreateGlyphSet(int idx, GlyphSetPtr glyphSet);
|
||||||
extern Bool dmxBEFreeGlyphSet(ScreenPtr pScreen, GlyphSetPtr glyphSet);
|
extern Bool dmxBEFreeGlyphSet(ScreenPtr pScreen, GlyphSetPtr glyphSet);
|
||||||
|
extern int dmxBECreatePicture(PicturePtr pPicture);
|
||||||
extern Bool dmxBEFreePicture(PicturePtr pPicture);
|
extern Bool dmxBEFreePicture(PicturePtr pPicture);
|
||||||
|
|
||||||
extern int dmxPictPrivateIndex; /**< Index for picture private data */
|
extern int dmxPictPrivateIndex; /**< Index for picture private data */
|
||||||
|
|
|
@ -32,7 +32,7 @@ libglxproxy_a_SOURCES = compsize.c \
|
||||||
unpack.h
|
unpack.h
|
||||||
|
|
||||||
AM_CFLAGS = \
|
AM_CFLAGS = \
|
||||||
\
|
$(DIX_CFLAGS) \
|
||||||
-I$(top_srcdir)/hw/dmx \
|
-I$(top_srcdir)/hw/dmx \
|
||||||
-I$(top_srcdir)/include \
|
-I$(top_srcdir)/include \
|
||||||
-I$(top_srcdir)/GL/include \
|
-I$(top_srcdir)/GL/include \
|
||||||
|
|
|
@ -430,9 +430,10 @@ int __glXBindSwapBarrierSGIX(__GLXclientState *cl, GLbyte *pc)
|
||||||
DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
__GLXpixmap *pGlxPixmap = NULL;
|
__GLXpixmap *pGlxPixmap = NULL;
|
||||||
__glXWindow *pGlxWindow = NULL;
|
__glXWindow *pGlxWindow = NULL;
|
||||||
|
int rc;
|
||||||
|
|
||||||
pDraw = (DrawablePtr) LookupDrawable(req->drawable, client);
|
rc = dixLookupDrawable(&pDraw, req->drawable, client, 0, DixUnknownAccess);
|
||||||
if (!pDraw) {
|
if (rc != Success) {
|
||||||
pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->drawable,
|
pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->drawable,
|
||||||
__glXPixmapRes);
|
__glXPixmapRes);
|
||||||
if (pGlxPixmap) pDraw = pGlxPixmap->pDraw;
|
if (pGlxPixmap) pDraw = pGlxPixmap->pDraw;
|
||||||
|
@ -459,9 +460,10 @@ int __glXJoinSwapGroupSGIX(__GLXclientState *cl, GLbyte *pc)
|
||||||
DrawablePtr pDraw, pMember = NULL;
|
DrawablePtr pDraw, pMember = NULL;
|
||||||
__GLXpixmap *pGlxPixmap = NULL;
|
__GLXpixmap *pGlxPixmap = NULL;
|
||||||
__glXWindow *pGlxWindow = NULL;
|
__glXWindow *pGlxWindow = NULL;
|
||||||
|
int rc;
|
||||||
|
|
||||||
pDraw = (DrawablePtr) LookupDrawable(req->drawable, client);
|
rc = dixLookupDrawable(&pDraw, req->drawable, client, 0, DixUnknownAccess);
|
||||||
if (!pDraw) {
|
if (rc != Success) {
|
||||||
pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->drawable,
|
pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->drawable,
|
||||||
__glXPixmapRes);
|
__glXPixmapRes);
|
||||||
if (pGlxPixmap) pDraw = pGlxPixmap->pDraw;
|
if (pGlxPixmap) pDraw = pGlxPixmap->pDraw;
|
||||||
|
@ -479,8 +481,9 @@ int __glXJoinSwapGroupSGIX(__GLXclientState *cl, GLbyte *pc)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req->member != None) {
|
if (req->member != None) {
|
||||||
pMember = (DrawablePtr) LookupDrawable(req->member, client);
|
rc = dixLookupDrawable(&pMember, req->member, client, 0,
|
||||||
if (!pMember) {
|
DixUnknownAccess);
|
||||||
|
if (rc != Success) {
|
||||||
pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->member,
|
pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->member,
|
||||||
__glXPixmapRes);
|
__glXPixmapRes);
|
||||||
if (pGlxPixmap) pMember = pGlxPixmap->pDraw;
|
if (pGlxPixmap) pMember = pGlxPixmap->pDraw;
|
||||||
|
@ -734,7 +737,7 @@ static int MakeCurrent(__GLXclientState *cl,
|
||||||
#endif
|
#endif
|
||||||
int from_screen = 0;
|
int from_screen = 0;
|
||||||
int to_screen = 0;
|
int to_screen = 0;
|
||||||
int s;
|
int s, rc;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** If one is None and the other isn't, it's a bad match.
|
** If one is None and the other isn't, it's a bad match.
|
||||||
|
@ -778,8 +781,8 @@ static int MakeCurrent(__GLXclientState *cl,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (drawId != None) {
|
if (drawId != None) {
|
||||||
pDraw = (DrawablePtr) LookupDrawable(drawId, client);
|
rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
|
||||||
if (pDraw) {
|
if (rc == Success) {
|
||||||
if (pDraw->type == DRAWABLE_WINDOW) {
|
if (pDraw->type == DRAWABLE_WINDOW) {
|
||||||
/*
|
/*
|
||||||
** Drawable is an X Window.
|
** Drawable is an X Window.
|
||||||
|
@ -885,8 +888,8 @@ static int MakeCurrent(__GLXclientState *cl,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (readId != None && readId != drawId ) {
|
if (readId != None && readId != drawId ) {
|
||||||
pReadDraw = (DrawablePtr) LookupDrawable(readId, client);
|
rc = dixLookupDrawable(&pReadDraw, readId, client, 0,DixUnknownAccess);
|
||||||
if (pReadDraw) {
|
if (rc == Success) {
|
||||||
if (pReadDraw->type == DRAWABLE_WINDOW) {
|
if (pReadDraw->type == DRAWABLE_WINDOW) {
|
||||||
/*
|
/*
|
||||||
** Drawable is an X Window.
|
** Drawable is an X Window.
|
||||||
|
@ -1105,13 +1108,13 @@ static int MakeCurrent(__GLXclientState *cl,
|
||||||
|
|
||||||
if (pDraw && new_reply.writeType != GLX_PBUFFER_TYPE) {
|
if (pDraw && new_reply.writeType != GLX_PBUFFER_TYPE) {
|
||||||
pXinDraw = (PanoramiXRes *)
|
pXinDraw = (PanoramiXRes *)
|
||||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess);
|
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pReadDraw && pReadDraw != pDraw &&
|
if (pReadDraw && pReadDraw != pDraw &&
|
||||||
new_reply.readType != GLX_PBUFFER_TYPE) {
|
new_reply.readType != GLX_PBUFFER_TYPE) {
|
||||||
pXinReadDraw = (PanoramiXRes *)
|
pXinReadDraw = (PanoramiXRes *)
|
||||||
SecurityLookupIDByClass(client, pReadDraw->id, XRC_DRAWABLE, SecurityReadAccess);
|
SecurityLookupIDByClass(client, pReadDraw->id, XRC_DRAWABLE, DixReadAccess);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
pXinReadDraw = pXinDraw;
|
pXinReadDraw = pXinDraw;
|
||||||
|
@ -1137,9 +1140,7 @@ static int MakeCurrent(__GLXclientState *cl,
|
||||||
}
|
}
|
||||||
#ifdef PANORAMIX
|
#ifdef PANORAMIX
|
||||||
else if (pXinDraw) {
|
else if (pXinDraw) {
|
||||||
pWin = (WindowPtr)SecurityLookupWindow(pXinDraw->info[s].id,
|
dixLookupWindow(&pWin, pXinDraw->info[s].id, client, DixReadAccess);
|
||||||
client,
|
|
||||||
SecurityReadAccess);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (pGlxWindow) {
|
else if (pGlxWindow) {
|
||||||
|
@ -1195,9 +1196,8 @@ static int MakeCurrent(__GLXclientState *cl,
|
||||||
}
|
}
|
||||||
#ifdef PANORAMIX
|
#ifdef PANORAMIX
|
||||||
else if (pXinReadDraw) {
|
else if (pXinReadDraw) {
|
||||||
pReadWin = (WindowPtr)SecurityLookupWindow(pXinReadDraw->info[s].id,
|
dixLookupWindow(&pReadWin, pXinReadDraw->info[s].id, client,
|
||||||
client,
|
DixReadAccess);
|
||||||
SecurityReadAccess);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (pGlxReadWindow) {
|
else if (pGlxReadWindow) {
|
||||||
|
@ -1639,18 +1639,16 @@ static int CreateGLXPixmap(__GLXclientState *cl,
|
||||||
__GLXscreenInfo *pGlxScreen;
|
__GLXscreenInfo *pGlxScreen;
|
||||||
__GLXvisualConfig *pGlxVisual;
|
__GLXvisualConfig *pGlxVisual;
|
||||||
__GLXFBConfig *pFBConfig;
|
__GLXFBConfig *pFBConfig;
|
||||||
int i;
|
int i, s, rc;
|
||||||
int s;
|
|
||||||
int from_screen, to_screen;
|
int from_screen, to_screen;
|
||||||
#ifdef PANORAMIX
|
#ifdef PANORAMIX
|
||||||
PanoramiXRes *pXinDraw = NULL;
|
PanoramiXRes *pXinDraw = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pDraw = (DrawablePtr) LookupDrawable(pixmapId, client);
|
rc = dixLookupDrawable(&pDraw, pixmapId, client, M_DRAWABLE_PIXMAP,
|
||||||
if (!pDraw || pDraw->type != DRAWABLE_PIXMAP) {
|
DixUnknownAccess);
|
||||||
client->errorValue = pixmapId;
|
if (rc != Success)
|
||||||
return BadPixmap;
|
return rc;
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Check if screen of visual matches screen of pixmap.
|
** Check if screen of visual matches screen of pixmap.
|
||||||
|
@ -1768,7 +1766,7 @@ static int CreateGLXPixmap(__GLXclientState *cl,
|
||||||
to_screen = screenInfo.numScreens - 1;
|
to_screen = screenInfo.numScreens - 1;
|
||||||
|
|
||||||
pXinDraw = (PanoramiXRes *)
|
pXinDraw = (PanoramiXRes *)
|
||||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess);
|
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1781,7 +1779,8 @@ static int CreateGLXPixmap(__GLXclientState *cl,
|
||||||
|
|
||||||
#ifdef PANORAMIX
|
#ifdef PANORAMIX
|
||||||
if (pXinDraw) {
|
if (pXinDraw) {
|
||||||
pRealDraw = (DrawablePtr) LookupDrawable(pXinDraw->info[s].id,client);
|
dixLookupDrawable(&pRealDraw, pXinDraw->info[s].id, client, 0,
|
||||||
|
DixUnknownAccess);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1947,14 +1946,13 @@ int __glXDoSwapBuffers(__GLXclientState *cl, XID drawId, GLXContextTag tag)
|
||||||
__glXWindow *pGlxWindow = NULL;
|
__glXWindow *pGlxWindow = NULL;
|
||||||
int from_screen = 0;
|
int from_screen = 0;
|
||||||
int to_screen = 0;
|
int to_screen = 0;
|
||||||
int s;
|
int s, rc;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Check that the GLX drawable is valid.
|
** Check that the GLX drawable is valid.
|
||||||
*/
|
*/
|
||||||
pDraw = (DrawablePtr) LookupDrawable(drawId, client);
|
rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
|
||||||
if (pDraw) {
|
if (rc == Success) {
|
||||||
|
|
||||||
from_screen = to_screen = pDraw->pScreen->myNum;
|
from_screen = to_screen = pDraw->pScreen->myNum;
|
||||||
|
|
||||||
if (pDraw->type == DRAWABLE_WINDOW) {
|
if (pDraw->type == DRAWABLE_WINDOW) {
|
||||||
|
@ -2014,7 +2012,7 @@ int __glXDoSwapBuffers(__GLXclientState *cl, XID drawId, GLXContextTag tag)
|
||||||
from_screen = 0;
|
from_screen = 0;
|
||||||
to_screen = screenInfo.numScreens - 1;
|
to_screen = screenInfo.numScreens - 1;
|
||||||
pXinDraw = (PanoramiXRes *)
|
pXinDraw = (PanoramiXRes *)
|
||||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess);
|
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2058,9 +2056,7 @@ int __glXDoSwapBuffers(__GLXclientState *cl, XID drawId, GLXContextTag tag)
|
||||||
}
|
}
|
||||||
#ifdef PANORAMIX
|
#ifdef PANORAMIX
|
||||||
else if (pXinDraw) {
|
else if (pXinDraw) {
|
||||||
pWin = (WindowPtr)SecurityLookupWindow(pXinDraw->info[s].id,
|
dixLookupWindow(&pWin, pXinDraw->info[s].id, client, DixReadAccess);
|
||||||
client,
|
|
||||||
SecurityReadAccess);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (pGlxWindow) {
|
else if (pGlxWindow) {
|
||||||
|
@ -2104,12 +2100,13 @@ int __glXSwapBuffers(__GLXclientState *cl, GLbyte *pc)
|
||||||
__GLXpixmap *pGlxPixmap = NULL;
|
__GLXpixmap *pGlxPixmap = NULL;
|
||||||
__GLXcontext *glxc = NULL;
|
__GLXcontext *glxc = NULL;
|
||||||
__glXWindow *pGlxWindow = NULL;
|
__glXWindow *pGlxWindow = NULL;
|
||||||
|
int rc;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Check that the GLX drawable is valid.
|
** Check that the GLX drawable is valid.
|
||||||
*/
|
*/
|
||||||
pDraw = (DrawablePtr) LookupDrawable(drawId, client);
|
rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
|
||||||
if (pDraw) {
|
if (rc == Success) {
|
||||||
if (pDraw->type != DRAWABLE_WINDOW) {
|
if (pDraw->type != DRAWABLE_WINDOW) {
|
||||||
/*
|
/*
|
||||||
** Drawable is an X pixmap, which is not allowed.
|
** Drawable is an X pixmap, which is not allowed.
|
||||||
|
@ -2897,16 +2894,15 @@ int __glXCreateWindow(__GLXclientState *cl, GLbyte *pc)
|
||||||
__GLXFBConfig *pGlxFBConfig = NULL;
|
__GLXFBConfig *pGlxFBConfig = NULL;
|
||||||
VisualPtr pVisual;
|
VisualPtr pVisual;
|
||||||
VisualID visId;
|
VisualID visId;
|
||||||
int i;
|
int i, rc;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Check if windowId is valid
|
** Check if windowId is valid
|
||||||
*/
|
*/
|
||||||
pDraw = (DrawablePtr) LookupDrawable(windowId, client);
|
rc = dixLookupDrawable(&pDraw, windowId, client, M_DRAWABLE_WINDOW,
|
||||||
if (!pDraw || pDraw->type != DRAWABLE_WINDOW) {
|
DixUnknownAccess);
|
||||||
client->errorValue = windowId;
|
if (rc != Success)
|
||||||
return BadWindow;
|
return rc;
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Check if screen of window matches screen of fbconfig.
|
** Check if screen of window matches screen of fbconfig.
|
||||||
|
@ -3069,7 +3065,7 @@ int __glXQueryContextInfoEXT(__GLXclientState *cl, GLbyte *pc)
|
||||||
int nReplyBytes;
|
int nReplyBytes;
|
||||||
|
|
||||||
req = (xGLXQueryContextInfoEXTReq *)pc;
|
req = (xGLXQueryContextInfoEXTReq *)pc;
|
||||||
ctx = (__GLXcontext *) SecurityLookupIDByType(client, req->context, __glXContextRes, SecurityReadAccess);
|
ctx = (__GLXcontext *) SecurityLookupIDByType(client, req->context, __glXContextRes, DixReadAccess);
|
||||||
if (!ctx) {
|
if (!ctx) {
|
||||||
client->errorValue = req->context;
|
client->errorValue = req->context;
|
||||||
return __glXBadContext;
|
return __glXBadContext;
|
||||||
|
@ -3279,7 +3275,7 @@ int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
|
||||||
GLXDrawable be_drawable = 0;
|
GLXDrawable be_drawable = 0;
|
||||||
DrawablePtr pDraw = NULL;
|
DrawablePtr pDraw = NULL;
|
||||||
Display *dpy;
|
Display *dpy;
|
||||||
int screen;
|
int screen, rc;
|
||||||
DMXScreenInfo *dmxScreen;
|
DMXScreenInfo *dmxScreen;
|
||||||
CARD32 *attribs = NULL;
|
CARD32 *attribs = NULL;
|
||||||
int attribs_size;
|
int attribs_size;
|
||||||
|
@ -3288,8 +3284,8 @@ int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (drawId != None) {
|
if (drawId != None) {
|
||||||
pDraw = (DrawablePtr) LookupDrawable(drawId, client);
|
rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
|
||||||
if (pDraw) {
|
if (rc == Success) {
|
||||||
if (pDraw->type == DRAWABLE_WINDOW) {
|
if (pDraw->type == DRAWABLE_WINDOW) {
|
||||||
WindowPtr pWin = (WindowPtr)pDraw;
|
WindowPtr pWin = (WindowPtr)pDraw;
|
||||||
be_drawable = 0;
|
be_drawable = 0;
|
||||||
|
@ -3353,15 +3349,14 @@ int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
|
||||||
#ifdef PANORAMIX
|
#ifdef PANORAMIX
|
||||||
if (!noPanoramiXExtension) {
|
if (!noPanoramiXExtension) {
|
||||||
pXinDraw = (PanoramiXRes *)
|
pXinDraw = (PanoramiXRes *)
|
||||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess);
|
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
|
||||||
if (!pXinDraw) {
|
if (!pXinDraw) {
|
||||||
client->errorValue = drawId;
|
client->errorValue = drawId;
|
||||||
return __glXBadDrawable;
|
return __glXBadDrawable;
|
||||||
}
|
}
|
||||||
|
|
||||||
pWin = (WindowPtr)SecurityLookupWindow(pXinDraw->info[screen].id,
|
dixLookupWindow(&pWin, pXinDraw->info[screen].id, client,
|
||||||
client,
|
DixReadAccess);
|
||||||
SecurityReadAccess);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -3441,7 +3436,7 @@ int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
|
||||||
GLXDrawable be_drawable = 0;
|
GLXDrawable be_drawable = 0;
|
||||||
DrawablePtr pDraw = NULL;
|
DrawablePtr pDraw = NULL;
|
||||||
Display *dpy;
|
Display *dpy;
|
||||||
int screen;
|
int screen, rc;
|
||||||
DMXScreenInfo *dmxScreen;
|
DMXScreenInfo *dmxScreen;
|
||||||
char *attrbuf;
|
char *attrbuf;
|
||||||
#ifdef PANORAMIX
|
#ifdef PANORAMIX
|
||||||
|
@ -3450,8 +3445,8 @@ int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (drawId != None) {
|
if (drawId != None) {
|
||||||
pDraw = (DrawablePtr) LookupDrawable(drawId, client);
|
rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
|
||||||
if (pDraw) {
|
if (rc == Success) {
|
||||||
if (pDraw->type == DRAWABLE_WINDOW) {
|
if (pDraw->type == DRAWABLE_WINDOW) {
|
||||||
WindowPtr pWin = (WindowPtr)pDraw;
|
WindowPtr pWin = (WindowPtr)pDraw;
|
||||||
be_drawable = 0;
|
be_drawable = 0;
|
||||||
|
@ -3515,15 +3510,14 @@ int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
|
||||||
#ifdef PANORAMIX
|
#ifdef PANORAMIX
|
||||||
if (!noPanoramiXExtension) {
|
if (!noPanoramiXExtension) {
|
||||||
pXinDraw = (PanoramiXRes *)
|
pXinDraw = (PanoramiXRes *)
|
||||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess);
|
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
|
||||||
if (!pXinDraw) {
|
if (!pXinDraw) {
|
||||||
client->errorValue = drawId;
|
client->errorValue = drawId;
|
||||||
return __glXBadDrawable;
|
return __glXBadDrawable;
|
||||||
}
|
}
|
||||||
|
|
||||||
pWin = (WindowPtr)SecurityLookupWindow(pXinDraw->info[screen].id,
|
dixLookupWindow(&pWin, pXinDraw->info[screen].id, client,
|
||||||
client,
|
DixReadAccess);
|
||||||
SecurityReadAccess);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ GLX_DEFS = @GL_CFLAGS@
|
||||||
GLX_INCS = -I@MESA_SOURCE@/include
|
GLX_INCS = -I@MESA_SOURCE@/include
|
||||||
endif
|
endif
|
||||||
|
|
||||||
AM_CFLAGS = \
|
AM_CFLAGS = $(DIX_CFLAGS) \
|
||||||
-I$(top_srcdir)/hw/dmx \
|
-I$(top_srcdir)/hw/dmx \
|
||||||
-I$(top_srcdir)/hw/xfree86/common \
|
-I$(top_srcdir)/hw/xfree86/common \
|
||||||
$(GLX_INCS) \
|
$(GLX_INCS) \
|
||||||
|
|
|
@ -745,14 +745,11 @@ LinuxKeyboardEnable (KdKeyboardInfo *ki)
|
||||||
cfsetispeed(&nTty, 9600);
|
cfsetispeed(&nTty, 9600);
|
||||||
cfsetospeed(&nTty, 9600);
|
cfsetospeed(&nTty, 9600);
|
||||||
tcsetattr(fd, TCSANOW, &nTty);
|
tcsetattr(fd, TCSANOW, &nTty);
|
||||||
/* Our kernel cleverly ignores O_NONBLOCK. Sigh. */
|
|
||||||
#if 0
|
|
||||||
/*
|
/*
|
||||||
* Flush any pending keystrokes
|
* Flush any pending keystrokes
|
||||||
*/
|
*/
|
||||||
while ((n = read (fd, buf, sizeof (buf))) > 0)
|
while ((n = read (fd, buf, sizeof (buf))) > 0)
|
||||||
;
|
;
|
||||||
#endif
|
|
||||||
KdRegisterFd (fd, LinuxKeyboardRead, ki);
|
KdRegisterFd (fd, LinuxKeyboardRead, ki);
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,10 +75,7 @@ TsRead (int fd, void *closure)
|
||||||
|
|
||||||
while (ts_read(private->tsDev, &event, 1) == 1) {
|
while (ts_read(private->tsDev, &event, 1) == 1) {
|
||||||
if (event.pressure) {
|
if (event.pressure) {
|
||||||
if (event.pressure > pi->dixdev->absolute->button_threshold)
|
flags = KD_BUTTON_1;
|
||||||
flags = KD_BUTTON_8;
|
|
||||||
else
|
|
||||||
flags = KD_BUTTON_1;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Here we test for the touch screen driver actually being on the
|
* Here we test for the touch screen driver actually being on the
|
||||||
|
@ -113,9 +110,8 @@ TsRead (int fd, void *closure)
|
||||||
static Status
|
static Status
|
||||||
TslibEnable (KdPointerInfo *pi)
|
TslibEnable (KdPointerInfo *pi)
|
||||||
{
|
{
|
||||||
struct TslibPrivate *private = pi->driverPrivate;
|
struct TslibPrivate *private = pi->driverPrivate;
|
||||||
|
|
||||||
private->holdThumbEvents = 1;
|
|
||||||
private->raw_event_hook = NULL;
|
private->raw_event_hook = NULL;
|
||||||
private->raw_event_closure = NULL;
|
private->raw_event_closure = NULL;
|
||||||
private->tsDev = ts_open(pi->path, 0);
|
private->tsDev = ts_open(pi->path, 0);
|
||||||
|
@ -126,9 +122,6 @@ TslibEnable (KdPointerInfo *pi)
|
||||||
close(private->fd);
|
close(private->fd);
|
||||||
return BadAlloc;
|
return BadAlloc;
|
||||||
}
|
}
|
||||||
if (pi->dixdev && pi->dixdev->absolute &&
|
|
||||||
pi->dixdev->absolute->button_threshold == 0)
|
|
||||||
pi->dixdev->absolute->button_threshold = 115;
|
|
||||||
|
|
||||||
KdRegisterFd(private->fd, TsRead, pi);
|
KdRegisterFd(private->fd, TsRead, pi);
|
||||||
|
|
||||||
|
@ -141,12 +134,12 @@ TslibDisable (KdPointerInfo *pi)
|
||||||
{
|
{
|
||||||
struct TslibPrivate *private = pi->driverPrivate;
|
struct TslibPrivate *private = pi->driverPrivate;
|
||||||
|
|
||||||
if (private->fd) {
|
if (private->fd)
|
||||||
KdUnregisterFd(pi, private->fd);
|
KdUnregisterFd(pi, private->fd, TRUE);
|
||||||
close(private->fd);
|
|
||||||
}
|
|
||||||
if (private->tsDev)
|
if (private->tsDev)
|
||||||
ts_close(private->tsDev);
|
ts_close(private->tsDev);
|
||||||
|
|
||||||
private->fd = 0;
|
private->fd = 0;
|
||||||
private->tsDev = NULL;
|
private->tsDev = NULL;
|
||||||
}
|
}
|
||||||
|
@ -156,7 +149,6 @@ static Status
|
||||||
TslibInit (KdPointerInfo *pi)
|
TslibInit (KdPointerInfo *pi)
|
||||||
{
|
{
|
||||||
int fd = 0, i = 0;
|
int fd = 0, i = 0;
|
||||||
char devpath[PATH_MAX], devname[TS_NAME_SIZE];
|
|
||||||
DIR *inputdir = NULL;
|
DIR *inputdir = NULL;
|
||||||
struct dirent *inputent = NULL;
|
struct dirent *inputent = NULL;
|
||||||
struct tsdev *tsDev = NULL;
|
struct tsdev *tsDev = NULL;
|
||||||
|
|
|
@ -286,10 +286,8 @@ mgaCheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
|
||||||
if (pMaskPicture->componentAlpha)
|
if (pMaskPicture->componentAlpha)
|
||||||
MGA_FALLBACK(("Component alpha unsupported"));
|
MGA_FALLBACK(("Component alpha unsupported"));
|
||||||
|
|
||||||
switch (pDstPicture->format) {
|
if (pDstPicture->format == PICT_a8)
|
||||||
case PICT_a8:
|
|
||||||
MGA_FALLBACK(("render to A8 unsupported"));
|
MGA_FALLBACK(("render to A8 unsupported"));
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,8 +21,9 @@ Xvfb_LDFLAGS =
|
||||||
AM_CFLAGS = -DHAVE_DIX_CONFIG_H \
|
AM_CFLAGS = -DHAVE_DIX_CONFIG_H \
|
||||||
-DNO_HW_ONLY_EXTS \
|
-DNO_HW_ONLY_EXTS \
|
||||||
-DNO_MODULE_EXTS \
|
-DNO_MODULE_EXTS \
|
||||||
\
|
-DXFree86Server \
|
||||||
$(XVFBMODULES_CFLAGS)
|
$(XVFBMODULES_CFLAGS) \
|
||||||
|
$(DIX_CFLAGS)
|
||||||
|
|
||||||
# Man page
|
# Man page
|
||||||
include $(top_srcdir)/cpprules.in
|
include $(top_srcdir)/cpprules.in
|
||||||
|
|
|
@ -22,7 +22,7 @@ DIST_SUBDIRS = common ddc dummylib i2c x86emu int10 fbdevhw os-support \
|
||||||
|
|
||||||
bin_PROGRAMS = Xorg
|
bin_PROGRAMS = Xorg
|
||||||
|
|
||||||
AM_CFLAGS = @XORG_CFLAGS@
|
AM_CFLAGS = $(DIX_CFLAGS) @XORG_CFLAGS@
|
||||||
INCLUDES = @XORG_INCS@
|
INCLUDES = @XORG_INCS@
|
||||||
|
|
||||||
Xorg_SOURCES = xorg.c
|
Xorg_SOURCES = xorg.c
|
||||||
|
@ -93,7 +93,6 @@ CPP_FILES_FLAGS = \
|
||||||
-DMISCFONTPATH="\"$(BASE_FONT_PATH)/misc\"" \
|
-DMISCFONTPATH="\"$(BASE_FONT_PATH)/misc\"" \
|
||||||
-DT1FONTPATH="\"$(BASE_FONT_PATH)/Type1\"" \
|
-DT1FONTPATH="\"$(BASE_FONT_PATH)/Type1\"" \
|
||||||
-DTRUETYPEFONTPATH="\"$(BASE_FONT_PATH)/TTF\"" \
|
-DTRUETYPEFONTPATH="\"$(BASE_FONT_PATH)/TTF\"" \
|
||||||
-DCIDFONTPATH="\"$(BASE_FONT_PATH)/CID\"" \
|
|
||||||
-DDPI75FONTPATH="\"$(BASE_FONT_PATH)/75dpi\"" \
|
-DDPI75FONTPATH="\"$(BASE_FONT_PATH)/75dpi\"" \
|
||||||
-DDPI100FONTPATH="\"$(BASE_FONT_PATH)/100dpi\"" \
|
-DDPI100FONTPATH="\"$(BASE_FONT_PATH)/100dpi\"" \
|
||||||
-DMODULEPATH=\"$(DEFAULT_MODULE_PATH)\"
|
-DMODULEPATH=\"$(DEFAULT_MODULE_PATH)\"
|
||||||
|
|
|
@ -94,4 +94,4 @@ if LNXACPI
|
||||||
XORG_CFLAGS += -DHAVE_ACPI
|
XORG_CFLAGS += -DHAVE_ACPI
|
||||||
endif
|
endif
|
||||||
|
|
||||||
AM_CFLAGS = $(XORG_CFLAGS)
|
AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
|
||||||
|
|
|
@ -118,7 +118,7 @@ extern int ffs(unsigned long);
|
||||||
# if defined(NO_INLINE) || defined(DO_PROTOTYPES)
|
# if defined(NO_INLINE) || defined(DO_PROTOTYPES)
|
||||||
|
|
||||||
# if !defined(__arm__)
|
# if !defined(__arm__)
|
||||||
# if !defined(__sparc__) && !defined(__arm32__) \
|
# if !defined(__sparc__) && !defined(__sparc) && !defined(__arm32__) \
|
||||||
&& !(defined(__alpha__) && defined(linux)) \
|
&& !(defined(__alpha__) && defined(linux)) \
|
||||||
&& !(defined(__ia64__) && defined(linux)) \
|
&& !(defined(__ia64__) && defined(linux)) \
|
||||||
|
|
||||||
|
@ -1697,7 +1697,7 @@ static __inline__ void ppc_flush_icache(char *addr)
|
||||||
: : "r"(addr) : "memory");
|
: : "r"(addr) : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
# elif defined(__sparc__) || defined(sparc)
|
# elif defined(__sparc__) || defined(sparc) || defined(__sparc)
|
||||||
/*
|
/*
|
||||||
* Like powerpc, we provide byteswapping and no byteswapping functions
|
* Like powerpc, we provide byteswapping and no byteswapping functions
|
||||||
* here with byteswapping as default, drivers that don't need byteswapping
|
* here with byteswapping as default, drivers that don't need byteswapping
|
||||||
|
|
|
@ -64,7 +64,7 @@ extern ScrnInfoPtr xf86CurrentScreen;
|
||||||
extern Bool pciSlotClaimed;
|
extern Bool pciSlotClaimed;
|
||||||
extern Bool isaSlotClaimed;
|
extern Bool isaSlotClaimed;
|
||||||
extern Bool fbSlotClaimed;
|
extern Bool fbSlotClaimed;
|
||||||
#ifdef __sparc__
|
#if defined(__sparc__) || defined(__sparc)
|
||||||
extern Bool sbusSlotClaimed;
|
extern Bool sbusSlotClaimed;
|
||||||
#endif
|
#endif
|
||||||
extern confDRIRec xf86ConfigDRI;
|
extern confDRIRec xf86ConfigDRI;
|
||||||
|
@ -418,6 +418,15 @@ void xf86PruneDriverModes(ScrnInfoPtr scrp);
|
||||||
void xf86SetCrtcForModes(ScrnInfoPtr scrp, int adjustFlags);
|
void xf86SetCrtcForModes(ScrnInfoPtr scrp, int adjustFlags);
|
||||||
void xf86PrintModes(ScrnInfoPtr scrp);
|
void xf86PrintModes(ScrnInfoPtr scrp);
|
||||||
void xf86ShowClockRanges(ScrnInfoPtr scrp, ClockRangePtr clockRanges);
|
void xf86ShowClockRanges(ScrnInfoPtr scrp, ClockRangePtr clockRanges);
|
||||||
|
double xf86ModeHSync(DisplayModePtr mode);
|
||||||
|
double xf86ModeVRefresh(DisplayModePtr mode);
|
||||||
|
void xf86SetModeDefaultName(DisplayModePtr mode);
|
||||||
|
void xf86SetModeCrtc(DisplayModePtr p, int adjustFlags);
|
||||||
|
DisplayModePtr xf86DuplicateMode(DisplayModePtr pMode);
|
||||||
|
DisplayModePtr xf86DuplicateModes(ScrnInfoPtr pScrn, DisplayModePtr modeList);
|
||||||
|
Bool xf86ModesEqual(DisplayModePtr pMode1, DisplayModePtr pMode2);
|
||||||
|
void xf86PrintModeline(int scrnIndex,DisplayModePtr mode);
|
||||||
|
DisplayModePtr xf86ModesAdd(DisplayModePtr modes, DisplayModePtr new);
|
||||||
|
|
||||||
/* xf86Option.c */
|
/* xf86Option.c */
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ void
|
||||||
xf86BusProbe(void)
|
xf86BusProbe(void)
|
||||||
{
|
{
|
||||||
xf86PciProbe();
|
xf86PciProbe();
|
||||||
#if defined(__sparc__) && !defined(__OpenBSD__)
|
#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
|
||||||
xf86SbusProbe();
|
xf86SbusProbe();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -2373,7 +2373,7 @@ xf86PostProbe(void)
|
||||||
|
|
||||||
if (fbSlotClaimed) {
|
if (fbSlotClaimed) {
|
||||||
if (pciSlotClaimed || isaSlotClaimed
|
if (pciSlotClaimed || isaSlotClaimed
|
||||||
#if defined(__sparc__) && !defined(__OpenBSD__)
|
#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
|
||||||
|| sbusSlotClaimed
|
|| sbusSlotClaimed
|
||||||
#endif
|
#endif
|
||||||
) {
|
) {
|
||||||
|
@ -3006,7 +3006,7 @@ xf86FindPrimaryDevice()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(__sparc__) && !defined(__powerpc__) && !defined(__mips__)
|
#if !defined(__sparc) && !defined(__sparc__) && !defined(__powerpc__) && !defined(__mips__)
|
||||||
#include "vgaHW.h"
|
#include "vgaHW.h"
|
||||||
#include "compiler.h"
|
#include "compiler.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -3018,7 +3018,7 @@ static void
|
||||||
CheckGenericGA()
|
CheckGenericGA()
|
||||||
{
|
{
|
||||||
/* This needs to be changed for multiple domains */
|
/* This needs to be changed for multiple domains */
|
||||||
#if !defined(__sparc__) && !defined(__powerpc__) && !defined(__mips__) && !defined(__ia64__) && !defined(__arm__) && !defined(__s390__)
|
#if !defined(__sparc__) && !defined(__sparc) && !defined(__powerpc__) && !defined(__mips__) && !defined(__ia64__) && !defined(__arm__) && !defined(__s390__)
|
||||||
IOADDRESS GenericIOBase = VGAHW_GET_IOBASE();
|
IOADDRESS GenericIOBase = VGAHW_GET_IOBASE();
|
||||||
CARD8 CurrentValue, TestValue;
|
CARD8 CurrentValue, TestValue;
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
#define _XF86_BUS_H
|
#define _XF86_BUS_H
|
||||||
|
|
||||||
#include "xf86pciBus.h"
|
#include "xf86pciBus.h"
|
||||||
#ifdef __sparc__
|
#if defined(__sparc__) || defined(__sparc)
|
||||||
#include "xf86sbusBus.h"
|
#include "xf86sbusBus.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
#include "Configint.h"
|
#include "Configint.h"
|
||||||
#include "vbe.h"
|
#include "vbe.h"
|
||||||
#include "xf86DDC.h"
|
#include "xf86DDC.h"
|
||||||
#if defined(__sparc__) && !defined(__OpenBSD__)
|
#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
|
||||||
#include "xf86Bus.h"
|
#include "xf86Bus.h"
|
||||||
#include "xf86Sbus.h"
|
#include "xf86Sbus.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -57,7 +57,7 @@
|
||||||
typedef struct _DevToConfig {
|
typedef struct _DevToConfig {
|
||||||
GDevRec GDev;
|
GDevRec GDev;
|
||||||
pciVideoPtr pVideo;
|
pciVideoPtr pVideo;
|
||||||
#if defined(__sparc__) && !defined(__OpenBSD__)
|
#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
|
||||||
sbusDevicePtr sVideo;
|
sbusDevicePtr sVideo;
|
||||||
#endif
|
#endif
|
||||||
int iDriver;
|
int iDriver;
|
||||||
|
@ -134,7 +134,7 @@ xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int
|
||||||
if (!DevToConfig[i].pVideo)
|
if (!DevToConfig[i].pVideo)
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
#if defined(__sparc__) && !defined(__OpenBSD__)
|
#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
|
||||||
case BUS_SBUS:
|
case BUS_SBUS:
|
||||||
for (i = 0; i < nDevToConfig; i++)
|
for (i = 0; i < nDevToConfig; i++)
|
||||||
if (DevToConfig[i].sVideo &&
|
if (DevToConfig[i].sVideo &&
|
||||||
|
@ -213,7 +213,7 @@ xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int
|
||||||
NewDevice.GDev.identifier = "ISA Adapter";
|
NewDevice.GDev.identifier = "ISA Adapter";
|
||||||
NewDevice.GDev.busID = "ISA";
|
NewDevice.GDev.busID = "ISA";
|
||||||
break;
|
break;
|
||||||
#if defined(__sparc__) && !defined(__OpenBSD__)
|
#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
|
||||||
case BUS_SBUS: {
|
case BUS_SBUS: {
|
||||||
char *promPath = NULL;
|
char *promPath = NULL;
|
||||||
NewDevice.sVideo = (sbusDevicePtr) busData;
|
NewDevice.sVideo = (sbusDevicePtr) busData;
|
||||||
|
|
|
@ -789,8 +789,6 @@ xf86ReleaseKeys(DeviceIntPtr pDev)
|
||||||
xEvent ke;
|
xEvent ke;
|
||||||
int i = 0, j = 0, nevents = 0;
|
int i = 0, j = 0, nevents = 0;
|
||||||
|
|
||||||
ErrorF("releasekeys: called on device %s (%d)\n", pDev->name, pDev->id);
|
|
||||||
|
|
||||||
if (!pDev || !pDev->key)
|
if (!pDev || !pDev->key)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -100,6 +100,8 @@
|
||||||
|
|
||||||
static void xf86PrintBanner(void);
|
static void xf86PrintBanner(void);
|
||||||
static void xf86PrintMarkers(void);
|
static void xf86PrintMarkers(void);
|
||||||
|
static void xf86PrintDefaultModulePath(void);
|
||||||
|
static void xf86PrintDefaultLibraryPath(void);
|
||||||
static void xf86RunVtInit(void);
|
static void xf86RunVtInit(void);
|
||||||
|
|
||||||
#ifdef __UNIXOS2__
|
#ifdef __UNIXOS2__
|
||||||
|
@ -1376,6 +1378,16 @@ ddxProcessArgument(int argc, char **argv, int i)
|
||||||
xf86PrintBanner();
|
xf86PrintBanner();
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
if (!strcmp(argv[i],"-showDefaultModulePath"))
|
||||||
|
{
|
||||||
|
xf86PrintDefaultModulePath();
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
if (!strcmp(argv[i],"-showDefaultLibPath"))
|
||||||
|
{
|
||||||
|
xf86PrintDefaultLibraryPath();
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
/* Notice the -fp flag, but allow it to pass to the dix layer */
|
/* Notice the -fp flag, but allow it to pass to the dix layer */
|
||||||
if (!strcmp(argv[i], "-fp"))
|
if (!strcmp(argv[i], "-fp"))
|
||||||
{
|
{
|
||||||
|
@ -1625,6 +1637,8 @@ ddxUseMsg()
|
||||||
ErrorF("-ignoreABI make module ABI mismatches non-fatal\n");
|
ErrorF("-ignoreABI make module ABI mismatches non-fatal\n");
|
||||||
ErrorF("-isolateDevice bus_id restrict device resets to bus_id (PCI only)\n");
|
ErrorF("-isolateDevice bus_id restrict device resets to bus_id (PCI only)\n");
|
||||||
ErrorF("-version show the server version\n");
|
ErrorF("-version show the server version\n");
|
||||||
|
ErrorF("-showDefaultModulePath show the server default module path\n");
|
||||||
|
ErrorF("-showDefaultLibPath show the server default library path\n");
|
||||||
/* OS-specific usage */
|
/* OS-specific usage */
|
||||||
xf86UseMsg();
|
xf86UseMsg();
|
||||||
ErrorF("\n");
|
ErrorF("\n");
|
||||||
|
@ -1747,6 +1761,18 @@ xf86PrintMarkers()
|
||||||
LogPrintMarkers();
|
LogPrintMarkers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xf86PrintDefaultModulePath(void)
|
||||||
|
{
|
||||||
|
ErrorF("%s\n", DEFAULT_MODULE_PATH);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xf86PrintDefaultLibraryPath(void)
|
||||||
|
{
|
||||||
|
ErrorF("%s\n", DEFAULT_LIBRARY_PATH);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
xf86RunVtInit(void)
|
xf86RunVtInit(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -368,8 +368,9 @@ xf86HandleBuiltinMode(ScrnInfoPtr scrp,
|
||||||
return MODE_OK;
|
return MODE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static double
|
/** Calculates the horizontal sync rate of a mode */
|
||||||
ModeHSync(DisplayModePtr mode)
|
_X_EXPORT double
|
||||||
|
xf86ModeHSync(DisplayModePtr mode)
|
||||||
{
|
{
|
||||||
double hsync = 0.0;
|
double hsync = 0.0;
|
||||||
|
|
||||||
|
@ -381,8 +382,9 @@ ModeHSync(DisplayModePtr mode)
|
||||||
return hsync;
|
return hsync;
|
||||||
}
|
}
|
||||||
|
|
||||||
static double
|
/** Calculates the vertical refresh rate of a mode */
|
||||||
ModeVRefresh(DisplayModePtr mode)
|
_X_EXPORT double
|
||||||
|
xf86ModeVRefresh(DisplayModePtr mode)
|
||||||
{
|
{
|
||||||
double refresh = 0.0;
|
double refresh = 0.0;
|
||||||
|
|
||||||
|
@ -400,6 +402,16 @@ ModeVRefresh(DisplayModePtr mode)
|
||||||
return refresh;
|
return refresh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Sets a default mode name of <width>x<height> on a mode. */
|
||||||
|
_X_EXPORT void
|
||||||
|
xf86SetModeDefaultName(DisplayModePtr mode)
|
||||||
|
{
|
||||||
|
if (mode->name != NULL)
|
||||||
|
xfree(mode->name);
|
||||||
|
|
||||||
|
mode->name = XNFprintf("%dx%d", mode->HDisplay, mode->VDisplay);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* xf86LookupMode
|
* xf86LookupMode
|
||||||
*
|
*
|
||||||
|
@ -529,7 +541,7 @@ xf86LookupMode(ScrnInfoPtr scrp, DisplayModePtr modep,
|
||||||
ModePrivFlags = cp->PrivFlags;
|
ModePrivFlags = cp->PrivFlags;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
refresh = ModeVRefresh(p);
|
refresh = xf86ModeVRefresh(p);
|
||||||
if (p->Flags & V_INTERLACE)
|
if (p->Flags & V_INTERLACE)
|
||||||
refresh /= INTERLACE_REFRESH_WEIGHT;
|
refresh /= INTERLACE_REFRESH_WEIGHT;
|
||||||
if (refresh > bestRefresh) {
|
if (refresh > bestRefresh) {
|
||||||
|
@ -570,7 +582,7 @@ xf86LookupMode(ScrnInfoPtr scrp, DisplayModePtr modep,
|
||||||
found = TRUE;
|
found = TRUE;
|
||||||
|
|
||||||
if (strategy == LOOKUP_BEST_REFRESH) {
|
if (strategy == LOOKUP_BEST_REFRESH) {
|
||||||
refresh = ModeVRefresh(p);
|
refresh = xf86ModeVRefresh(p);
|
||||||
if (p->Flags & V_INTERLACE)
|
if (p->Flags & V_INTERLACE)
|
||||||
refresh /= INTERLACE_REFRESH_WEIGHT;
|
refresh /= INTERLACE_REFRESH_WEIGHT;
|
||||||
if (refresh > bestRefresh) {
|
if (refresh > bestRefresh) {
|
||||||
|
@ -674,7 +686,7 @@ xf86LookupMode(ScrnInfoPtr scrp, DisplayModePtr modep,
|
||||||
* Initialises the Crtc parameters for a mode. The initialisation includes
|
* Initialises the Crtc parameters for a mode. The initialisation includes
|
||||||
* adjustments for interlaced and double scan modes.
|
* adjustments for interlaced and double scan modes.
|
||||||
*/
|
*/
|
||||||
static void
|
_X_EXPORT void
|
||||||
xf86SetModeCrtc(DisplayModePtr p, int adjustFlags)
|
xf86SetModeCrtc(DisplayModePtr p, int adjustFlags)
|
||||||
{
|
{
|
||||||
if ((p == NULL) || ((p->type & M_T_CRTC_C) == M_T_BUILTIN))
|
if ((p == NULL) || ((p->type & M_T_CRTC_C) == M_T_BUILTIN))
|
||||||
|
@ -756,6 +768,87 @@ xf86SetModeCrtc(DisplayModePtr p, int adjustFlags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocates and returns a copy of pMode, including pointers within pMode.
|
||||||
|
*/
|
||||||
|
_X_EXPORT DisplayModePtr
|
||||||
|
xf86DuplicateMode(DisplayModePtr pMode)
|
||||||
|
{
|
||||||
|
DisplayModePtr pNew;
|
||||||
|
|
||||||
|
pNew = xnfalloc(sizeof(DisplayModeRec));
|
||||||
|
*pNew = *pMode;
|
||||||
|
pNew->next = NULL;
|
||||||
|
pNew->prev = NULL;
|
||||||
|
if (pNew->name == NULL) {
|
||||||
|
xf86SetModeDefaultName(pMode);
|
||||||
|
} else {
|
||||||
|
pNew->name = xnfstrdup(pMode->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pNew;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Duplicates every mode in the given list and returns a pointer to the first
|
||||||
|
* mode.
|
||||||
|
*
|
||||||
|
* \param modeList doubly-linked mode list
|
||||||
|
*/
|
||||||
|
_X_EXPORT DisplayModePtr
|
||||||
|
xf86DuplicateModes(ScrnInfoPtr pScrn, DisplayModePtr modeList)
|
||||||
|
{
|
||||||
|
DisplayModePtr first = NULL, last = NULL;
|
||||||
|
DisplayModePtr mode;
|
||||||
|
|
||||||
|
for (mode = modeList; mode != NULL; mode = mode->next) {
|
||||||
|
DisplayModePtr new;
|
||||||
|
|
||||||
|
new = xf86DuplicateMode(mode);
|
||||||
|
|
||||||
|
/* Insert pNew into modeList */
|
||||||
|
if (last) {
|
||||||
|
last->next = new;
|
||||||
|
new->prev = last;
|
||||||
|
} else {
|
||||||
|
first = new;
|
||||||
|
new->prev = NULL;
|
||||||
|
}
|
||||||
|
new->next = NULL;
|
||||||
|
last = new;
|
||||||
|
}
|
||||||
|
|
||||||
|
return first;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the given modes should program to the same timings.
|
||||||
|
*
|
||||||
|
* This doesn't use Crtc values, as it might be used on ModeRecs without the
|
||||||
|
* Crtc values set. So, it's assumed that the other numbers are enough.
|
||||||
|
*/
|
||||||
|
_X_EXPORT Bool
|
||||||
|
xf86ModesEqual(DisplayModePtr pMode1, DisplayModePtr pMode2)
|
||||||
|
{
|
||||||
|
if (pMode1->Clock == pMode2->Clock &&
|
||||||
|
pMode1->HDisplay == pMode2->HDisplay &&
|
||||||
|
pMode1->HSyncStart == pMode2->HSyncStart &&
|
||||||
|
pMode1->HSyncEnd == pMode2->HSyncEnd &&
|
||||||
|
pMode1->HTotal == pMode2->HTotal &&
|
||||||
|
pMode1->HSkew == pMode2->HSkew &&
|
||||||
|
pMode1->VDisplay == pMode2->VDisplay &&
|
||||||
|
pMode1->VSyncStart == pMode2->VSyncStart &&
|
||||||
|
pMode1->VSyncEnd == pMode2->VSyncEnd &&
|
||||||
|
pMode1->VTotal == pMode2->VTotal &&
|
||||||
|
pMode1->VScan == pMode2->VScan &&
|
||||||
|
pMode1->Flags == pMode2->Flags)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
} else {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* xf86CheckModeForMonitor
|
* xf86CheckModeForMonitor
|
||||||
*
|
*
|
||||||
|
@ -789,7 +882,7 @@ xf86CheckModeForMonitor(DisplayModePtr mode, MonPtr monitor)
|
||||||
|
|
||||||
if (monitor->nHsync > 0) {
|
if (monitor->nHsync > 0) {
|
||||||
/* Check hsync against the allowed ranges */
|
/* Check hsync against the allowed ranges */
|
||||||
float hsync = ModeHSync(mode);
|
float hsync = xf86ModeHSync(mode);
|
||||||
for (i = 0; i < monitor->nHsync; i++)
|
for (i = 0; i < monitor->nHsync; i++)
|
||||||
if ((hsync > monitor->hsync[i].lo * (1.0 - SYNC_TOLERANCE)) &&
|
if ((hsync > monitor->hsync[i].lo * (1.0 - SYNC_TOLERANCE)) &&
|
||||||
(hsync < monitor->hsync[i].hi * (1.0 + SYNC_TOLERANCE)))
|
(hsync < monitor->hsync[i].hi * (1.0 + SYNC_TOLERANCE)))
|
||||||
|
@ -802,7 +895,7 @@ xf86CheckModeForMonitor(DisplayModePtr mode, MonPtr monitor)
|
||||||
|
|
||||||
if (monitor->nVrefresh > 0) {
|
if (monitor->nVrefresh > 0) {
|
||||||
/* Check vrefresh against the allowed ranges */
|
/* Check vrefresh against the allowed ranges */
|
||||||
float vrefrsh = ModeVRefresh(mode);
|
float vrefrsh = xf86ModeVRefresh(mode);
|
||||||
for (i = 0; i < monitor->nVrefresh; i++)
|
for (i = 0; i < monitor->nVrefresh; i++)
|
||||||
if ((vrefrsh > monitor->vrefresh[i].lo * (1.0 - SYNC_TOLERANCE)) &&
|
if ((vrefrsh > monitor->vrefresh[i].lo * (1.0 - SYNC_TOLERANCE)) &&
|
||||||
(vrefrsh < monitor->vrefresh[i].hi * (1.0 + SYNC_TOLERANCE)))
|
(vrefrsh < monitor->vrefresh[i].hi * (1.0 + SYNC_TOLERANCE)))
|
||||||
|
@ -1033,8 +1126,8 @@ xf86InitialCheckModeForDriver(ScrnInfoPtr scrp, DisplayModePtr mode,
|
||||||
/ (mode->CrtcHTotal * mode->CrtcVTotal);
|
/ (mode->CrtcHTotal * mode->CrtcVTotal);
|
||||||
}
|
}
|
||||||
|
|
||||||
mode->HSync = ModeHSync(mode);
|
mode->HSync = xf86ModeHSync(mode);
|
||||||
mode->VRefresh = ModeVRefresh(mode);
|
mode->VRefresh = xf86ModeVRefresh(mode);
|
||||||
|
|
||||||
/* Assume it is OK */
|
/* Assume it is OK */
|
||||||
return MODE_OK;
|
return MODE_OK;
|
||||||
|
@ -1572,7 +1665,7 @@ xf86ValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes,
|
||||||
"TargetRefresh", 0.0);
|
"TargetRefresh", 0.0);
|
||||||
if (targetRefresh > 0.0) {
|
if (targetRefresh > 0.0) {
|
||||||
for (p = scrp->modePool; p != NULL; p = p->next) {
|
for (p = scrp->modePool; p != NULL; p = p->next) {
|
||||||
if (ModeVRefresh(p) > targetRefresh * (1.0 - SYNC_TOLERANCE))
|
if (xf86ModeVRefresh(p) > targetRefresh * (1.0 - SYNC_TOLERANCE))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!p)
|
if (!p)
|
||||||
|
@ -1661,7 +1754,7 @@ xf86ValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes,
|
||||||
* If there is a target refresh rate, skip modes that
|
* If there is a target refresh rate, skip modes that
|
||||||
* don't match up.
|
* don't match up.
|
||||||
*/
|
*/
|
||||||
if (ModeVRefresh(q) <
|
if (xf86ModeVRefresh(q) <
|
||||||
(1.0 - SYNC_TOLERANCE) * targetRefresh)
|
(1.0 - SYNC_TOLERANCE) * targetRefresh)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1981,8 +2074,8 @@ add(char **p, char *new)
|
||||||
strcat(*p, new);
|
strcat(*p, new);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
_X_EXPORT void
|
||||||
PrintModeline(int scrnIndex,DisplayModePtr mode)
|
xf86PrintModeline(int scrnIndex,DisplayModePtr mode)
|
||||||
{
|
{
|
||||||
char tmp[256];
|
char tmp[256];
|
||||||
char *flags = xnfcalloc(1, 1);
|
char *flags = xnfcalloc(1, 1);
|
||||||
|
@ -2037,8 +2130,8 @@ xf86PrintModes(ScrnInfoPtr scrp)
|
||||||
|
|
||||||
do {
|
do {
|
||||||
desc = desc2 = "";
|
desc = desc2 = "";
|
||||||
hsync = ModeHSync(p);
|
hsync = xf86ModeHSync(p);
|
||||||
refresh = ModeVRefresh(p);
|
refresh = xf86ModeVRefresh(p);
|
||||||
if (p->Flags & V_INTERLACE) {
|
if (p->Flags & V_INTERLACE) {
|
||||||
desc = " (I)";
|
desc = " (I)";
|
||||||
}
|
}
|
||||||
|
@ -2081,7 +2174,31 @@ xf86PrintModes(ScrnInfoPtr scrp)
|
||||||
p->SynthClock / 1000.0, hsync, refresh, desc, desc2);
|
p->SynthClock / 1000.0, hsync, refresh, desc, desc2);
|
||||||
}
|
}
|
||||||
if (hsync != 0 && refresh != 0)
|
if (hsync != 0 && refresh != 0)
|
||||||
PrintModeline(scrp->scrnIndex,p);
|
xf86PrintModeline(scrp->scrnIndex,p);
|
||||||
p = p->next;
|
p = p->next;
|
||||||
} while (p != NULL && p != scrp->modes);
|
} while (p != NULL && p != scrp->modes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the new mode into the mode list, and returns the new list
|
||||||
|
*
|
||||||
|
* \param modes doubly-linked mode list.
|
||||||
|
*/
|
||||||
|
_X_EXPORT DisplayModePtr
|
||||||
|
xf86ModesAdd(DisplayModePtr modes, DisplayModePtr new)
|
||||||
|
{
|
||||||
|
if (modes == NULL)
|
||||||
|
return new;
|
||||||
|
|
||||||
|
if (new) {
|
||||||
|
DisplayModePtr mode = modes;
|
||||||
|
|
||||||
|
while (mode->next)
|
||||||
|
mode = mode->next;
|
||||||
|
|
||||||
|
mode->next = new;
|
||||||
|
new->prev = mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
return modes;
|
||||||
|
}
|
||||||
|
|
|
@ -90,16 +90,6 @@
|
||||||
|
|
||||||
#include "mi.h"
|
#include "mi.h"
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* debugging macro
|
|
||||||
*****************************************************************************/
|
|
||||||
#ifdef DEBUG
|
|
||||||
static int debug_level = 0;
|
|
||||||
#define DBG(lvl, f) {if ((lvl) <= debug_level) f;}
|
|
||||||
#else
|
|
||||||
#define DBG(lvl, f)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
xEvent *xf86Events = NULL;
|
xEvent *xf86Events = NULL;
|
||||||
|
|
||||||
static Bool
|
static Bool
|
||||||
|
@ -140,33 +130,6 @@ xf86ProcessCommonOptions(LocalDevicePtr local,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
xf86AlwaysCoreControl(DeviceIntPtr pDev, IntegerCtrl *control)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
*
|
|
||||||
* xf86XinputFinalizeInit --
|
|
||||||
*
|
|
||||||
* Create and initialize an integer feedback to control the always
|
|
||||||
* core feature.
|
|
||||||
*
|
|
||||||
***********************************************************************
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
xf86XinputFinalizeInit(DeviceIntPtr dev)
|
|
||||||
{
|
|
||||||
LocalDevicePtr local = (LocalDevicePtr)dev->public.devicePrivate;
|
|
||||||
|
|
||||||
if (InitIntegerFeedbackClassDeviceStruct(dev, xf86AlwaysCoreControl) == FALSE) {
|
|
||||||
ErrorF("Unable to init integer feedback for always core feature\n");
|
|
||||||
} else {
|
|
||||||
local->always_core_feedback = dev->intfeed;
|
|
||||||
dev->intfeed->ctrl.integer_displayed = (local->flags & XI86_ALWAYS_CORE) ? 1 : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
*
|
*
|
||||||
* xf86ActivateDevice --
|
* xf86ActivateDevice --
|
||||||
|
@ -193,8 +156,6 @@ xf86ActivateDevice(LocalDevicePtr local)
|
||||||
dev->public.devicePrivate = (pointer) local;
|
dev->public.devicePrivate = (pointer) local;
|
||||||
local->dev = dev;
|
local->dev = dev;
|
||||||
|
|
||||||
xf86XinputFinalizeInit(dev);
|
|
||||||
|
|
||||||
dev->coreEvents = local->flags & XI86_ALWAYS_CORE;
|
dev->coreEvents = local->flags & XI86_ALWAYS_CORE;
|
||||||
RegisterOtherDevice(dev);
|
RegisterOtherDevice(dev);
|
||||||
|
|
||||||
|
@ -434,8 +395,10 @@ xf86PostMotionEvent(DeviceIntPtr device,
|
||||||
{
|
{
|
||||||
va_list var;
|
va_list var;
|
||||||
int i = 0, nevents = 0;
|
int i = 0, nevents = 0;
|
||||||
|
Bool drag = xf86SendDragEvents(device);
|
||||||
int *valuators = NULL;
|
int *valuators = NULL;
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
|
xEvent *xE = NULL;
|
||||||
|
|
||||||
if (is_absolute)
|
if (is_absolute)
|
||||||
flags = POINTER_ABSOLUTE;
|
flags = POINTER_ABSOLUTE;
|
||||||
|
@ -458,8 +421,14 @@ xf86PostMotionEvent(DeviceIntPtr device,
|
||||||
flags, first_valuator, num_valuators,
|
flags, first_valuator, num_valuators,
|
||||||
valuators);
|
valuators);
|
||||||
|
|
||||||
for (i = 0; i < nevents; i++)
|
for (i = 0; i < nevents; i++) {
|
||||||
mieqEnqueue(device, xf86Events + i);
|
xE = xf86Events + i;
|
||||||
|
/* Don't post core motion events for devices not registered to send
|
||||||
|
* drag events. */
|
||||||
|
if (xE->u.u.type != MotionNotify || drag) {
|
||||||
|
mieqEnqueue(device, xf86Events + i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
xfree(valuators);
|
xfree(valuators);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,10 +4,11 @@ module_LTLIBRARIES = libddc.la
|
||||||
|
|
||||||
libddc_la_LDFLAGS = -avoid-version
|
libddc_la_LDFLAGS = -avoid-version
|
||||||
libddc_la_SOURCES = xf86DDC.c edid.c interpret_edid.c print_edid.c \
|
libddc_la_SOURCES = xf86DDC.c edid.c interpret_edid.c print_edid.c \
|
||||||
interpret_vdif.c print_vdif.c ddcProperty.c
|
interpret_vdif.c print_vdif.c ddcProperty.c \
|
||||||
|
edid_modes.c
|
||||||
|
|
||||||
INCLUDES = $(XORG_INCS) -I$(srcdir)/../i2c
|
INCLUDES = $(XORG_INCS) -I$(srcdir)/../i2c
|
||||||
|
|
||||||
AM_CFLAGS = $(XORG_CFLAGS)
|
AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
|
||||||
|
|
||||||
EXTRA_DIST = ddcPriv.h DDC.HOWTO
|
EXTRA_DIST = ddcPriv.h DDC.HOWTO
|
||||||
|
|
|
@ -32,392 +32,6 @@
|
||||||
#include "propertyst.h"
|
#include "propertyst.h"
|
||||||
#include "xf86DDC.h"
|
#include "xf86DDC.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* xf86Mode.c should have a some more DisplayModePtr list handling.
|
|
||||||
*/
|
|
||||||
static DisplayModePtr
|
|
||||||
xf86ModesAdd(DisplayModePtr Modes, DisplayModePtr Additions)
|
|
||||||
{
|
|
||||||
if (!Modes) {
|
|
||||||
if (Additions)
|
|
||||||
return Additions;
|
|
||||||
else
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Additions) {
|
|
||||||
DisplayModePtr Mode = Modes;
|
|
||||||
|
|
||||||
while (Mode->next)
|
|
||||||
Mode = Mode->next;
|
|
||||||
|
|
||||||
Mode->next = Additions;
|
|
||||||
Additions->prev = Mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Modes;
|
|
||||||
}
|
|
||||||
|
|
||||||
static DisplayModePtr
|
|
||||||
xf86ModeCopy(DisplayModePtr Mode)
|
|
||||||
{
|
|
||||||
DisplayModePtr New;
|
|
||||||
|
|
||||||
if (!Mode)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
New = xnfalloc(sizeof(DisplayModeRec));
|
|
||||||
|
|
||||||
memcpy(New, Mode, sizeof(DisplayModeRec));
|
|
||||||
|
|
||||||
New->name = xnfalloc(strlen(Mode->name) + 1);
|
|
||||||
memcpy(New->name, Mode->name, strlen(Mode->name) + 1);
|
|
||||||
|
|
||||||
/* We ignore privates as DDC code doesn't use it currently */
|
|
||||||
return New;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Temporary.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
add(char **p, char *new)
|
|
||||||
{
|
|
||||||
*p = xnfrealloc(*p, strlen(*p) + strlen(new) + 2);
|
|
||||||
strcat(*p, " ");
|
|
||||||
strcat(*p, new);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
PrintModeline(int scrnIndex,DisplayModePtr mode)
|
|
||||||
{
|
|
||||||
char tmp[256];
|
|
||||||
char *flags = xnfcalloc(1, 1);
|
|
||||||
|
|
||||||
if (mode->HSkew) {
|
|
||||||
snprintf(tmp, 256, "hskew %i", mode->HSkew);
|
|
||||||
add(&flags, tmp);
|
|
||||||
}
|
|
||||||
if (mode->VScan) {
|
|
||||||
snprintf(tmp, 256, "vscan %i", mode->VScan);
|
|
||||||
add(&flags, tmp);
|
|
||||||
}
|
|
||||||
if (mode->Flags & V_INTERLACE) add(&flags, "interlace");
|
|
||||||
if (mode->Flags & V_CSYNC) add(&flags, "composite");
|
|
||||||
if (mode->Flags & V_DBLSCAN) add(&flags, "doublescan");
|
|
||||||
if (mode->Flags & V_BCAST) add(&flags, "bcast");
|
|
||||||
if (mode->Flags & V_PHSYNC) add(&flags, "+hsync");
|
|
||||||
if (mode->Flags & V_NHSYNC) add(&flags, "-hsync");
|
|
||||||
if (mode->Flags & V_PVSYNC) add(&flags, "+vsync");
|
|
||||||
if (mode->Flags & V_NVSYNC) add(&flags, "-vsync");
|
|
||||||
if (mode->Flags & V_PCSYNC) add(&flags, "+csync");
|
|
||||||
if (mode->Flags & V_NCSYNC) add(&flags, "-csync");
|
|
||||||
#if 0
|
|
||||||
if (mode->Flags & V_CLKDIV2) add(&flags, "vclk/2");
|
|
||||||
#endif
|
|
||||||
xf86DrvMsgVerb(scrnIndex, X_INFO, 3,
|
|
||||||
"Modeline \"%s\" %6.2f %i %i %i %i %i %i %i %i%s\n",
|
|
||||||
mode->name, mode->Clock/1000., mode->HDisplay,
|
|
||||||
mode->HSyncStart, mode->HSyncEnd, mode->HTotal,
|
|
||||||
mode->VDisplay, mode->VSyncStart, mode->VSyncEnd,
|
|
||||||
mode->VTotal, flags);
|
|
||||||
xfree(flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO:
|
|
||||||
* - for those with access to the VESA DMT standard; review please.
|
|
||||||
*/
|
|
||||||
#define MODEPREFIX(name) NULL, NULL, name, 0,M_T_DRIVER
|
|
||||||
#define MODESUFFIX 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,FALSE,FALSE,0,NULL,0,0.0,0.0
|
|
||||||
|
|
||||||
DisplayModeRec DDCEstablishedModes[17] = {
|
|
||||||
{ MODEPREFIX("800x600"), 40000, 800, 840, 968, 1056, 0, 600, 601, 605, 628, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@60Hz */
|
|
||||||
{ MODEPREFIX("800x600"), 36000, 800, 824, 896, 1024, 0, 600, 601, 603, 625, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@56Hz */
|
|
||||||
{ MODEPREFIX("640x480"), 31500, 640, 656, 720, 840, 0, 480, 481, 484, 500, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@75Hz */
|
|
||||||
{ MODEPREFIX("640x480"), 31500, 640, 664, 704, 832, 0, 480, 489, 491, 520, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@72Hz */
|
|
||||||
{ MODEPREFIX("640x480"), 30240, 640, 704, 768, 864, 0, 480, 483, 486, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@67Hz */
|
|
||||||
{ MODEPREFIX("640x480"), 25200, 640, 656, 752, 800, 0, 480, 490, 492, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@60Hz */
|
|
||||||
{ MODEPREFIX("720x400"), 35500, 720, 738, 846, 900, 0, 400, 421, 423, 449, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 720x400@88Hz */
|
|
||||||
{ MODEPREFIX("720x400"), 28320, 720, 738, 846, 900, 0, 400, 412, 414, 449, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 720x400@70Hz */
|
|
||||||
{ MODEPREFIX("1280x1024"), 135000, 1280, 1296, 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x1024@75Hz */
|
|
||||||
{ MODEPREFIX("1024x768"), 78800, 1024, 1040, 1136, 1312, 0, 768, 769, 772, 800, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1024x768@75Hz */
|
|
||||||
{ MODEPREFIX("1024x768"), 75000, 1024, 1048, 1184, 1328, 0, 768, 771, 777, 806, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 1024x768@70Hz */
|
|
||||||
{ MODEPREFIX("1024x768"), 65000, 1024, 1048, 1184, 1344, 0, 768, 771, 777, 806, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 1024x768@60Hz */
|
|
||||||
{ MODEPREFIX("1024x768"), 44900, 1024, 1032, 1208, 1264, 0, 768, 768, 776, 817, 0, V_PHSYNC | V_PVSYNC | V_INTERLACE, MODESUFFIX }, /* 1024x768@43Hz */
|
|
||||||
{ MODEPREFIX("832x624"), 57284, 832, 864, 928, 1152, 0, 624, 625, 628, 667, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 832x624@75Hz */
|
|
||||||
{ MODEPREFIX("800x600"), 49500, 800, 816, 896, 1056, 0, 600, 601, 604, 625, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@75Hz */
|
|
||||||
{ MODEPREFIX("800x600"), 50000, 800, 856, 976, 1040, 0, 600, 637, 643, 666, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@72Hz */
|
|
||||||
{ MODEPREFIX("1152x864"), 108000, 1152, 1216, 1344, 1600, 0, 864, 865, 868, 900, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1152x864@75Hz */
|
|
||||||
};
|
|
||||||
|
|
||||||
static DisplayModePtr
|
|
||||||
DDCModesFromEstablished(int scrnIndex, struct established_timings *timing)
|
|
||||||
{
|
|
||||||
DisplayModePtr Modes = NULL, Mode = NULL;
|
|
||||||
CARD32 bits = (timing->t1) | (timing->t2 << 8) |
|
|
||||||
((timing->t_manu & 0x80) << 9);
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 17; i++)
|
|
||||||
if (bits & (0x01 << i)) {
|
|
||||||
Mode = xf86ModeCopy(&(DDCEstablishedModes[i]));
|
|
||||||
Modes = xf86ModesAdd(Modes, Mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Modes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static DisplayModePtr
|
|
||||||
DDCModesFromStandardTiming(int scrnIndex, struct std_timings *timing)
|
|
||||||
{
|
|
||||||
DisplayModePtr Modes = NULL, Mode = NULL;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < STD_TIMINGS; i++)
|
|
||||||
if (timing[i].hsize && timing[i].vsize && timing[i].refresh) {
|
|
||||||
Mode = xf86CVTMode(timing[i].hsize, timing[i].vsize,
|
|
||||||
timing[i].refresh, FALSE, FALSE);
|
|
||||||
Mode->type = M_T_DRIVER;
|
|
||||||
Modes = xf86ModesAdd(Modes, Mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Modes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static DisplayModePtr
|
|
||||||
DDCModeFromDetailedTiming(int scrnIndex, struct detailed_timings *timing,
|
|
||||||
int preferred)
|
|
||||||
{
|
|
||||||
DisplayModePtr Mode;
|
|
||||||
|
|
||||||
/* We don't do stereo */
|
|
||||||
if (timing->stereo) {
|
|
||||||
xf86DrvMsg(scrnIndex, X_INFO, "%s: Ignoring: We don't handle stereo.\n",
|
|
||||||
__func__);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We only do seperate sync currently */
|
|
||||||
if (timing->sync != 0x03) {
|
|
||||||
xf86DrvMsg(scrnIndex, X_INFO, "%s: %dx%d Warning: We only handle seperate"
|
|
||||||
" sync.\n", __func__, timing->h_active, timing->v_active);
|
|
||||||
}
|
|
||||||
|
|
||||||
Mode = xnfalloc(sizeof(DisplayModeRec));
|
|
||||||
memset(Mode, 0, sizeof(DisplayModeRec));
|
|
||||||
|
|
||||||
Mode->name = xnfalloc(10); /* "1234x1234" */
|
|
||||||
xf86snprintf(Mode->name, 20, "%dx%d", timing->h_active,
|
|
||||||
timing->v_active);
|
|
||||||
|
|
||||||
Mode->type = M_T_DRIVER;
|
|
||||||
if (preferred)
|
|
||||||
Mode->type |= M_T_PREFERRED;
|
|
||||||
|
|
||||||
Mode->Clock = timing->clock / 1000.0;
|
|
||||||
|
|
||||||
Mode->HDisplay = timing->h_active;
|
|
||||||
Mode->HSyncStart = timing->h_active + timing->h_sync_off;
|
|
||||||
Mode->HSyncEnd = Mode->HSyncStart + timing->h_sync_width;
|
|
||||||
Mode->HTotal = timing->h_active + timing->h_blanking;
|
|
||||||
|
|
||||||
Mode->VDisplay = timing->v_active;
|
|
||||||
Mode->VSyncStart = timing->v_active + timing->v_sync_off;
|
|
||||||
Mode->VSyncEnd = Mode->VSyncStart + timing->v_sync_width;
|
|
||||||
Mode->VTotal = timing->v_active + timing->v_blanking;
|
|
||||||
|
|
||||||
/* We ignore h/v_size and h/v_border for now. */
|
|
||||||
|
|
||||||
if (timing->interlaced)
|
|
||||||
Mode->Flags |= V_INTERLACE;
|
|
||||||
|
|
||||||
if (timing->misc & 0x02)
|
|
||||||
Mode->Flags |= V_PHSYNC;
|
|
||||||
else
|
|
||||||
Mode->Flags |= V_NHSYNC;
|
|
||||||
|
|
||||||
if (timing->misc & 0x01)
|
|
||||||
Mode->Flags |= V_PVSYNC;
|
|
||||||
else
|
|
||||||
Mode->Flags |= V_NVSYNC;
|
|
||||||
|
|
||||||
return Mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
DDCGuessRangesFromModes(int scrnIndex, MonPtr Monitor, DisplayModePtr Modes)
|
|
||||||
{
|
|
||||||
DisplayModePtr Mode = Modes;
|
|
||||||
|
|
||||||
if (!Monitor || !Modes)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* set up the ranges for scanning through the modes */
|
|
||||||
Monitor->nHsync = 1;
|
|
||||||
Monitor->hsync[0].lo = 1024.0;
|
|
||||||
Monitor->hsync[0].hi = 0.0;
|
|
||||||
|
|
||||||
Monitor->nVrefresh = 1;
|
|
||||||
Monitor->vrefresh[0].lo = 1024.0;
|
|
||||||
Monitor->vrefresh[0].hi = 0.0;
|
|
||||||
|
|
||||||
while (Mode) {
|
|
||||||
if (!Mode->HSync)
|
|
||||||
Mode->HSync = ((float) Mode->Clock ) / ((float) Mode->HTotal);
|
|
||||||
|
|
||||||
if (!Mode->VRefresh)
|
|
||||||
Mode->VRefresh = (1000.0 * ((float) Mode->Clock)) /
|
|
||||||
((float) (Mode->HTotal * Mode->VTotal));
|
|
||||||
|
|
||||||
if (Mode->HSync < Monitor->hsync[0].lo)
|
|
||||||
Monitor->hsync[0].lo = Mode->HSync;
|
|
||||||
|
|
||||||
if (Mode->HSync > Monitor->hsync[0].hi)
|
|
||||||
Monitor->hsync[0].hi = Mode->HSync;
|
|
||||||
|
|
||||||
if (Mode->VRefresh < Monitor->vrefresh[0].lo)
|
|
||||||
Monitor->vrefresh[0].lo = Mode->VRefresh;
|
|
||||||
|
|
||||||
if (Mode->VRefresh > Monitor->vrefresh[0].hi)
|
|
||||||
Monitor->vrefresh[0].hi = Mode->VRefresh;
|
|
||||||
|
|
||||||
Mode = Mode->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Fill out MonPtr with xf86MonPtr information.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
|
|
||||||
{
|
|
||||||
DisplayModePtr Modes = NULL, Mode;
|
|
||||||
int i, clock;
|
|
||||||
Bool have_hsync = FALSE, have_vrefresh = FALSE;
|
|
||||||
int preferred;
|
|
||||||
|
|
||||||
if (!Monitor || !DDC)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Monitor->DDC = DDC;
|
|
||||||
|
|
||||||
preferred = PREFERRED_TIMING_MODE(DDC->features.msc);
|
|
||||||
|
|
||||||
Monitor->widthmm = 10 * DDC->features.hsize;
|
|
||||||
Monitor->heightmm = 10 * DDC->features.vsize;
|
|
||||||
|
|
||||||
/* If this is a digital display, then we can use reduced blanking */
|
|
||||||
if (DDC->features.input_type)
|
|
||||||
Monitor->reducedblanking = TRUE;
|
|
||||||
/* Allow the user to also enable this through config */
|
|
||||||
|
|
||||||
/* Add established timings */
|
|
||||||
Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1);
|
|
||||||
Modes = xf86ModesAdd(Modes, Mode);
|
|
||||||
|
|
||||||
/* Add standard timings */
|
|
||||||
Mode = DDCModesFromStandardTiming(scrnIndex, DDC->timings2);
|
|
||||||
Modes = xf86ModesAdd(Modes, Mode);
|
|
||||||
|
|
||||||
/* Skip EDID ranges if they were specified in the config file */
|
|
||||||
have_hsync = (Monitor->nHsync != 0);
|
|
||||||
have_vrefresh = (Monitor->nVrefresh != 0);
|
|
||||||
|
|
||||||
/* Go through the detailed monitor sections */
|
|
||||||
for (i = 0; i < DET_TIMINGS; i++)
|
|
||||||
switch (DDC->det_mon[i].type) {
|
|
||||||
case DS_RANGES:
|
|
||||||
if (!have_hsync) {
|
|
||||||
if (!Monitor->nHsync)
|
|
||||||
xf86DrvMsg(scrnIndex, X_INFO,
|
|
||||||
"Using EDID range info for horizontal sync\n");
|
|
||||||
Monitor->hsync[Monitor->nHsync].lo =
|
|
||||||
DDC->det_mon[i].section.ranges.min_h;
|
|
||||||
Monitor->hsync[Monitor->nHsync].hi =
|
|
||||||
DDC->det_mon[i].section.ranges.max_h;
|
|
||||||
Monitor->nHsync++;
|
|
||||||
} else {
|
|
||||||
xf86DrvMsg(scrnIndex, X_INFO,
|
|
||||||
"Using hsync ranges from config file\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!have_vrefresh) {
|
|
||||||
if (!Monitor->nVrefresh)
|
|
||||||
xf86DrvMsg(scrnIndex, X_INFO,
|
|
||||||
"Using EDID range info for vertical refresh\n");
|
|
||||||
Monitor->vrefresh[Monitor->nVrefresh].lo =
|
|
||||||
DDC->det_mon[i].section.ranges.min_v;
|
|
||||||
Monitor->vrefresh[Monitor->nVrefresh].hi =
|
|
||||||
DDC->det_mon[i].section.ranges.max_v;
|
|
||||||
Monitor->nVrefresh++;
|
|
||||||
} else {
|
|
||||||
xf86DrvMsg(scrnIndex, X_INFO,
|
|
||||||
"Using vrefresh ranges from config file\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
clock = DDC->det_mon[i].section.ranges.max_clock * 1000;
|
|
||||||
if (clock > Monitor->maxPixClock)
|
|
||||||
Monitor->maxPixClock = clock;
|
|
||||||
|
|
||||||
break;
|
|
||||||
case DT:
|
|
||||||
Mode = DDCModeFromDetailedTiming(scrnIndex,
|
|
||||||
&DDC->det_mon[i].section.d_timings,
|
|
||||||
preferred);
|
|
||||||
preferred = 0;
|
|
||||||
Modes = xf86ModesAdd(Modes, Mode);
|
|
||||||
break;
|
|
||||||
case DS_STD_TIMINGS:
|
|
||||||
Mode = DDCModesFromStandardTiming(scrnIndex,
|
|
||||||
DDC->det_mon[i].section.std_t);
|
|
||||||
Modes = xf86ModesAdd(Modes, Mode);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Modes) {
|
|
||||||
/* Print Modes */
|
|
||||||
xf86DrvMsg(scrnIndex, X_INFO, "Printing DDC gathered Modelines:\n");
|
|
||||||
|
|
||||||
Mode = Modes;
|
|
||||||
while (Mode) {
|
|
||||||
PrintModeline(scrnIndex, Mode);
|
|
||||||
Mode = Mode->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do we still need ranges to be filled in? */
|
|
||||||
if (!Monitor->nHsync || !Monitor->nVrefresh)
|
|
||||||
DDCGuessRangesFromModes(scrnIndex, Monitor, Modes);
|
|
||||||
|
|
||||||
/* look for last Mode */
|
|
||||||
Mode = Modes;
|
|
||||||
|
|
||||||
while (Mode->next)
|
|
||||||
Mode = Mode->next;
|
|
||||||
|
|
||||||
/* add to MonPtr */
|
|
||||||
if (Monitor->Modes) {
|
|
||||||
Monitor->Last->next = Modes;
|
|
||||||
Modes->prev = Monitor->Last;
|
|
||||||
Monitor->Last = Mode;
|
|
||||||
} else {
|
|
||||||
Monitor->Modes = Modes;
|
|
||||||
Monitor->Last = Mode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#define EDID1_ATOM_NAME "XFree86_DDC_EDID1_RAWDATA"
|
#define EDID1_ATOM_NAME "XFree86_DDC_EDID1_RAWDATA"
|
||||||
#define EDID2_ATOM_NAME "XFree86_DDC_EDID2_RAWDATA"
|
#define EDID2_ATOM_NAME "XFree86_DDC_EDID2_RAWDATA"
|
||||||
#define VDIF_ATOM_NAME "XFree86_DDC_VDIF_RAWDATA"
|
#define VDIF_ATOM_NAME "XFree86_DDC_VDIF_RAWDATA"
|
||||||
|
|
348
hw/xfree86/ddc/edid_modes.c
Normal file
348
hw/xfree86/ddc/edid_modes.c
Normal file
|
@ -0,0 +1,348 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2006 Luc Verhaegen.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sub license,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice (including the
|
||||||
|
* next paragraph) shall be included in all copies or substantial portions
|
||||||
|
* of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_XORG_CONFIG_H
|
||||||
|
#include <xorg-config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "xf86.h"
|
||||||
|
#include "xf86DDC.h"
|
||||||
|
#include <X11/Xatom.h>
|
||||||
|
#include "property.h"
|
||||||
|
#include "propertyst.h"
|
||||||
|
#include "xf86DDC.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO:
|
||||||
|
* - for those with access to the VESA DMT standard; review please.
|
||||||
|
*/
|
||||||
|
#define MODEPREFIX(name) NULL, NULL, name, 0,M_T_DRIVER
|
||||||
|
#define MODESUFFIX 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,FALSE,FALSE,0,NULL,0,0.0,0.0
|
||||||
|
|
||||||
|
DisplayModeRec DDCEstablishedModes[17] = {
|
||||||
|
{ MODEPREFIX("800x600"), 40000, 800, 840, 968, 1056, 0, 600, 601, 605, 628, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@60Hz */
|
||||||
|
{ MODEPREFIX("800x600"), 36000, 800, 824, 896, 1024, 0, 600, 601, 603, 625, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@56Hz */
|
||||||
|
{ MODEPREFIX("640x480"), 31500, 640, 656, 720, 840, 0, 480, 481, 484, 500, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@75Hz */
|
||||||
|
{ MODEPREFIX("640x480"), 31500, 640, 664, 704, 832, 0, 480, 489, 491, 520, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@72Hz */
|
||||||
|
{ MODEPREFIX("640x480"), 30240, 640, 704, 768, 864, 0, 480, 483, 486, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@67Hz */
|
||||||
|
{ MODEPREFIX("640x480"), 25200, 640, 656, 752, 800, 0, 480, 490, 492, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@60Hz */
|
||||||
|
{ MODEPREFIX("720x400"), 35500, 720, 738, 846, 900, 0, 400, 421, 423, 449, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 720x400@88Hz */
|
||||||
|
{ MODEPREFIX("720x400"), 28320, 720, 738, 846, 900, 0, 400, 412, 414, 449, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 720x400@70Hz */
|
||||||
|
{ MODEPREFIX("1280x1024"), 135000, 1280, 1296, 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x1024@75Hz */
|
||||||
|
{ MODEPREFIX("1024x768"), 78800, 1024, 1040, 1136, 1312, 0, 768, 769, 772, 800, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1024x768@75Hz */
|
||||||
|
{ MODEPREFIX("1024x768"), 75000, 1024, 1048, 1184, 1328, 0, 768, 771, 777, 806, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 1024x768@70Hz */
|
||||||
|
{ MODEPREFIX("1024x768"), 65000, 1024, 1048, 1184, 1344, 0, 768, 771, 777, 806, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 1024x768@60Hz */
|
||||||
|
{ MODEPREFIX("1024x768"), 44900, 1024, 1032, 1208, 1264, 0, 768, 768, 776, 817, 0, V_PHSYNC | V_PVSYNC | V_INTERLACE, MODESUFFIX }, /* 1024x768@43Hz */
|
||||||
|
{ MODEPREFIX("832x624"), 57284, 832, 864, 928, 1152, 0, 624, 625, 628, 667, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 832x624@75Hz */
|
||||||
|
{ MODEPREFIX("800x600"), 49500, 800, 816, 896, 1056, 0, 600, 601, 604, 625, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@75Hz */
|
||||||
|
{ MODEPREFIX("800x600"), 50000, 800, 856, 976, 1040, 0, 600, 637, 643, 666, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@72Hz */
|
||||||
|
{ MODEPREFIX("1152x864"), 108000, 1152, 1216, 1344, 1600, 0, 864, 865, 868, 900, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1152x864@75Hz */
|
||||||
|
};
|
||||||
|
|
||||||
|
static DisplayModePtr
|
||||||
|
DDCModesFromEstablished(int scrnIndex, struct established_timings *timing)
|
||||||
|
{
|
||||||
|
DisplayModePtr Modes = NULL, Mode = NULL;
|
||||||
|
CARD32 bits = (timing->t1) | (timing->t2 << 8) |
|
||||||
|
((timing->t_manu & 0x80) << 9);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < 17; i++) {
|
||||||
|
if (bits & (0x01 << i)) {
|
||||||
|
Mode = xf86DuplicateMode(&DDCEstablishedModes[i]);
|
||||||
|
Modes = xf86ModesAdd(Modes, Mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Modes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static DisplayModePtr
|
||||||
|
DDCModesFromStandardTiming(int scrnIndex, struct std_timings *timing)
|
||||||
|
{
|
||||||
|
DisplayModePtr Modes = NULL, Mode = NULL;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < STD_TIMINGS; i++) {
|
||||||
|
if (timing[i].hsize && timing[i].vsize && timing[i].refresh) {
|
||||||
|
Mode = xf86CVTMode(timing[i].hsize, timing[i].vsize,
|
||||||
|
timing[i].refresh, FALSE, FALSE);
|
||||||
|
Mode->type = M_T_DRIVER;
|
||||||
|
Modes = xf86ModesAdd(Modes, Mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Modes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static DisplayModePtr
|
||||||
|
DDCModeFromDetailedTiming(int scrnIndex, struct detailed_timings *timing,
|
||||||
|
int preferred)
|
||||||
|
{
|
||||||
|
DisplayModePtr Mode;
|
||||||
|
|
||||||
|
/* We don't do stereo */
|
||||||
|
if (timing->stereo) {
|
||||||
|
xf86DrvMsg(scrnIndex, X_INFO,
|
||||||
|
"%s: Ignoring: We don't handle stereo.\n", __func__);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We only do seperate sync currently */
|
||||||
|
if (timing->sync != 0x03) {
|
||||||
|
xf86DrvMsg(scrnIndex, X_INFO,
|
||||||
|
"%s: %dx%d Warning: We only handle seperate"
|
||||||
|
" sync.\n", __func__, timing->h_active, timing->v_active);
|
||||||
|
}
|
||||||
|
|
||||||
|
Mode = xnfalloc(sizeof(DisplayModeRec));
|
||||||
|
memset(Mode, 0, sizeof(DisplayModeRec));
|
||||||
|
|
||||||
|
Mode->type = M_T_DRIVER;
|
||||||
|
if (preferred)
|
||||||
|
Mode->type |= M_T_PREFERRED;
|
||||||
|
|
||||||
|
Mode->Clock = timing->clock / 1000.0;
|
||||||
|
|
||||||
|
Mode->HDisplay = timing->h_active;
|
||||||
|
Mode->HSyncStart = timing->h_active + timing->h_sync_off;
|
||||||
|
Mode->HSyncEnd = Mode->HSyncStart + timing->h_sync_width;
|
||||||
|
Mode->HTotal = timing->h_active + timing->h_blanking;
|
||||||
|
|
||||||
|
Mode->VDisplay = timing->v_active;
|
||||||
|
Mode->VSyncStart = timing->v_active + timing->v_sync_off;
|
||||||
|
Mode->VSyncEnd = Mode->VSyncStart + timing->v_sync_width;
|
||||||
|
Mode->VTotal = timing->v_active + timing->v_blanking;
|
||||||
|
|
||||||
|
xf86SetModeDefaultName(Mode);
|
||||||
|
|
||||||
|
/* We ignore h/v_size and h/v_border for now. */
|
||||||
|
|
||||||
|
if (timing->interlaced)
|
||||||
|
Mode->Flags |= V_INTERLACE;
|
||||||
|
|
||||||
|
if (timing->misc & 0x02)
|
||||||
|
Mode->Flags |= V_PHSYNC;
|
||||||
|
else
|
||||||
|
Mode->Flags |= V_NHSYNC;
|
||||||
|
|
||||||
|
if (timing->misc & 0x01)
|
||||||
|
Mode->Flags |= V_PVSYNC;
|
||||||
|
else
|
||||||
|
Mode->Flags |= V_NVSYNC;
|
||||||
|
|
||||||
|
return Mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
DDCGuessRangesFromModes(int scrnIndex, MonPtr Monitor, DisplayModePtr Modes)
|
||||||
|
{
|
||||||
|
DisplayModePtr Mode = Modes;
|
||||||
|
|
||||||
|
if (!Monitor || !Modes)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* set up the ranges for scanning through the modes */
|
||||||
|
Monitor->nHsync = 1;
|
||||||
|
Monitor->hsync[0].lo = 1024.0;
|
||||||
|
Monitor->hsync[0].hi = 0.0;
|
||||||
|
|
||||||
|
Monitor->nVrefresh = 1;
|
||||||
|
Monitor->vrefresh[0].lo = 1024.0;
|
||||||
|
Monitor->vrefresh[0].hi = 0.0;
|
||||||
|
|
||||||
|
while (Mode) {
|
||||||
|
if (!Mode->HSync)
|
||||||
|
Mode->HSync = ((float) Mode->Clock ) / ((float) Mode->HTotal);
|
||||||
|
|
||||||
|
if (!Mode->VRefresh)
|
||||||
|
Mode->VRefresh = (1000.0 * ((float) Mode->Clock)) /
|
||||||
|
((float) (Mode->HTotal * Mode->VTotal));
|
||||||
|
|
||||||
|
if (Mode->HSync < Monitor->hsync[0].lo)
|
||||||
|
Monitor->hsync[0].lo = Mode->HSync;
|
||||||
|
|
||||||
|
if (Mode->HSync > Monitor->hsync[0].hi)
|
||||||
|
Monitor->hsync[0].hi = Mode->HSync;
|
||||||
|
|
||||||
|
if (Mode->VRefresh < Monitor->vrefresh[0].lo)
|
||||||
|
Monitor->vrefresh[0].lo = Mode->VRefresh;
|
||||||
|
|
||||||
|
if (Mode->VRefresh > Monitor->vrefresh[0].hi)
|
||||||
|
Monitor->vrefresh[0].hi = Mode->VRefresh;
|
||||||
|
|
||||||
|
Mode = Mode->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayModePtr
|
||||||
|
xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC)
|
||||||
|
{
|
||||||
|
int preferred, i;
|
||||||
|
DisplayModePtr Modes = NULL, Mode;
|
||||||
|
|
||||||
|
preferred = PREFERRED_TIMING_MODE(DDC->features.msc);
|
||||||
|
|
||||||
|
/* Add established timings */
|
||||||
|
Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1);
|
||||||
|
Modes = xf86ModesAdd(Modes, Mode);
|
||||||
|
|
||||||
|
/* Add standard timings */
|
||||||
|
Mode = DDCModesFromStandardTiming(scrnIndex, DDC->timings2);
|
||||||
|
Modes = xf86ModesAdd(Modes, Mode);
|
||||||
|
|
||||||
|
for (i = 0; i < DET_TIMINGS; i++) {
|
||||||
|
struct detailed_monitor_section *det_mon = &DDC->det_mon[i];
|
||||||
|
|
||||||
|
switch (det_mon->type) {
|
||||||
|
case DT:
|
||||||
|
Mode = DDCModeFromDetailedTiming(scrnIndex,
|
||||||
|
&det_mon->section.d_timings,
|
||||||
|
preferred);
|
||||||
|
preferred = 0;
|
||||||
|
Modes = xf86ModesAdd(Modes, Mode);
|
||||||
|
break;
|
||||||
|
case DS_STD_TIMINGS:
|
||||||
|
Mode = DDCModesFromStandardTiming(scrnIndex,
|
||||||
|
det_mon->section.std_t);
|
||||||
|
Modes = xf86ModesAdd(Modes, Mode);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Modes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fill out MonPtr with xf86MonPtr information.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
|
||||||
|
{
|
||||||
|
DisplayModePtr Modes = NULL, Mode;
|
||||||
|
int i, clock;
|
||||||
|
Bool have_hsync = FALSE, have_vrefresh = FALSE;
|
||||||
|
|
||||||
|
if (!Monitor || !DDC)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Monitor->DDC = DDC;
|
||||||
|
|
||||||
|
Monitor->widthmm = 10 * DDC->features.hsize;
|
||||||
|
Monitor->heightmm = 10 * DDC->features.vsize;
|
||||||
|
|
||||||
|
/* If this is a digital display, then we can use reduced blanking */
|
||||||
|
if (DDC->features.input_type)
|
||||||
|
Monitor->reducedblanking = TRUE;
|
||||||
|
/* Allow the user to also enable this through config */
|
||||||
|
|
||||||
|
Modes = xf86DDCGetModes(scrnIndex, DDC);
|
||||||
|
|
||||||
|
/* Skip EDID ranges if they were specified in the config file */
|
||||||
|
have_hsync = (Monitor->nHsync != 0);
|
||||||
|
have_vrefresh = (Monitor->nVrefresh != 0);
|
||||||
|
|
||||||
|
/* Go through the detailed monitor sections */
|
||||||
|
for (i = 0; i < DET_TIMINGS; i++) {
|
||||||
|
switch (DDC->det_mon[i].type) {
|
||||||
|
case DS_RANGES:
|
||||||
|
if (!have_hsync) {
|
||||||
|
if (!Monitor->nHsync)
|
||||||
|
xf86DrvMsg(scrnIndex, X_INFO,
|
||||||
|
"Using EDID range info for horizontal sync\n");
|
||||||
|
Monitor->hsync[Monitor->nHsync].lo =
|
||||||
|
DDC->det_mon[i].section.ranges.min_h;
|
||||||
|
Monitor->hsync[Monitor->nHsync].hi =
|
||||||
|
DDC->det_mon[i].section.ranges.max_h;
|
||||||
|
Monitor->nHsync++;
|
||||||
|
} else {
|
||||||
|
xf86DrvMsg(scrnIndex, X_INFO,
|
||||||
|
"Using hsync ranges from config file\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!have_vrefresh) {
|
||||||
|
if (!Monitor->nVrefresh)
|
||||||
|
xf86DrvMsg(scrnIndex, X_INFO,
|
||||||
|
"Using EDID range info for vertical refresh\n");
|
||||||
|
Monitor->vrefresh[Monitor->nVrefresh].lo =
|
||||||
|
DDC->det_mon[i].section.ranges.min_v;
|
||||||
|
Monitor->vrefresh[Monitor->nVrefresh].hi =
|
||||||
|
DDC->det_mon[i].section.ranges.max_v;
|
||||||
|
Monitor->nVrefresh++;
|
||||||
|
} else {
|
||||||
|
xf86DrvMsg(scrnIndex, X_INFO,
|
||||||
|
"Using vrefresh ranges from config file\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
clock = DDC->det_mon[i].section.ranges.max_clock * 1000;
|
||||||
|
if (clock > Monitor->maxPixClock)
|
||||||
|
Monitor->maxPixClock = clock;
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Modes) {
|
||||||
|
/* Print Modes */
|
||||||
|
xf86DrvMsg(scrnIndex, X_INFO, "Printing DDC gathered Modelines:\n");
|
||||||
|
|
||||||
|
Mode = Modes;
|
||||||
|
while (Mode) {
|
||||||
|
xf86PrintModeline(scrnIndex, Mode);
|
||||||
|
Mode = Mode->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Do we still need ranges to be filled in? */
|
||||||
|
if (!Monitor->nHsync || !Monitor->nVrefresh)
|
||||||
|
DDCGuessRangesFromModes(scrnIndex, Monitor, Modes);
|
||||||
|
|
||||||
|
/* look for last Mode */
|
||||||
|
Mode = Modes;
|
||||||
|
|
||||||
|
while (Mode->next)
|
||||||
|
Mode = Mode->next;
|
||||||
|
|
||||||
|
/* add to MonPtr */
|
||||||
|
if (Monitor->Modes) {
|
||||||
|
Monitor->Last->next = Modes;
|
||||||
|
Modes->prev = Monitor->Last;
|
||||||
|
Monitor->Last = Mode;
|
||||||
|
} else {
|
||||||
|
Monitor->Modes = Modes;
|
||||||
|
Monitor->Last = Mode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -304,16 +304,18 @@ get_detailed_timing_section(Uchar *c, struct detailed_timings *r)
|
||||||
r->misc = MISC;
|
r->misc = MISC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define MAX_EDID_MINOR 3
|
||||||
|
|
||||||
static Bool
|
static Bool
|
||||||
validate_version(int scrnIndex, struct edid_version *r)
|
validate_version(int scrnIndex, struct edid_version *r)
|
||||||
{
|
{
|
||||||
if (r->version != 1)
|
if (r->version != 1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (r->revision > 3) {
|
|
||||||
xf86DrvMsg(scrnIndex, X_ERROR,"EDID Version 1.%i not yet supported\n",
|
if (r->revision > MAX_EDID_MINOR)
|
||||||
r->revision);
|
xf86DrvMsg(scrnIndex, X_WARNING,
|
||||||
return FALSE;
|
"Assuming version 1.%d is compatible with 1.%d\n",
|
||||||
}
|
r->revision, MAX_EDID_MINOR);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,8 @@ extern void xf86print_vdif(
|
||||||
xf86vdifPtr v
|
xf86vdifPtr v
|
||||||
);
|
);
|
||||||
|
|
||||||
|
DisplayModePtr xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ if XV
|
||||||
XV_SRCS = xvmod.c xvmodproc.h
|
XV_SRCS = xvmod.c xvmodproc.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
AM_CFLAGS = @XORG_CFLAGS@
|
AM_CFLAGS = @DIX_CFLAGS@ @XORG_CFLAGS@
|
||||||
INCLUDES = @XORG_INCS@ \
|
INCLUDES = @XORG_INCS@ \
|
||||||
-I$(top_srcdir)/afb \
|
-I$(top_srcdir)/afb \
|
||||||
-I$(top_srcdir)/mfb \
|
-I$(top_srcdir)/mfb \
|
||||||
|
|
|
@ -57,9 +57,6 @@ static XF86ModuleVersionInfo VersRec =
|
||||||
_X_EXPORT XF86ModuleData type1ModuleData = { &VersRec, type1Setup, NULL };
|
_X_EXPORT XF86ModuleData type1ModuleData = { &VersRec, type1Setup, NULL };
|
||||||
|
|
||||||
extern void Type1RegisterFontFileFunctions(void);
|
extern void Type1RegisterFontFileFunctions(void);
|
||||||
#ifdef BUILDCID
|
|
||||||
extern void CIDRegisterFontFileFunctions(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
FontModule type1Module = {
|
FontModule type1Module = {
|
||||||
Type1RegisterFontFileFunctions,
|
Type1RegisterFontFileFunctions,
|
||||||
|
@ -67,23 +64,11 @@ FontModule type1Module = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef BUILDCID
|
|
||||||
FontModule CIDModule = {
|
|
||||||
CIDRegisterFontFileFunctions,
|
|
||||||
"CID",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static pointer
|
static pointer
|
||||||
type1Setup(pointer module, pointer opts, int *errmaj, int *errmin)
|
type1Setup(pointer module, pointer opts, int *errmaj, int *errmin)
|
||||||
{
|
{
|
||||||
type1Module.module = module;
|
type1Module.module = module;
|
||||||
LoadFont(&type1Module);
|
LoadFont(&type1Module);
|
||||||
#ifdef BUILDCID
|
|
||||||
CIDModule.module = module;
|
|
||||||
LoadFont(&CIDModule);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Need a non-NULL return */
|
/* Need a non-NULL return */
|
||||||
return (pointer)1;
|
return (pointer)1;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" $XdotOrg: xserver/xorg/hw/xfree86/doc/man/Xorg.man.pre,v 1.3 2005/07/04 18:41:01 ajax Exp $
|
.\" $XdotOrg: xserver/xorg/hw/xfree86/doc/man/Xorg.man.pre,v 1.3 2005/07/04 18:41:01 ajax Exp $
|
||||||
.TH __xservername__ __appmansuffix__ __vendorversion__
|
.TH __xservername__ __appmansuffix__ __vendorversion__
|
||||||
.SH NAME
|
.SH NAME
|
||||||
__xservername__ - X11R6 X server
|
__xservername__ - X11R7 X server
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B __xservername__
|
.B __xservername__
|
||||||
.RI [\fB:\fP display ]
|
.RI [\fB:\fP display ]
|
||||||
|
@ -13,30 +13,26 @@ is a full featured X server that was originally designed for UNIX and
|
||||||
UNIX-like operating systems running on Intel x86 hardware. It now runs
|
UNIX-like operating systems running on Intel x86 hardware. It now runs
|
||||||
on a wider range of hardware and OS platforms.
|
on a wider range of hardware and OS platforms.
|
||||||
.PP
|
.PP
|
||||||
This work was derived from
|
This work was derived by the X.Org Foundation from the XFree86 Project's
|
||||||
.I "XFree86\ 4.4rc2"
|
.I "XFree86\ 4.4rc2"
|
||||||
by the X.Org Foundation.
|
release.
|
||||||
The XFree86 4.4rc2 release was originally derived from
|
The XFree86 release was originally derived from
|
||||||
.I "X386\ 1.2"
|
.I "X386\ 1.2"
|
||||||
by Thomas Roell which was contributed to X11R5 by Snitily Graphics
|
by Thomas Roell which was contributed to X11R5 by Snitily Graphics
|
||||||
Consulting Service. The
|
Consulting Service.
|
||||||
.B __xservername__
|
|
||||||
server architecture includes
|
|
||||||
among many other things a loadable module system derived from code
|
|
||||||
donated by Metro Link, Inc. The current __xservername__ release is compatible
|
|
||||||
with X11R6.6.
|
|
||||||
.SH PLATFORMS
|
.SH PLATFORMS
|
||||||
.PP
|
.PP
|
||||||
.B __xservername__
|
.B __xservername__
|
||||||
operates under a wide range of operating systems and hardware platforms.
|
operates under a wide range of operating systems and hardware platforms.
|
||||||
The Intel x86 (IA32) architecture is the most widely supported hardware
|
The Intel x86 (IA32) architecture is the most widely supported hardware
|
||||||
platform. Other hardware platforms include Compaq Alpha, Intel IA64,
|
platform. Other hardware platforms include Compaq Alpha, Intel IA64, AMD64,
|
||||||
SPARC and PowerPC. The most widely supported operating systems are the
|
SPARC and PowerPC. The most widely supported operating systems are the
|
||||||
free/OpenSource UNIX-like systems such as Linux, FreeBSD, NetBSD and
|
free/OpenSource UNIX-like systems such as Linux, FreeBSD, NetBSD,
|
||||||
OpenBSD. Commercial UNIX operating systems such as Solaris (x86) and
|
OpenBSD, and Solaris. Commercial UNIX operating systems such as
|
||||||
UnixWare are also supported. Other supported operating systems include
|
UnixWare are also supported. Other supported operating systems include
|
||||||
LynxOS, and GNU Hurd. Darwin and Mac OS X are supported with the
|
LynxOS, and GNU Hurd. Darwin and Mac OS X are supported with the
|
||||||
XDarwin(1) X server. Win32/Cygwin is supported with the XWin X server.
|
XDarwin(__appmansuffix__) X server. Win32/Cygwin is supported with the
|
||||||
|
XWin(__appmansuffix__) X server.
|
||||||
.PP
|
.PP
|
||||||
.SH "NETWORK CONNECTIONS"
|
.SH "NETWORK CONNECTIONS"
|
||||||
.B __xservername__
|
.B __xservername__
|
||||||
|
@ -119,13 +115,14 @@ one way, the highest precedence mechanism is used. The list of mechanisms
|
||||||
is ordered from highest precedence to lowest. Note that not all parameters
|
is ordered from highest precedence to lowest. Note that not all parameters
|
||||||
can be supplied via all methods. The available command line options
|
can be supplied via all methods. The available command line options
|
||||||
and environment variables (and some defaults) are described here and in
|
and environment variables (and some defaults) are described here and in
|
||||||
the Xserver(1) manual page. Most configuration file parameters, with
|
the Xserver(__appmansuffix__) manual page. Most configuration file
|
||||||
their defaults, are described in the __xconfigfile__(__filemansuffix__) manual
|
parameters, with their defaults, are described in the
|
||||||
page. Driver and module specific configuration parameters are described
|
__xconfigfile__(__filemansuffix__) manual page. Driver and module specific
|
||||||
in the relevant driver or module manual page.
|
configuration parameters are described in the relevant driver or module
|
||||||
|
manual page.
|
||||||
.PP
|
.PP
|
||||||
In addition to the normal server options described in the Xserver(1)
|
In addition to the normal server options described in the
|
||||||
manual page,
|
Xserver(__appmansuffix__) manual page,
|
||||||
.B __xservername__
|
.B __xservername__
|
||||||
accepts the following command line switches:
|
accepts the following command line switches:
|
||||||
.TP 8
|
.TP 8
|
||||||
|
@ -385,7 +382,8 @@ options.
|
||||||
When this option is specified, the
|
When this option is specified, the
|
||||||
.B __xservername__
|
.B __xservername__
|
||||||
server scans the PCI bus, and prints out some information about each
|
server scans the PCI bus, and prints out some information about each
|
||||||
device that was detected. See also scanpci(1) and pcitweak(1).
|
device that was detected. See also scanpci(__appmansuffix__)
|
||||||
|
and pcitweak(__appmansuffix__).
|
||||||
.TP 8
|
.TP 8
|
||||||
.BI \-screen " screen-name"
|
.BI \-screen " screen-name"
|
||||||
Use the __xconfigfile__(__filemansuffix__) file
|
Use the __xconfigfile__(__filemansuffix__) file
|
||||||
|
@ -426,6 +424,12 @@ Print out the server version, patchlevel, release date, the operating
|
||||||
system/platform it was built on, and whether it includes module loader
|
system/platform it was built on, and whether it includes module loader
|
||||||
support.
|
support.
|
||||||
.TP 8
|
.TP 8
|
||||||
|
.B \-showDefaultModulePath
|
||||||
|
Print out the default module path the server was compiled with.
|
||||||
|
.TP 8
|
||||||
|
.B \-showDefaultLibPath
|
||||||
|
Print out the path libraries should be installed to.
|
||||||
|
.TP 8
|
||||||
.BI \-config " file"
|
.BI \-config " file"
|
||||||
Read the server configuration from
|
Read the server configuration from
|
||||||
.IR file .
|
.IR file .
|
||||||
|
@ -502,13 +506,12 @@ for its initial setup.
|
||||||
Refer to the __xconfigfile__(__filemansuffix__) manual page for information
|
Refer to the __xconfigfile__(__filemansuffix__) manual page for information
|
||||||
about the format of this file.
|
about the format of this file.
|
||||||
.PP
|
.PP
|
||||||
Starting with version 4.4,
|
|
||||||
.B __xservername__
|
.B __xservername__
|
||||||
has a mechanism for automatically generating a built-in configuration
|
has a mechanism for automatically generating a built-in configuration
|
||||||
at run-time when no
|
at run-time when no
|
||||||
.B __xconfigfile__
|
.B __xconfigfile__
|
||||||
file is present. The current version of this automatic configuration
|
file is present. The current version of this automatic configuration
|
||||||
mechanism works in three ways.
|
mechanism works in two ways.
|
||||||
.PP
|
.PP
|
||||||
The first is via enhancements that have made many components of the
|
The first is via enhancements that have made many components of the
|
||||||
.B __xconfigfile__
|
.B __xconfigfile__
|
||||||
|
@ -517,14 +520,7 @@ reasonably deduced doesn't need to be specified explicitly, greatly
|
||||||
reducing the amount of built-in configuration information that needs to
|
reducing the amount of built-in configuration information that needs to
|
||||||
be generated at run-time.
|
be generated at run-time.
|
||||||
.PP
|
.PP
|
||||||
The second is to use an external utility called getconfig(1), when
|
The second is to have "safe" fallbacks for most configuration information.
|
||||||
available, to use meta-configuration information to generate a suitable
|
|
||||||
configuration for the primary video device. The meta-configuration
|
|
||||||
information can be updated to allow an existing installation to get the
|
|
||||||
best out of new hardware or to work around bugs that are found
|
|
||||||
post-release.
|
|
||||||
.PP
|
|
||||||
The third is to have "safe" fallbacks for most configuration information.
|
|
||||||
This maximises the likelihood that the
|
This maximises the likelihood that the
|
||||||
.B __xservername__
|
.B __xservername__
|
||||||
server will start up in some usable configuration even when information
|
server will start up in some usable configuration even when information
|
||||||
|
@ -580,7 +576,7 @@ Client error message database.
|
||||||
.B __projectroot__/lib/X11/app-defaults/\(**
|
.B __projectroot__/lib/X11/app-defaults/\(**
|
||||||
Client resource specifications.
|
Client resource specifications.
|
||||||
.TP 30
|
.TP 30
|
||||||
.B __projectroot__/man/man?/\(**
|
.B __mandir__/man?/\(**
|
||||||
Manual pages.
|
Manual pages.
|
||||||
.TP 30
|
.TP 30
|
||||||
.BI /etc/X n .hosts
|
.BI /etc/X n .hosts
|
||||||
|
@ -638,7 +634,7 @@ __xservername__ was originally based on XFree86 4.4rc2.
|
||||||
That was originally based on \fIX386 1.2\fP by Thomas Roell, which
|
That was originally based on \fIX386 1.2\fP by Thomas Roell, which
|
||||||
was contributed to the then X Consortium's X11R5 distribution by SGCS.
|
was contributed to the then X Consortium's X11R5 distribution by SGCS.
|
||||||
.PP
|
.PP
|
||||||
__xservername__ is released by the X.org Foundation.
|
__xservername__ is released by the X.Org Foundation.
|
||||||
.PP
|
.PP
|
||||||
The project that became XFree86 was originally founded in 1992 by
|
The project that became XFree86 was originally founded in 1992 by
|
||||||
David Dawes, Glenn Lai, Jim Tsillas and David Wexelblat.
|
David Dawes, Glenn Lai, Jim Tsillas and David Wexelblat.
|
||||||
|
@ -679,9 +675,9 @@ Orest Zborowski \fIorestz@eskimo.com\fP
|
||||||
.RE
|
.RE
|
||||||
.PP
|
.PP
|
||||||
__xservername__ source is available from the FTP server
|
__xservername__ source is available from the FTP server
|
||||||
\fI<ftp://ftp.x.org/>\fP, and from the X.org
|
\fI<ftp://ftp.x.org/>\fP, and from the X.Org
|
||||||
server \fI<http://www.freedesktop.org/cvs/>\fP. Documentation and other
|
server \fI<http://gitweb.freedesktop.org/>\fP. Documentation and other
|
||||||
information can be found from the X.org web site
|
information can be found from the X.Org web site
|
||||||
\fI<http://www.x.org/>\fP.
|
\fI<http://www.x.org/>\fP.
|
||||||
|
|
||||||
.SH LEGAL
|
.SH LEGAL
|
||||||
|
|
|
@ -311,7 +311,6 @@ font path elements:
|
||||||
.I __projectroot__/lib/X11/fonts/misc/
|
.I __projectroot__/lib/X11/fonts/misc/
|
||||||
.I __projectroot__/lib/X11/fonts/TTF/
|
.I __projectroot__/lib/X11/fonts/TTF/
|
||||||
.I __projectroot__/lib/X11/fonts/Type1/
|
.I __projectroot__/lib/X11/fonts/Type1/
|
||||||
.I __projectroot__/lib/X11/fonts/CID/
|
|
||||||
.I __projectroot__/lib/X11/fonts/75dpi/
|
.I __projectroot__/lib/X11/fonts/75dpi/
|
||||||
.I __projectroot__/lib/X11/fonts/100dpi/
|
.I __projectroot__/lib/X11/fonts/100dpi/
|
||||||
.fi
|
.fi
|
||||||
|
@ -326,7 +325,6 @@ The recommended font path contains the following font path elements:
|
||||||
.I __projectroot__/lib/X11/fonts/75dpi/:unscaled
|
.I __projectroot__/lib/X11/fonts/75dpi/:unscaled
|
||||||
.I __projectroot__/lib/X11/fonts/100dpi/:unscaled
|
.I __projectroot__/lib/X11/fonts/100dpi/:unscaled
|
||||||
.I __projectroot__/lib/X11/fonts/Type1/
|
.I __projectroot__/lib/X11/fonts/Type1/
|
||||||
.I __projectroot__/lib/X11/fonts/CID/
|
|
||||||
.I __projectroot__/lib/X11/fonts/Speedo/
|
.I __projectroot__/lib/X11/fonts/Speedo/
|
||||||
.I __projectroot__/lib/X11/fonts/75dpi/
|
.I __projectroot__/lib/X11/fonts/75dpi/
|
||||||
.I __projectroot__/lib/X11/fonts/100dpi/
|
.I __projectroot__/lib/X11/fonts/100dpi/
|
||||||
|
|
|
@ -7,7 +7,7 @@ libdri_la_CFLAGS = -I$(top_srcdir)/hw/xfree86/common \
|
||||||
-I$(top_builddir)/GL/include \
|
-I$(top_builddir)/GL/include \
|
||||||
-I@MESA_SOURCE@/include \
|
-I@MESA_SOURCE@/include \
|
||||||
-DHAVE_XORG_CONFIG_H \
|
-DHAVE_XORG_CONFIG_H \
|
||||||
@DRIPROTO_CFLAGS@ \
|
@DIX_CFLAGS@ @DRIPROTO_CFLAGS@ \
|
||||||
@LIBDRM_CFLAGS@ \
|
@LIBDRM_CFLAGS@ \
|
||||||
@GL_CFLAGS@
|
@GL_CFLAGS@
|
||||||
libdri_la_LDFLAGS = -module -avoid-version @LIBDRM_LIBS@
|
libdri_la_LDFLAGS = -module -avoid-version @LIBDRM_LIBS@
|
||||||
|
|
|
@ -84,7 +84,7 @@ static RESTYPE DRIDrawablePrivResType;
|
||||||
static RESTYPE DRIContextPrivResType;
|
static RESTYPE DRIContextPrivResType;
|
||||||
static void DRIDestroyDummyContext(ScreenPtr pScreen, Bool hasCtxPriv);
|
static void DRIDestroyDummyContext(ScreenPtr pScreen, Bool hasCtxPriv);
|
||||||
|
|
||||||
static drmServerInfo DRIDRMServerInfo;
|
drmServerInfo DRIDRMServerInfo;
|
||||||
|
|
||||||
/* Wrapper just like xf86DrvMsg, but
|
/* Wrapper just like xf86DrvMsg, but
|
||||||
without the verbosity level checking.
|
without the verbosity level checking.
|
||||||
|
@ -176,8 +176,6 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
|
||||||
else
|
else
|
||||||
openbusid = NULL;
|
openbusid = NULL;
|
||||||
|
|
||||||
drmSetServerInfo(&DRIDRMServerInfo);
|
|
||||||
|
|
||||||
/* Note that drmOpen will try to load the kernel module, if needed. */
|
/* Note that drmOpen will try to load the kernel module, if needed. */
|
||||||
fd = drmOpen(pDRIInfo->drmDriverName, openbusid);
|
fd = drmOpen(pDRIInfo->drmDriverName, openbusid);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
|
@ -593,7 +591,7 @@ static void dri_drm_get_perms(gid_t *group, mode_t *mode)
|
||||||
*mode = xf86ConfigDRI.mode;
|
*mode = xf86ConfigDRI.mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
static drmServerInfo DRIDRMServerInfo = {
|
drmServerInfo DRIDRMServerInfo = {
|
||||||
dri_drm_debug_print,
|
dri_drm_debug_print,
|
||||||
xf86LoadKernelModule,
|
xf86LoadKernelModule,
|
||||||
dri_drm_get_perms,
|
dri_drm_get_perms,
|
||||||
|
|
|
@ -39,8 +39,11 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
#include "xf86Module.h"
|
#include "xf86Module.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
|
#include "xf86drm.h"
|
||||||
static MODULESETUPPROTO(driSetup);
|
static MODULESETUPPROTO(driSetup);
|
||||||
|
|
||||||
|
drmServerInfo DRIDRMServerInfo;
|
||||||
|
|
||||||
static XF86ModuleVersionInfo VersRec =
|
static XF86ModuleVersionInfo VersRec =
|
||||||
{
|
{
|
||||||
"dri",
|
"dri",
|
||||||
|
@ -81,6 +84,9 @@ driSetup(pointer module, pointer opts, int *errmaj, int *errmin)
|
||||||
} else {
|
} else {
|
||||||
if (errmaj) *errmaj = LDR_ONCEONLY;
|
if (errmaj) *errmaj = LDR_ONCEONLY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drmSetServerInfo(&DRIDRMServerInfo);
|
||||||
|
|
||||||
/* Need a non-NULL return value to indicate success */
|
/* Need a non-NULL return value to indicate success */
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -386,6 +386,7 @@ ProcXF86DRICreateDrawable(
|
||||||
{
|
{
|
||||||
xXF86DRICreateDrawableReply rep;
|
xXF86DRICreateDrawableReply rep;
|
||||||
DrawablePtr pDrawable;
|
DrawablePtr pDrawable;
|
||||||
|
int rc;
|
||||||
|
|
||||||
REQUEST(xXF86DRICreateDrawableReq);
|
REQUEST(xXF86DRICreateDrawableReq);
|
||||||
REQUEST_SIZE_MATCH(xXF86DRICreateDrawableReq);
|
REQUEST_SIZE_MATCH(xXF86DRICreateDrawableReq);
|
||||||
|
@ -398,12 +399,10 @@ ProcXF86DRICreateDrawable(
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
|
|
||||||
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable(
|
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||||
(Drawable)stuff->drawable,
|
DixReadAccess);
|
||||||
client,
|
if (rc != Success)
|
||||||
SecurityReadAccess))) {
|
return rc;
|
||||||
return BadValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!DRICreateDrawable( screenInfo.screens[stuff->screen],
|
if (!DRICreateDrawable( screenInfo.screens[stuff->screen],
|
||||||
(Drawable)stuff->drawable,
|
(Drawable)stuff->drawable,
|
||||||
|
@ -424,17 +423,17 @@ ProcXF86DRIDestroyDrawable(
|
||||||
REQUEST(xXF86DRIDestroyDrawableReq);
|
REQUEST(xXF86DRIDestroyDrawableReq);
|
||||||
DrawablePtr pDrawable;
|
DrawablePtr pDrawable;
|
||||||
REQUEST_SIZE_MATCH(xXF86DRIDestroyDrawableReq);
|
REQUEST_SIZE_MATCH(xXF86DRIDestroyDrawableReq);
|
||||||
|
int rc;
|
||||||
|
|
||||||
if (stuff->screen >= screenInfo.numScreens) {
|
if (stuff->screen >= screenInfo.numScreens) {
|
||||||
client->errorValue = stuff->screen;
|
client->errorValue = stuff->screen;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable(
|
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||||
(Drawable)stuff->drawable,
|
DixReadAccess);
|
||||||
client,
|
if (rc != Success)
|
||||||
SecurityReadAccess))) {
|
return rc;
|
||||||
return BadValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!DRIDestroyDrawable( screenInfo.screens[stuff->screen],
|
if (!DRIDestroyDrawable( screenInfo.screens[stuff->screen],
|
||||||
(Drawable)stuff->drawable,
|
(Drawable)stuff->drawable,
|
||||||
|
@ -455,7 +454,7 @@ ProcXF86DRIGetDrawableInfo(
|
||||||
int X, Y, W, H;
|
int X, Y, W, H;
|
||||||
drm_clip_rect_t * pClipRects;
|
drm_clip_rect_t * pClipRects;
|
||||||
drm_clip_rect_t * pBackClipRects;
|
drm_clip_rect_t * pBackClipRects;
|
||||||
int backX, backY;
|
int backX, backY, rc;
|
||||||
|
|
||||||
REQUEST(xXF86DRIGetDrawableInfoReq);
|
REQUEST(xXF86DRIGetDrawableInfoReq);
|
||||||
REQUEST_SIZE_MATCH(xXF86DRIGetDrawableInfoReq);
|
REQUEST_SIZE_MATCH(xXF86DRIGetDrawableInfoReq);
|
||||||
|
@ -468,12 +467,10 @@ ProcXF86DRIGetDrawableInfo(
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
|
|
||||||
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable(
|
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||||
(Drawable)stuff->drawable,
|
DixReadAccess);
|
||||||
client,
|
if (rc != Success)
|
||||||
SecurityReadAccess))) {
|
return rc;
|
||||||
return BadValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!DRIGetDrawableInfo( screenInfo.screens[stuff->screen],
|
if (!DRIGetDrawableInfo( screenInfo.screens[stuff->screen],
|
||||||
pDrawable,
|
pDrawable,
|
||||||
|
|
|
@ -6,7 +6,7 @@ noinst_LIBRARIES = libdummy-nonserver.a
|
||||||
|
|
||||||
INCLUDES = $(XORG_INCS)
|
INCLUDES = $(XORG_INCS)
|
||||||
|
|
||||||
AM_CFLAGS = $(XORG_CFLAGS)
|
AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
|
||||||
|
|
||||||
if NEED_STRLCAT
|
if NEED_STRLCAT
|
||||||
STRL_SRCS = $(top_srcdir)/os/strlcat.c $(top_srcdir)/os/strlcpy.c
|
STRL_SRCS = $(top_srcdir)/os/strlcat.c $(top_srcdir)/os/strlcpy.c
|
||||||
|
|
|
@ -7,7 +7,7 @@ INCLUDES = \
|
||||||
-I$(srcdir)/../../../exa \
|
-I$(srcdir)/../../../exa \
|
||||||
-I$(srcdir)/../../../miext/cw
|
-I$(srcdir)/../../../miext/cw
|
||||||
|
|
||||||
AM_CFLAGS = $(XORG_CFLAGS)
|
AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
|
||||||
|
|
||||||
libexa_la_SOURCES = \
|
libexa_la_SOURCES = \
|
||||||
examodule.c
|
examodule.c
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user