Annotation of researchv9/X11/src/X.V11R1/lib/X/XGetProp.c, revision 1.1.1.1

1.1       root        1: #include "copyright.h"
                      2: 
                      3: /* $Header: XGetProp.c,v 11.10 87/09/11 08:04:23 toddb Exp $ */
                      4: /* Copyright    Massachusetts Institute of Technology    1986  */
                      5: 
                      6: #define NEED_REPLIES
                      7: #include "Xlibint.h"
                      8: 
                      9: int
                     10: XGetWindowProperty(dpy, w, property, offset, length, delete, 
                     11:        req_type, actual_type, actual_format, nitems, bytesafter, prop)
                     12:     register Display *dpy;
                     13:     Window w;
                     14:     Atom property;
                     15:     Bool delete;
                     16:     Atom req_type;
                     17:     Atom *actual_type;
                     18:     int *actual_format;  /* 8, 16, or 32 */
                     19:     long offset, length;
                     20:     unsigned long *nitems;  /* # of 8-, 16-, or 32-bit entities */
                     21:     long *bytesafter;
                     22:     unsigned char **prop;
                     23:     {
                     24:     int errorstatus;
                     25:     xGetPropertyReply reply;
                     26:     register xGetPropertyReq *req;
                     27:     LockDisplay(dpy);
                     28:     GetReq (GetProperty, req);
                     29:     req->window = w;
                     30:     req->property = property;
                     31:     req->type = req_type;
                     32:     req->delete = delete;
                     33:     req->longOffset = offset;
                     34:     req->longLength = length;
                     35:     
                     36:     if (!(errorstatus = _XReply (dpy, (xReply *) &reply, 0, xFalse))) {
                     37:        UnlockDisplay(dpy);
                     38:        return (errorstatus);
                     39:        }       
                     40:     *actual_type = reply.propertyType;
                     41:     *actual_format = reply.format;
                     42:     *nitems = reply.nItems;
                     43:     *bytesafter = reply.bytesAfter;
                     44: 
                     45:     *prop = NULL;
                     46:     if (*nitems) switch (reply.format) {
                     47:       long nbytes;
                     48:       /* 
                     49:        * One extra byte is malloced than is needed to contain the property
                     50:        * data, but this last byte is null terminated and convenient for 
                     51:        * returing string properties, so the client doesn't then have to 
                     52:        * recopy the string to make it null terminated. 
                     53:        */
                     54:       case 8:
                     55:        *prop = (unsigned char *) Xmalloc ((unsigned)reply.nItems + (unsigned)1);
                     56:         _XReadPad (dpy, (char *) *prop, (long) reply.nItems);
                     57:        (*prop)[reply.nItems] = '\0';
                     58:         break;
                     59: 
                     60:       case 16:
                     61:         /* XXX needs rethinking for BIGSHORTS */
                     62:         nbytes = (long)reply.nItems << 1;
                     63:         *prop = (unsigned char *) Xmalloc ((unsigned)nbytes + 1);
                     64:         _XReadPad (dpy, (char *) *prop, nbytes);
                     65:        (*prop)[nbytes] = '\0';
                     66:         break;
                     67: 
                     68:       case 32:
                     69:         nbytes = (long)reply.nItems << 2;
                     70:         *prop = (unsigned char *) Xmalloc ((unsigned)nbytes + 1);
                     71:         _XRead (dpy, (char *) *prop, (long)nbytes);
                     72:        (*prop)[nbytes] = '\0';
                     73:         break;
                     74: 
                     75:       default:
                     76:        /*
                     77:         * This part of the code should never be reached.  If it is, the server
                     78:         * send back a property with an invalid format.  This is a
                     79:         * BadImplementation error. 
                     80:         */
                     81: 
                     82:         {
                     83:            xError error;
                     84: 
                     85:            error.sequenceNumber = dpy->request;
                     86:            error.type = X_Error;
                     87:            error.majorCode = X_GetProperty;
                     88:            error.minorCode = 0;
                     89:            error.errorCode = BadImplementation;
                     90:        
                     91:            _XError(dpy, &error);
                     92:        }
                     93:        break;
                     94:       }
                     95:     UnlockDisplay(dpy);
                     96:     SyncHandle();
                     97:     return(Success);
                     98: 
                     99:     }
                    100: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.