Merge remote-tracking branch 'ajax/server-1.14-abi-churn'

This commit is contained in:
Keith Packard 2012-09-24 11:43:01 -07:00
commit 4dd5989d15
18 changed files with 81 additions and 86 deletions

View File

@ -288,7 +288,7 @@ ProcXF86BigfontQueryVersion(ClientPtr client)
.gid = getegid(), .gid = getegid(),
#ifdef HAS_SHM #ifdef HAS_SHM
.signature = signature, .signature = signature,
.capabilities = (LocalClient(client) && !client->swapped) .capabilities = (client->local && !client->swapped)
? XF86Bigfont_CAP_LocalShm : 0 ? XF86Bigfont_CAP_LocalShm : 0
#else #else
.signature = 0, .signature = 0,
@ -357,7 +357,7 @@ ProcXF86BigfontQueryFont(ClientPtr client)
#else #else
switch (client->req_len) { switch (client->req_len) {
case 2: /* client with version 1.0 libX11 */ case 2: /* client with version 1.0 libX11 */
stuff_flags = (LocalClient(client) && stuff_flags = (client->local &&
!client->swapped ? XF86Bigfont_FLAGS_Shm : 0); !client->swapped ? XF86Bigfont_FLAGS_Shm : 0);
break; break;
case 3: /* client with version 1.1 libX11 */ case 3: /* client with version 1.1 libX11 */

View File

@ -3499,14 +3499,16 @@ ProcInitialConnection(ClientPtr client)
REQUEST(xReq); REQUEST(xReq);
xConnClientPrefix *prefix; xConnClientPrefix *prefix;
int whichbyte = 1; int whichbyte = 1;
char order;
prefix = (xConnClientPrefix *) ((char *) stuff + sz_xReq); prefix = (xConnClientPrefix *) ((char *)stuff + sz_xReq);
if ((prefix->byteOrder != 'l') && (prefix->byteOrder != 'B')) order = prefix->byteOrder;
return client->noClientException = -1; if (order != 'l' && order != 'B' && order != 'r' && order != 'R')
if (((*(char *) &whichbyte) && (prefix->byteOrder == 'B')) || return client->noClientException = -1;
(!(*(char *) &whichbyte) && (prefix->byteOrder == 'l'))) { if (((*(char *) &whichbyte) && (order == 'B' || order == 'R')) ||
client->swapped = TRUE; (!(*(char *) &whichbyte) && (order == 'l' || order == 'r'))) {
SwapConnClientPrefix(prefix); client->swapped = TRUE;
SwapConnClientPrefix(prefix);
} }
stuff->reqType = 2; stuff->reqType = 2;
stuff->length += bytes_to_int32(prefix->nbytesAuthProto) + stuff->length += bytes_to_int32(prefix->nbytesAuthProto) +
@ -3514,6 +3516,9 @@ ProcInitialConnection(ClientPtr client)
if (client->swapped) { if (client->swapped) {
swaps(&stuff->length); swaps(&stuff->length);
} }
if (order == 'r' || order == 'R') {
client->local = FALSE;
}
ResetCurrentRequest(client); ResetCurrentRequest(client);
return Success; return Success;
} }

View File

@ -561,7 +561,7 @@ ProcXF86DRIQueryDirectRenderingCapable(register ClientPtr client)
return BadValue; return BadValue;
} }
if (!LocalClient(client) || client->swapped) if (!client->local || client->swapped)
isCapable = 0; isCapable = 0;
rep = (xXF86DRIQueryDirectRenderingCapableReply) { rep = (xXF86DRIQueryDirectRenderingCapableReply) {
@ -1229,7 +1229,7 @@ ProcXF86DRIDispatch(register ClientPtr client)
} }
} }
if (!LocalClient(client)) if (!client->local)
return DRIErrorBase + XF86DRIClientNotLocal; return DRIErrorBase + XF86DRIClientNotLocal;
switch (stuff->data) { switch (stuff->data) {

View File

@ -2095,7 +2095,7 @@ ProcXDGADispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
if (!LocalClient(client)) if (!client->local)
return DGAErrorBase + XF86DGAClientNotLocal; return DGAErrorBase + XF86DGAClientNotLocal;
#ifdef DGA_REQ_DEBUG #ifdef DGA_REQ_DEBUG

View File

@ -80,7 +80,7 @@ typedef enum {
* mask is 0xFFFF0000. * mask is 0xFFFF0000.
*/ */
#define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 4) #define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 4)
#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(13, 0) #define ABI_VIDEODRV_VERSION SET_ABI_VERSION(14, 0)
#define ABI_XINPUT_VERSION SET_ABI_VERSION(18, 0) #define ABI_XINPUT_VERSION SET_ABI_VERSION(18, 0)
#define ABI_EXTENSION_VERSION SET_ABI_VERSION(7, 0) #define ABI_EXTENSION_VERSION SET_ABI_VERSION(7, 0)
#define ABI_FONT_VERSION SET_ABI_VERSION(0, 6) #define ABI_FONT_VERSION SET_ABI_VERSION(0, 6)

View File

@ -1590,7 +1590,7 @@ ProcXF86VidModeGetPermissions(ClientPtr client)
return BadValue; return BadValue;
if (xf86GetVidModeEnabled() && if (xf86GetVidModeEnabled() &&
(xf86GetVidModeAllowNonLocal() || LocalClient(client))) { (xf86GetVidModeAllowNonLocal() || client->local)) {
rep.permissions |= XF86VM_WRITE_PERMISSION; rep.permissions |= XF86VM_WRITE_PERMISSION;
} }
if (client->swapped) { if (client->swapped) {
@ -1659,7 +1659,7 @@ ProcXF86VidModeDispatch(ClientPtr client)
default: default:
if (!xf86GetVidModeEnabled()) if (!xf86GetVidModeEnabled())
return VidModeErrorBase + XF86VidModeExtensionDisabled; return VidModeErrorBase + XF86VidModeExtensionDisabled;
if (xf86GetVidModeAllowNonLocal() || LocalClient(client)) { if (xf86GetVidModeAllowNonLocal() || client->local) {
switch (stuff->data) { switch (stuff->data) {
case X_XF86VidModeAddModeLine: case X_XF86VidModeAddModeLine:
return ProcXF86VidModeAddModeLine(client); return ProcXF86VidModeAddModeLine(client);
@ -2083,7 +2083,7 @@ SProcXF86VidModeDispatch(ClientPtr client)
default: default:
if (!xf86GetVidModeEnabled()) if (!xf86GetVidModeEnabled())
return VidModeErrorBase + XF86VidModeExtensionDisabled; return VidModeErrorBase + XF86VidModeExtensionDisabled;
if (xf86GetVidModeAllowNonLocal() || LocalClient(client)) { if (xf86GetVidModeAllowNonLocal() || client->local) {
switch (stuff->data) { switch (stuff->data) {
case X_XF86VidModeAddModeLine: case X_XF86VidModeAddModeLine:
return SProcXF86VidModeAddModeLine(client); return SProcXF86VidModeAddModeLine(client);

View File

@ -118,7 +118,7 @@ ProcXF86DRIQueryDirectRenderingCapable(register ClientPtr client)
return BadValue; return BadValue;
} }
if (!LocalClient(client) || client->swapped) if (!client->local || client->swapped)
isCapable = 0; isCapable = 0;
rep = (xXF86DRIQueryDirectRenderingCapableReply) { rep = (xXF86DRIQueryDirectRenderingCapableReply) {
@ -528,7 +528,7 @@ ProcXF86DRIDispatch(register ClientPtr client)
return ProcXF86DRIQueryDirectRenderingCapable(client); return ProcXF86DRIQueryDirectRenderingCapable(client);
} }
if (!LocalClient(client)) if (!client->local)
return DRIErrorBase + XF86DRIClientNotLocal; return DRIErrorBase + XF86DRIClientNotLocal;
switch (stuff->data) { switch (stuff->data) {

View File

@ -588,7 +588,7 @@ ProcDRI2Dispatch(ClientPtr client)
return ProcDRI2QueryVersion(client); return ProcDRI2QueryVersion(client);
} }
if (!LocalClient(client)) if (!client->local)
return BadRequest; return BadRequest;
switch (stuff->data) { switch (stuff->data) {

View File

@ -612,7 +612,7 @@ ProcAppleWMDispatch(register ClientPtr client)
return ProcAppleWMQueryVersion(client); return ProcAppleWMQueryVersion(client);
} }
if (!LocalClient(client)) if (!client->local)
return WMErrorBase + AppleWMClientNotLocal; return WMErrorBase + AppleWMClientNotLocal;
switch (stuff->data) { switch (stuff->data) {
@ -684,7 +684,7 @@ SProcAppleWMDispatch(register ClientPtr client)
REQUEST(xReq); REQUEST(xReq);
/* It is bound to be non-local when there is byte swapping */ /* It is bound to be non-local when there is byte swapping */
if (!LocalClient(client)) if (!client->local)
return WMErrorBase + AppleWMClientNotLocal; return WMErrorBase + AppleWMClientNotLocal;
/* only local clients are allowed WM access */ /* only local clients are allowed WM access */

View File

@ -129,7 +129,7 @@ ProcAppleDRIQueryDirectRenderingCapable(register ClientPtr client)
} }
rep.isCapable = isCapable; rep.isCapable = isCapable;
if (!LocalClient(client)) if (!client->local)
rep.isCapable = 0; rep.isCapable = 0;
if (client->swapped) { if (client->swapped) {
@ -354,7 +354,7 @@ ProcAppleDRIDispatch(register ClientPtr client)
return ProcAppleDRIQueryDirectRenderingCapable(client); return ProcAppleDRIQueryDirectRenderingCapable(client);
} }
if (!LocalClient(client)) if (!client->local)
return DRIErrorBase + AppleDRIClientNotLocal; return DRIErrorBase + AppleDRIClientNotLocal;
switch (stuff->data) { switch (stuff->data) {
@ -469,7 +469,7 @@ SProcAppleDRIDispatch(register ClientPtr client)
return SProcAppleDRIQueryDirectRenderingCapable(client); return SProcAppleDRIQueryDirectRenderingCapable(client);
} }
if (!LocalClient(client)) if (!client->local)
return DRIErrorBase + AppleDRIClientNotLocal; return DRIErrorBase + AppleDRIClientNotLocal;
switch (stuff->data) { switch (stuff->data) {

View File

@ -525,7 +525,7 @@ ProcWindowsWMDispatch(ClientPtr client)
return ProcWindowsWMQueryVersion(client); return ProcWindowsWMQueryVersion(client);
} }
if (!LocalClient(client)) if (!client->local)
return WMErrorBase + WindowsWMClientNotLocal; return WMErrorBase + WindowsWMClientNotLocal;
switch (stuff->data) { switch (stuff->data) {
@ -575,7 +575,7 @@ SProcWindowsWMDispatch(ClientPtr client)
REQUEST(xReq); REQUEST(xReq);
/* It is bound to be non-local when there is byte swapping */ /* It is bound to be non-local when there is byte swapping */
if (!LocalClient(client)) if (!client->local)
return WMErrorBase + WindowsWMClientNotLocal; return WMErrorBase + WindowsWMClientNotLocal;
/* only local clients are allowed WM access */ /* only local clients are allowed WM access */

View File

@ -56,8 +56,7 @@ ReplyNotSwappd(ClientPtr /* pClient */ ,
void * /* pbuf */ ) _X_NORETURN; void * /* pbuf */ ) _X_NORETURN;
typedef enum { ClientStateInitial, typedef enum { ClientStateInitial,
/* 1 is unused now, was ClientStateAuthenticating */ ClientStateRunning,
ClientStateRunning = 2,
ClientStateRetained, ClientStateRetained,
ClientStateGone ClientStateGone
} ClientState; } ClientState;
@ -86,26 +85,29 @@ typedef struct _Window *SaveSetElt;
#endif #endif
typedef struct _Client { typedef struct _Client {
int index;
Mask clientAsMask;
pointer requestBuffer; pointer requestBuffer;
pointer osPrivate; /* for OS layer, including scheduler */ pointer osPrivate; /* for OS layer, including scheduler */
Bool swapped; Mask clientAsMask;
short index;
unsigned char majorOp, minorOp;
int swapped:1;
int local:1;
int big_requests:1; /* supports large requests */
int clientGone:1;
int closeDownMode:2;
int clientState:2;
char smart_priority;
short noClientException; /* this client died or needs to be killed */
int priority;
ReplySwapPtr pSwapReplyFunc; ReplySwapPtr pSwapReplyFunc;
XID errorValue; XID errorValue;
int sequence; int sequence;
int closeDownMode;
int clientGone;
int noClientException; /* this client died or needs to be
* killed */
int ignoreCount; /* count for Attend/IgnoreClient */ int ignoreCount; /* count for Attend/IgnoreClient */
SaveSetElt *saveSet;
int numSaved; int numSaved;
SaveSetElt *saveSet;
int (**requestVector) (ClientPtr /* pClient */ ); int (**requestVector) (ClientPtr /* pClient */ );
CARD32 req_len; /* length of current request */ CARD32 req_len; /* length of current request */
Bool big_requests; /* supports large requests */ unsigned int replyBytesRemaining;
int priority;
ClientState clientState;
PrivateRec *devPrivates; PrivateRec *devPrivates;
unsigned short xkbClientFlags; unsigned short xkbClientFlags;
unsigned short mapNotifyMask; unsigned short mapNotifyMask;
@ -113,15 +115,12 @@ typedef struct _Client {
unsigned short vMajor, vMinor; unsigned short vMajor, vMinor;
KeyCode minKC, maxKC; KeyCode minKC, maxKC;
unsigned long replyBytesRemaining; int smart_start_tick;
int smart_priority; int smart_stop_tick;
long smart_start_tick; int smart_check_tick;
long smart_stop_tick;
long smart_check_tick;
DeviceIntPtr clientPtr; DeviceIntPtr clientPtr;
ClientIdPtr clientIds; ClientIdPtr clientIds;
unsigned short majorOp, minorOp;
} ClientRec; } ClientRec;
/* /*

View File

@ -406,9 +406,6 @@ typedef struct sockaddr *sockaddrPtr;
extern _X_EXPORT int extern _X_EXPORT int
InvalidHost(sockaddrPtr /*saddr */ , int /*len */ , ClientPtr client); InvalidHost(sockaddrPtr /*saddr */ , int /*len */ , ClientPtr client);
extern _X_EXPORT int
LocalClient(ClientPtr /* client */ );
extern _X_EXPORT int extern _X_EXPORT int
LocalClientCred(ClientPtr, int *, int *); LocalClientCred(ClientPtr, int *, int *);

View File

@ -86,8 +86,8 @@ typedef struct _WindowOpt {
struct _OtherClients *otherClients; /* default: NULL */ struct _OtherClients *otherClients; /* default: NULL */
struct _GrabRec *passiveGrabs; /* default: NULL */ struct _GrabRec *passiveGrabs; /* default: NULL */
PropertyPtr userProps; /* default: NULL */ PropertyPtr userProps; /* default: NULL */
unsigned long backingBitPlanes; /* default: ~0L */ CARD32 backingBitPlanes; /* default: ~0L */
unsigned long backingPixel; /* default: 0 */ CARD32 backingPixel; /* default: 0 */
RegionPtr boundingShape; /* default: NULL */ RegionPtr boundingShape; /* default: NULL */
RegionPtr clipShape; /* default: NULL */ RegionPtr clipShape; /* default: NULL */
RegionPtr inputShape; /* default: NULL */ RegionPtr inputShape; /* default: NULL */

View File

@ -1007,14 +1007,6 @@ ComputeLocalClient(ClientPtr client)
return FALSE; return FALSE;
} }
Bool
LocalClient(ClientPtr client)
{
if (!client->osPrivate)
return FALSE;
return ((OsCommPtr) client->osPrivate)->local_client;
}
/* /*
* Return the uid and gid of a connected local client * Return the uid and gid of a connected local client
* *
@ -1176,7 +1168,7 @@ AuthorizedClient(ClientPtr client)
if (rc != Success) if (rc != Success)
return rc; return rc;
return LocalClient(client) ? Success : BadAccess; return client->local ? Success : BadAccess;
} }
/* Add a host to the access control list. This is the external interface /* Add a host to the access control list. This is the external interface

View File

@ -764,7 +764,7 @@ AllocNewConnection(XtransConnInfo trans_conn, int fd, CARD32 conn_time)
free(oc); free(oc);
return NullClient; return NullClient;
} }
oc->local_client = ComputeLocalClient(client); client->local = ComputeLocalClient(client);
#if !defined(WIN32) #if !defined(WIN32)
ConnectionTranslation[fd] = client->index; ConnectionTranslation[fd] = client->index;
#else #else
@ -894,7 +894,7 @@ ErrorConnMax(XtransConnInfo trans_conn)
xConnSetupPrefix csp; xConnSetupPrefix csp;
char pad[3] = { 0, 0, 0 }; char pad[3] = { 0, 0, 0 };
struct iovec iov[3]; struct iovec iov[3];
char byteOrder = 0; char order = 0;
int whichbyte = 1; int whichbyte = 1;
struct timeval waittime; struct timeval waittime;
fd_set mask; fd_set mask;
@ -907,15 +907,15 @@ ErrorConnMax(XtransConnInfo trans_conn)
FD_SET(fd, &mask); FD_SET(fd, &mask);
(void) Select(fd + 1, &mask, NULL, NULL, &waittime); (void) Select(fd + 1, &mask, NULL, NULL, &waittime);
/* try to read the byte-order of the connection */ /* try to read the byte-order of the connection */
(void) _XSERVTransRead(trans_conn, &byteOrder, 1); (void) _XSERVTransRead(trans_conn, &order, 1);
if ((byteOrder == 'l') || (byteOrder == 'B')) { if (order == 'l' || order == 'B' || order == 'r' || order == 'R') {
csp.success = xFalse; csp.success = xFalse;
csp.lengthReason = sizeof(NOROOM) - 1; csp.lengthReason = sizeof(NOROOM) - 1;
csp.length = (sizeof(NOROOM) + 2) >> 2; csp.length = (sizeof(NOROOM) + 2) >> 2;
csp.majorVersion = X_PROTOCOL; csp.majorVersion = X_PROTOCOL;
csp.minorVersion = X_PROTOCOL_REVISION; csp.minorVersion = X_PROTOCOL_REVISION;
if (((*(char *) &whichbyte) && (byteOrder == 'B')) || if (((*(char *) &whichbyte) && (order == 'B' || order == 'R')) ||
(!(*(char *) &whichbyte) && (byteOrder == 'l'))) { (!(*(char *) &whichbyte) && (order == 'l' || order == 'r'))) {
swaps(&csp.majorVersion); swaps(&csp.majorVersion);
swaps(&csp.minorVersion); swaps(&csp.minorVersion);
swaps(&csp.length); swaps(&csp.length);
@ -1038,8 +1038,8 @@ CloseDownConnection(ClientPtr client)
if (FlushCallback) if (FlushCallback)
CallCallbacks(&FlushCallback, NULL); CallCallbacks(&FlushCallback, NULL);
if (oc->output && oc->output->count) if (oc->output)
FlushClient(client, oc, (char *) NULL, 0); FlushClient(client, oc, (char *) NULL, 0);
#ifdef XDMCP #ifdef XDMCP
XdmcpCloseDisplay(oc->fd); XdmcpCloseDisplay(oc->fd);
#endif #endif

21
os/io.c
View File

@ -82,6 +82,23 @@ SOFTWARE.
CallbackListPtr ReplyCallback; CallbackListPtr ReplyCallback;
CallbackListPtr FlushCallback; CallbackListPtr FlushCallback;
typedef struct _connectionInput {
struct _connectionInput *next;
char *buffer; /* contains current client input */
char *bufptr; /* pointer to current start of data */
int bufcnt; /* count of bytes in buffer */
int lenLastReq;
int size;
unsigned int ignoreBytes; /* bytes to ignore before the next request */
} ConnectionInput, *ConnectionInputPtr;
typedef struct _connectionOutput {
struct _connectionOutput *next;
unsigned char *buf;
int size;
int count;
} ConnectionOutput, *ConnectionOutputPtr;
static ConnectionInputPtr AllocateInputBuffer(void); static ConnectionInputPtr AllocateInputBuffer(void);
static ConnectionOutputPtr AllocateOutputBuffer(void); static ConnectionOutputPtr AllocateOutputBuffer(void);
@ -845,8 +862,8 @@ FlushClient(ClientPtr who, OsCommPtr oc, const void *__extraBuf, int extraCount)
long notWritten; long notWritten;
long todo; long todo;
if (!oco) if (!oco || !oco->count)
return 0; return 0;
written = 0; written = 0;
padsize = padding_for_int32(extraCount); padsize = padding_for_int32(extraCount);
notWritten = oco->count + extraCount + padsize; notWritten = oco->count + extraCount + padsize;

View File

@ -107,22 +107,8 @@ typedef Bool (*AddAuthorFunc) (unsigned name_length, const char *name,
unsigned data_length, char *data); unsigned data_length, char *data);
#endif #endif
typedef struct _connectionInput { typedef struct _connectionInput *ConnectionInputPtr;
struct _connectionInput *next; typedef struct _connectionOutput *ConnectionOutputPtr;
char *buffer; /* contains current client input */
char *bufptr; /* pointer to current start of data */
int bufcnt; /* count of bytes in buffer */
int lenLastReq;
int size;
unsigned int ignoreBytes; /* bytes to ignore before the next request */
} ConnectionInput, *ConnectionInputPtr;
typedef struct _connectionOutput {
struct _connectionOutput *next;
int size;
unsigned char *buf;
int count;
} ConnectionOutput, *ConnectionOutputPtr;
struct _osComm; struct _osComm;
@ -162,7 +148,6 @@ typedef struct _osComm {
XID auth_id; /* authorization id */ XID auth_id; /* authorization id */
CARD32 conn_time; /* timestamp if not established, else 0 */ CARD32 conn_time; /* timestamp if not established, else 0 */
struct _XtransConnInfo *trans_conn; /* transport connection object */ struct _XtransConnInfo *trans_conn; /* transport connection object */
Bool local_client;
} OsCommRec, *OsCommPtr; } OsCommRec, *OsCommPtr;
extern int FlushClient(ClientPtr /*who */ , extern int FlushClient(ClientPtr /*who */ ,