diff options
Diffstat (limited to 'src/XvMC.c')
-rw-r--r-- | src/XvMC.c | 543 |
1 files changed, 267 insertions, 276 deletions
@@ -22,40 +22,37 @@ static XExtensionInfo _xvmc_info_data; static XExtensionInfo *xvmc_info = &_xvmc_info_data; static const char *xvmc_extension_name = XvMCName; -static const char *xvmc_error_list[] = -{ - "BadContext", - "BadSurface", - "BadSubpicture" +static const char *xvmc_error_list[] = { + "BadContext", + "BadSurface", + "BadSubpicture" }; -static XEXT_GENERATE_CLOSE_DISPLAY (xvmc_close_display, xvmc_info) - - -static XEXT_GENERATE_ERROR_STRING (xvmc_error_string, xvmc_extension_name, - XvMCNumErrors, xvmc_error_list) - +static XEXT_GENERATE_CLOSE_DISPLAY(xvmc_close_display, xvmc_info) +static XEXT_GENERATE_ERROR_STRING(xvmc_error_string, xvmc_extension_name, + XvMCNumErrors, xvmc_error_list) static XExtensionHooks xvmc_extension_hooks = { - NULL, /* create_gc */ - NULL, /* copy_gc */ - NULL, /* flush_gc */ - NULL, /* free_gc */ - NULL, /* create_font */ - NULL, /* free_font */ - xvmc_close_display, /* close_display */ - NULL, /* wire_to_event */ - NULL, /* event_to_wire */ - NULL, /* error */ - xvmc_error_string /* error_string */ + NULL, /* create_gc */ + NULL, /* copy_gc */ + NULL, /* flush_gc */ + NULL, /* free_gc */ + NULL, /* create_font */ + NULL, /* free_font */ + xvmc_close_display, /* close_display */ + NULL, /* wire_to_event */ + NULL, /* event_to_wire */ + NULL, /* error */ + xvmc_error_string /* error_string */ }; -static XEXT_GENERATE_FIND_DISPLAY (xvmc_find_display, xvmc_info, - xvmc_extension_name, - &xvmc_extension_hooks, - XvMCNumEvents, NULL) +static XEXT_GENERATE_FIND_DISPLAY(xvmc_find_display, xvmc_info, + xvmc_extension_name, + &xvmc_extension_hooks, + XvMCNumEvents, NULL) -Bool XvMCQueryExtension (Display *dpy, int *event_basep, int *error_basep) +Bool +XvMCQueryExtension(Display *dpy, int *event_basep, int *error_basep) { XExtDisplayInfo *info = xvmc_find_display(dpy); @@ -63,35 +60,37 @@ Bool XvMCQueryExtension (Display *dpy, int *event_basep, int *error_basep) *event_basep = info->codes->first_event; *error_basep = info->codes->first_error; return True; - } else { + } + else { return False; } } -Status XvMCQueryVersion (Display *dpy, int *major, int *minor) +Status +XvMCQueryVersion(Display *dpy, int *major, int *minor) { XExtDisplayInfo *info = xvmc_find_display(dpy); xvmcQueryVersionReply rep; - xvmcQueryVersionReq *req; + xvmcQueryVersionReq *req; - XvMCCheckExtension (dpy, info, BadImplementation); + XvMCCheckExtension(dpy, info, BadImplementation); - LockDisplay (dpy); - XvMCGetReq (QueryVersion, req); - if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { - UnlockDisplay (dpy); - SyncHandle (); + LockDisplay(dpy); + XvMCGetReq(QueryVersion, req); + if (!_XReply(dpy, (xReply *) &rep, 0, xTrue)) { + UnlockDisplay(dpy); + SyncHandle(); return BadImplementation; } *major = rep.major; *minor = rep.minor; - UnlockDisplay (dpy); - SyncHandle (); + UnlockDisplay(dpy); + SyncHandle(); return Success; } - -XvMCSurfaceInfo * XvMCListSurfaceTypes(Display *dpy, XvPortID port, int *num) +XvMCSurfaceInfo * +XvMCListSurfaceTypes(Display *dpy, XvPortID port, int *num) { XExtDisplayInfo *info = xvmc_find_display(dpy); xvmcListSurfaceTypesReply rep; @@ -100,123 +99,120 @@ XvMCSurfaceInfo * XvMCListSurfaceTypes(Display *dpy, XvPortID port, int *num) *num = 0; - XvMCCheckExtension (dpy, info, NULL); + XvMCCheckExtension(dpy, info, NULL); - LockDisplay (dpy); - XvMCGetReq (ListSurfaceTypes, req); + LockDisplay(dpy); + XvMCGetReq(ListSurfaceTypes, req); req->port = port; - if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) { - UnlockDisplay (dpy); - SyncHandle (); + if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); return NULL; } - if(rep.num > 0) { + if (rep.num > 0) { if (rep.num < (INT_MAX / sizeof(XvMCSurfaceInfo))) surface_info = Xmalloc(rep.num * sizeof(XvMCSurfaceInfo)); - if(surface_info) { - xvmcSurfaceInfo sinfo; - CARD32 i; - - *num = rep.num; - - for(i = 0; i < rep.num; i++) { - _XRead(dpy, (char*)&sinfo, sizeof(xvmcSurfaceInfo)); - surface_info[i].surface_type_id = sinfo.surface_type_id; - surface_info[i].chroma_format = sinfo.chroma_format; - surface_info[i].max_width = sinfo.max_width; - surface_info[i].max_height = sinfo.max_height; - surface_info[i].subpicture_max_width = - sinfo.subpicture_max_width; - surface_info[i].subpicture_max_height = - sinfo.subpicture_max_height; - surface_info[i].mc_type = sinfo.mc_type; - surface_info[i].flags = sinfo.flags; - } - } else - _XEatDataWords(dpy, rep.length); + if (surface_info) { + xvmcSurfaceInfo sinfo; + CARD32 i; + + *num = rep.num; + + for (i = 0; i < rep.num; i++) { + _XRead(dpy, (char *) &sinfo, sizeof(xvmcSurfaceInfo)); + surface_info[i].surface_type_id = sinfo.surface_type_id; + surface_info[i].chroma_format = sinfo.chroma_format; + surface_info[i].max_width = sinfo.max_width; + surface_info[i].max_height = sinfo.max_height; + surface_info[i].subpicture_max_width = + sinfo.subpicture_max_width; + surface_info[i].subpicture_max_height = + sinfo.subpicture_max_height; + surface_info[i].mc_type = sinfo.mc_type; + surface_info[i].flags = sinfo.flags; + } + } + else + _XEatDataWords(dpy, rep.length); } - UnlockDisplay (dpy); - SyncHandle (); + UnlockDisplay(dpy); + SyncHandle(); return surface_info; } - -XvImageFormatValues * XvMCListSubpictureTypes ( - Display * dpy, - XvPortID port, - int surface_type_id, - int *count_return -) +XvImageFormatValues * +XvMCListSubpictureTypes(Display *dpy, + XvPortID port, + int surface_type_id, + int *count_return) { XExtDisplayInfo *info = xvmc_find_display(dpy); xvmcListSubpictureTypesReply rep; xvmcListSubpictureTypesReq *req; XvImageFormatValues *ret = NULL; - *count_return = 0; - XvMCCheckExtension (dpy, info, NULL); - + XvMCCheckExtension(dpy, info, NULL); - LockDisplay (dpy); - XvMCGetReq (ListSubpictureTypes, req); + LockDisplay(dpy); + XvMCGetReq(ListSubpictureTypes, req); req->port = port; req->surface_type_id = surface_type_id; - if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) { - UnlockDisplay (dpy); - SyncHandle (); + if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); return NULL; } - if(rep.num > 0) { + if (rep.num > 0) { if (rep.num < (INT_MAX / sizeof(XvImageFormatValues))) ret = Xmalloc(rep.num * sizeof(XvImageFormatValues)); - if(ret) { + if (ret) { xvImageFormatInfo Info; CARD32 i; *count_return = rep.num; - for(i = 0; i < rep.num; i++) { - _XRead(dpy, (char*)(&Info), sz_xvImageFormatInfo); - ret[i].id = Info.id; - ret[i].type = Info.type; - ret[i].byte_order = Info.byte_order; - memcpy(&(ret[i].guid[0]), &(Info.guid[0]), 16); - ret[i].bits_per_pixel = Info.bpp; - ret[i].format = Info.format; - ret[i].num_planes = Info.num_planes; - ret[i].depth = Info.depth; - ret[i].red_mask = Info.red_mask; - ret[i].green_mask = Info.green_mask; - ret[i].blue_mask = Info.blue_mask; - ret[i].y_sample_bits = Info.y_sample_bits; - ret[i].u_sample_bits = Info.u_sample_bits; - ret[i].v_sample_bits = Info.v_sample_bits; - ret[i].horz_y_period = Info.horz_y_period; - ret[i].horz_u_period = Info.horz_u_period; - ret[i].horz_v_period = Info.horz_v_period; - ret[i].vert_y_period = Info.vert_y_period; - ret[i].vert_u_period = Info.vert_u_period; - ret[i].vert_v_period = Info.vert_v_period; - memcpy(&(ret[i].component_order[0]), &(Info.comp_order[0]), 32); - ret[i].scanline_order = Info.scanline_order; + for (i = 0; i < rep.num; i++) { + _XRead(dpy, (char *) (&Info), sz_xvImageFormatInfo); + ret[i].id = Info.id; + ret[i].type = Info.type; + ret[i].byte_order = Info.byte_order; + memcpy(&(ret[i].guid[0]), &(Info.guid[0]), 16); + ret[i].bits_per_pixel = Info.bpp; + ret[i].format = Info.format; + ret[i].num_planes = Info.num_planes; + ret[i].depth = Info.depth; + ret[i].red_mask = Info.red_mask; + ret[i].green_mask = Info.green_mask; + ret[i].blue_mask = Info.blue_mask; + ret[i].y_sample_bits = Info.y_sample_bits; + ret[i].u_sample_bits = Info.u_sample_bits; + ret[i].v_sample_bits = Info.v_sample_bits; + ret[i].horz_y_period = Info.horz_y_period; + ret[i].horz_u_period = Info.horz_u_period; + ret[i].horz_v_period = Info.horz_v_period; + ret[i].vert_y_period = Info.vert_y_period; + ret[i].vert_u_period = Info.vert_u_period; + ret[i].vert_v_period = Info.vert_v_period; + memcpy(&(ret[i].component_order[0]), &(Info.comp_order[0]), 32); + ret[i].scanline_order = Info.scanline_order; } - } else - _XEatDataWords(dpy, rep.length); + } + else + _XEatDataWords(dpy, rep.length); } - UnlockDisplay (dpy); - SyncHandle (); + UnlockDisplay(dpy); + SyncHandle(); return ret; } - /****************************************************************** These are intended as a protocol interface to be used by direct rendering libraries. They are not intended to be client viewable @@ -238,13 +234,11 @@ XvImageFormatValues * XvMCListSubpictureTypes ( an XVMC_DIRECT context was specified. */ - -Status _xvmc_create_context ( - Display *dpy, - XvMCContext *context, - int *priv_count, - CARD32 **priv_data -) +Status +_xvmc_create_context(Display *dpy, + XvMCContext *context, + int *priv_count, + CARD32 **priv_data) { XExtDisplayInfo *info = xvmc_find_display(dpy); xvmcCreateContextReply rep; @@ -253,10 +247,10 @@ Status _xvmc_create_context ( *priv_count = 0; *priv_data = NULL; - XvMCCheckExtension (dpy, info, BadImplementation); + XvMCCheckExtension(dpy, info, BadImplementation); - LockDisplay (dpy); - XvMCGetReq (CreateContext, req); + LockDisplay(dpy); + XvMCGetReq(CreateContext, req); context->context_id = XAllocID(dpy); req->context_id = context->context_id; req->port = context->port; @@ -264,49 +258,47 @@ Status _xvmc_create_context ( req->width = context->width; req->height = context->height; req->flags = context->flags; - if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) { - UnlockDisplay (dpy); - SyncHandle (); + if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); return BadImplementation; } context->width = rep.width_actual; context->height = rep.height_actual; context->flags = rep.flags_return; - if(rep.length) { - if (rep.length < (INT_MAX >> 2)) - *priv_data = Xmalloc(rep.length << 2); - if(*priv_data) { - _XRead(dpy, (char*)(*priv_data), rep.length << 2); - *priv_count = rep.length; - } else - _XEatDataWords(dpy, rep.length); + if (rep.length) { + if (rep.length < (INT_MAX >> 2)) + *priv_data = Xmalloc(rep.length << 2); + if (*priv_data) { + _XRead(dpy, (char *) (*priv_data), rep.length << 2); + *priv_count = rep.length; + } + else + _XEatDataWords(dpy, rep.length); } - UnlockDisplay (dpy); - SyncHandle (); + UnlockDisplay(dpy); + SyncHandle(); return Success; } -Status _xvmc_destroy_context ( - Display *dpy, - XvMCContext *context -) +Status +_xvmc_destroy_context(Display *dpy, XvMCContext *context) { XExtDisplayInfo *info = xvmc_find_display(dpy); xvmcDestroyContextReq *req; - XvMCCheckExtension (dpy, info, BadImplementation); + XvMCCheckExtension(dpy, info, BadImplementation); - LockDisplay (dpy); - XvMCGetReq (DestroyContext, req); + LockDisplay(dpy); + XvMCGetReq(DestroyContext, req); req->context_id = context->context_id; - UnlockDisplay (dpy); - SyncHandle (); + UnlockDisplay(dpy); + SyncHandle(); return Success; } - /* _xvmc_create_surface - @@ -321,13 +313,12 @@ Status _xvmc_destroy_context ( */ -Status _xvmc_create_surface ( - Display *dpy, - XvMCContext *context, - XvMCSurface *surface, - int *priv_count, - CARD32 **priv_data -) +Status +_xvmc_create_surface(Display *dpy, + XvMCContext *context, + XvMCSurface *surface, + int *priv_count, + CARD32 **priv_data) { XExtDisplayInfo *info = xvmc_find_display(dpy); xvmcCreateSurfaceReply rep; @@ -336,10 +327,10 @@ Status _xvmc_create_surface ( *priv_count = 0; *priv_data = NULL; - XvMCCheckExtension (dpy, info, BadImplementation); + XvMCCheckExtension(dpy, info, BadImplementation); - LockDisplay (dpy); - XvMCGetReq (CreateSurface, req); + LockDisplay(dpy); + XvMCGetReq(CreateSurface, req); surface->surface_id = XAllocID(dpy); surface->context_id = context->context_id; @@ -349,42 +340,41 @@ Status _xvmc_create_surface ( req->surface_id = surface->surface_id; req->context_id = surface->context_id; - if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) { - UnlockDisplay (dpy); - SyncHandle (); + if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); return BadImplementation; } - if(rep.length) { + if (rep.length) { if (rep.length < (INT_MAX >> 2)) *priv_data = Xmalloc(rep.length << 2); - if(*priv_data) { - _XRead(dpy, (char*)(*priv_data), rep.length << 2); + if (*priv_data) { + _XRead(dpy, (char *) (*priv_data), rep.length << 2); *priv_count = rep.length; - } else + } + else _XEatDataWords(dpy, rep.length); } - UnlockDisplay (dpy); - SyncHandle (); + UnlockDisplay(dpy); + SyncHandle(); return Success; } -Status _xvmc_destroy_surface ( - Display *dpy, - XvMCSurface *surface -) +Status +_xvmc_destroy_surface(Display *dpy, XvMCSurface *surface) { XExtDisplayInfo *info = xvmc_find_display(dpy); xvmcDestroySurfaceReq *req; - XvMCCheckExtension (dpy, info, BadImplementation); + XvMCCheckExtension(dpy, info, BadImplementation); - LockDisplay (dpy); - XvMCGetReq (DestroySurface, req); + LockDisplay(dpy); + XvMCGetReq(DestroySurface, req); req->surface_id = surface->surface_id; - UnlockDisplay (dpy); - SyncHandle (); + UnlockDisplay(dpy); + SyncHandle(); return Success; } @@ -403,13 +393,12 @@ Status _xvmc_destroy_surface ( */ -Status _xvmc_create_subpicture ( - Display *dpy, - XvMCContext *context, - XvMCSubpicture *subpicture, - int *priv_count, - CARD32 **priv_data -) +Status +_xvmc_create_subpicture(Display *dpy, + XvMCContext *context, + XvMCSubpicture *subpicture, + int *priv_count, + CARD32 **priv_data) { XExtDisplayInfo *info = xvmc_find_display(dpy); xvmcCreateSubpictureReply rep; @@ -418,10 +407,10 @@ Status _xvmc_create_subpicture ( *priv_count = 0; *priv_data = NULL; - XvMCCheckExtension (dpy, info, BadImplementation); + XvMCCheckExtension(dpy, info, BadImplementation); - LockDisplay (dpy); - XvMCGetReq (CreateSubpicture, req); + LockDisplay(dpy); + XvMCGetReq(CreateSubpicture, req); subpicture->subpicture_id = XAllocID(dpy); subpicture->context_id = context->context_id; @@ -431,9 +420,9 @@ Status _xvmc_create_subpicture ( req->xvimage_id = subpicture->xvimage_id; req->width = subpicture->width; req->height = subpicture->height; - if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) { - UnlockDisplay (dpy); - SyncHandle (); + if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); return BadImplementation; } @@ -446,44 +435,44 @@ Status _xvmc_create_subpicture ( subpicture->component_order[2] = rep.component_order[2]; subpicture->component_order[3] = rep.component_order[3]; - if(rep.length) { + if (rep.length) { if (rep.length < (INT_MAX >> 2)) *priv_data = Xmalloc(rep.length << 2); - if(*priv_data) { - _XRead(dpy, (char*)(*priv_data), rep.length << 2); + if (*priv_data) { + _XRead(dpy, (char *) (*priv_data), rep.length << 2); *priv_count = rep.length; - } else + } + else _XEatDataWords(dpy, rep.length); } - UnlockDisplay (dpy); - SyncHandle (); + UnlockDisplay(dpy); + SyncHandle(); return Success; } -Status _xvmc_destroy_subpicture( - Display *dpy, - XvMCSubpicture *subpicture -) +Status +_xvmc_destroy_subpicture(Display *dpy, XvMCSubpicture *subpicture) { XExtDisplayInfo *info = xvmc_find_display(dpy); xvmcDestroySubpictureReq *req; - XvMCCheckExtension (dpy, info, BadImplementation); + XvMCCheckExtension(dpy, info, BadImplementation); - LockDisplay (dpy); - XvMCGetReq (DestroySubpicture, req); + LockDisplay(dpy); + XvMCGetReq(DestroySubpicture, req); req->subpicture_id = subpicture->subpicture_id; - UnlockDisplay (dpy); - SyncHandle (); + UnlockDisplay(dpy); + SyncHandle(); return Success; } -Status XvMCGetDRInfo(Display *dpy, XvPortID port, - char **name, char **busID, - int *major, int *minor, - int *patchLevel, - int *isLocal) +Status +XvMCGetDRInfo(Display *dpy, XvPortID port, + char **name, char **busID, + int *major, int *minor, + int *patchLevel, + int *isLocal) { XExtDisplayInfo *info = xvmc_find_display(dpy); xvmcGetDRInfoReply rep; @@ -495,6 +484,7 @@ Status XvMCGetDRInfo(Display *dpy, XvPortID port, volatile CARD32 *shMem; struct timezone here; struct timeval now; + here.tz_minuteswest = 0; here.tz_dsttime = 0; #endif @@ -502,10 +492,10 @@ Status XvMCGetDRInfo(Display *dpy, XvPortID port, *name = NULL; *busID = NULL; - XvMCCheckExtension (dpy, info, BadImplementation); + XvMCCheckExtension(dpy, info, BadImplementation); - LockDisplay (dpy); - XvMCGetReq (GetDRInfo, req); + LockDisplay(dpy); + XvMCGetReq(GetDRInfo, req); req->port = port; magic = 0; @@ -524,84 +514,86 @@ Status XvMCGetDRInfo(Display *dpy, XvPortID port, */ if (shmKey >= 0) { - shMem = (CARD32 *) shmat(shmKey, NULL, 0); - shmctl(shmKey, IPC_RMID, NULL); - if (shMem != (void *) -1) { - - register volatile CARD32 *shMemC = shMem; - register int i; - - gettimeofday( &now, &here); - magic = now.tv_usec & 0x000FFFFF; - req->magic = magic; - i = 1024 / sizeof(CARD32); - while(i--) { - *shMemC++ = magic; - magic = ~magic; - } - } else { - req->shmKey = -1; - shmKey = -1; - } + shMem = (CARD32 *) shmat(shmKey, NULL, 0); + shmctl(shmKey, IPC_RMID, NULL); + if (shMem != (void *) -1) { + + register volatile CARD32 *shMemC = shMem; + register int i; + + gettimeofday(&now, &here); + magic = now.tv_usec & 0x000FFFFF; + req->magic = magic; + i = 1024 / sizeof(CARD32); + while (i--) { + *shMemC++ = magic; + magic = ~magic; + } + } + else { + req->shmKey = -1; + shmKey = -1; + } } #else req->shmKey = 0; #endif - if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) { - UnlockDisplay (dpy); - SyncHandle (); + if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); #ifdef HAVE_SHMAT - if (shmKey >= 0) { - shmdt( (const void *) shMem ); - } + if (shmKey >= 0) { + shmdt((const void *) shMem); + } #endif return -1; } #ifdef HAVE_SHMAT if (shmKey >= 0) { - shmdt( (const void *) shMem ); + shmdt((const void *) shMem); } #endif if (rep.length > 0) { - unsigned long realSize = 0; - char *tmpBuf = NULL; - - if ((rep.length < (INT_MAX >> 2)) && - /* protect against overflow in strncpy below */ - (rep.nameLen + rep.busIDLen > rep.nameLen)) { - realSize = rep.length << 2; - if (realSize >= (rep.nameLen + rep.busIDLen)) { - tmpBuf = Xmalloc(realSize); - *name = Xmalloc(rep.nameLen); - *busID = Xmalloc(rep.busIDLen); - } - } - - if (*name && *busID && tmpBuf) { - _XRead(dpy, tmpBuf, realSize); - strncpy(*name,tmpBuf,rep.nameLen); - (*name)[rep.nameLen == 0 ? 0 : rep.nameLen - 1] = '\0'; - strncpy(*busID,tmpBuf+rep.nameLen,rep.busIDLen); - (*busID)[rep.busIDLen == 0 ? 0 : rep.busIDLen - 1] = '\0'; - XFree(tmpBuf); - } else { - XFree(*name); - *name = NULL; - XFree(*busID); - *busID = NULL; - XFree(tmpBuf); - - _XEatDataWords(dpy, rep.length); - UnlockDisplay (dpy); - SyncHandle (); - return -1; - - } + unsigned long realSize = 0; + char *tmpBuf = NULL; + + if ((rep.length < (INT_MAX >> 2)) && + /* protect against overflow in strncpy below */ + (rep.nameLen + rep.busIDLen > rep.nameLen)) { + realSize = rep.length << 2; + if (realSize >= (rep.nameLen + rep.busIDLen)) { + tmpBuf = Xmalloc(realSize); + *name = Xmalloc(rep.nameLen); + *busID = Xmalloc(rep.busIDLen); + } + } + + if (*name && *busID && tmpBuf) { + _XRead(dpy, tmpBuf, realSize); + strncpy(*name, tmpBuf, rep.nameLen); + (*name)[rep.nameLen == 0 ? 0 : rep.nameLen - 1] = '\0'; + strncpy(*busID, tmpBuf + rep.nameLen, rep.busIDLen); + (*busID)[rep.busIDLen == 0 ? 0 : rep.busIDLen - 1] = '\0'; + XFree(tmpBuf); + } + else { + XFree(*name); + *name = NULL; + XFree(*busID); + *busID = NULL; + XFree(tmpBuf); + + _XEatDataWords(dpy, rep.length); + UnlockDisplay(dpy); + SyncHandle(); + return -1; + + } } - UnlockDisplay (dpy); - SyncHandle (); + UnlockDisplay(dpy); + SyncHandle(); *major = rep.major; *minor = rep.minor; *patchLevel = rep.patchLevel; @@ -613,4 +605,3 @@ Status XvMCGetDRInfo(Display *dpy, XvPortID port, *isLocal = 1; return (rep.length > 0) ? Success : BadImplementation; } - |