Xext: shm: move client local check into procs

Move extra complexity out of the dispatch functions, so they're
really just switch/case statements calling the actual handler procs.
Preparation for further steps.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2024-07-03 16:59:42 +02:00
parent c67b05e653
commit a79dd9b264

View File

@ -346,12 +346,15 @@ shm_access(ClientPtr client, SHMPERM_TYPE * perm, int readonly)
static int static int
ProcShmAttach(ClientPtr client) ProcShmAttach(ClientPtr client)
{ {
REQUEST(xShmAttachReq);
REQUEST_SIZE_MATCH(xShmAttachReq);
if (!client->local)
return BadRequest;
SHMSTAT_TYPE buf; SHMSTAT_TYPE buf;
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
REQUEST(xShmAttachReq);
REQUEST_SIZE_MATCH(xShmAttachReq);
LEGAL_NEW_RESOURCE(stuff->shmseg, client); LEGAL_NEW_RESOURCE(stuff->shmseg, client);
if ((stuff->readOnly != xTrue) && (stuff->readOnly != xFalse)) { if ((stuff->readOnly != xTrue) && (stuff->readOnly != xFalse)) {
client->errorValue = stuff->readOnly; client->errorValue = stuff->readOnly;
@ -431,11 +434,14 @@ ShmDetachSegment(void *value, /* must conform to DeleteType */
static int static int
ProcShmDetach(ClientPtr client) ProcShmDetach(ClientPtr client)
{ {
REQUEST(xShmDetachReq);
REQUEST_SIZE_MATCH(xShmDetachReq);
if (!client->local)
return BadRequest;
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
REQUEST(xShmDetachReq);
REQUEST_SIZE_MATCH(xShmDetachReq);
VERIFY_SHMSEG(stuff->shmseg, shmdesc, client); VERIFY_SHMSEG(stuff->shmseg, shmdesc, client);
FreeResource(stuff->shmseg, X11_RESTYPE_NONE); FreeResource(stuff->shmseg, X11_RESTYPE_NONE);
return Success; return Success;
@ -709,6 +715,9 @@ ProcShmPutImage(ClientPtr client)
REQUEST(xShmPutImageReq); REQUEST(xShmPutImageReq);
REQUEST_SIZE_MATCH(xShmPutImageReq); REQUEST_SIZE_MATCH(xShmPutImageReq);
if (!client->local)
return BadRequest;
#ifdef XINERAMA #ifdef XINERAMA
int j, result, orig_x, orig_y; int j, result, orig_x, orig_y;
PanoramiXRes *draw, *gc; PanoramiXRes *draw, *gc;
@ -758,6 +767,9 @@ ProcShmGetImage(ClientPtr client)
REQUEST(xShmGetImageReq); REQUEST(xShmGetImageReq);
REQUEST_SIZE_MATCH(xShmGetImageReq); REQUEST_SIZE_MATCH(xShmGetImageReq);
if (!client->local)
return BadRequest;
#ifdef XINERAMA #ifdef XINERAMA
PanoramiXRes *draw; PanoramiXRes *draw;
DrawablePtr pDraw; DrawablePtr pDraw;
@ -904,6 +916,9 @@ ProcShmCreatePixmap(ClientPtr client)
REQUEST(xShmCreatePixmapReq); REQUEST(xShmCreatePixmapReq);
REQUEST_SIZE_MATCH(xShmCreatePixmapReq); REQUEST_SIZE_MATCH(xShmCreatePixmapReq);
if (!client->local)
return BadRequest;
#ifdef XINERAMA #ifdef XINERAMA
if (noPanoramiXExtension) if (noPanoramiXExtension)
return ShmCreatePixmap(client, stuff); return ShmCreatePixmap(client, stuff);
@ -1131,13 +1146,17 @@ ShmBusfaultNotify(void *context)
static int static int
ProcShmAttachFd(ClientPtr client) ProcShmAttachFd(ClientPtr client)
{ {
REQUEST(xShmAttachFdReq);
REQUEST_SIZE_MATCH(xShmAttachFdReq);
if (!client->local)
return BadRequest;
int fd; int fd;
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
REQUEST(xShmAttachFdReq);
struct stat statb; struct stat statb;
SetReqFds(client, 1); SetReqFds(client, 1);
REQUEST_SIZE_MATCH(xShmAttachFdReq);
LEGAL_NEW_RESOURCE(stuff->shmseg, client); LEGAL_NEW_RESOURCE(stuff->shmseg, client);
if ((stuff->readOnly != xTrue) && (stuff->readOnly != xFalse)) { if ((stuff->readOnly != xTrue) && (stuff->readOnly != xFalse)) {
client->errorValue = stuff->readOnly; client->errorValue = stuff->readOnly;
@ -1246,9 +1265,14 @@ shm_tmpfile(void)
static int static int
ProcShmCreateSegment(ClientPtr client) ProcShmCreateSegment(ClientPtr client)
{ {
REQUEST(xShmCreateSegmentReq);
REQUEST_SIZE_MATCH(xShmCreateSegmentReq);
if (!client->local)
return BadRequest;
int fd; int fd;
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
REQUEST(xShmCreateSegmentReq);
xShmCreateSegmentReply rep = { xShmCreateSegmentReply rep = {
.type = X_Reply, .type = X_Reply,
.nfd = 1, .nfd = 1,
@ -1256,7 +1280,6 @@ ProcShmCreateSegment(ClientPtr client)
.length = 0, .length = 0,
}; };
REQUEST_SIZE_MATCH(xShmCreateSegmentReq);
LEGAL_NEW_RESOURCE(stuff->shmseg, client); LEGAL_NEW_RESOURCE(stuff->shmseg, client);
if ((stuff->readOnly != xTrue) && (stuff->readOnly != xFalse)) { if ((stuff->readOnly != xTrue) && (stuff->readOnly != xFalse)) {
client->errorValue = stuff->readOnly; client->errorValue = stuff->readOnly;
@ -1321,13 +1344,9 @@ ProcShmDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
if (stuff->data == X_ShmQueryVersion)
return ProcShmQueryVersion(client);
if (!client->local)
return BadRequest;
switch (stuff->data) { switch (stuff->data) {
case X_ShmQueryVersion:
return ProcShmQueryVersion(client);
case X_ShmAttach: case X_ShmAttach:
return ProcShmAttach(client); return ProcShmAttach(client);
case X_ShmDetach: case X_ShmDetach:
@ -1457,13 +1476,9 @@ SProcShmDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
if (stuff->data == X_ShmQueryVersion)
return ProcShmQueryVersion(client);
if (!client->local)
return BadRequest;
switch (stuff->data) { switch (stuff->data) {
case X_ShmQueryVersion:
return ProcShmQueryVersion(client);
case X_ShmAttach: case X_ShmAttach:
return SProcShmAttach(client); return SProcShmAttach(client);
case X_ShmDetach: case X_ShmDetach: