Merge branch 'master' of git+ssh://git.freedesktop.org/git/xorg/xserver into input-hotplug
This commit is contained in:
		
						commit
						a73cef1f00
					
				|  | @ -52,7 +52,6 @@ extern Bool xf86DoConfigurePass1; | |||
| extern int xf86ScreenIndex;		/* Index into pScreen.devPrivates */ | ||||
| extern int xf86CreateRootWindowIndex;	/* Index into pScreen.devPrivates */ | ||||
| extern int xf86PixmapIndex; | ||||
| extern Bool xf86ResAccessEnter; | ||||
| extern ScrnInfoPtr *xf86Screens;	/* List of pointers to ScrnInfoRecs */ | ||||
| extern const unsigned char byte_reversed[256]; | ||||
| extern ScrnInfoPtr xf86CurrentScreen; | ||||
|  | @ -165,9 +164,6 @@ void xf86EnablePciBusMaster(pciVideoPtr pPci, Bool enable); | |||
| #endif | ||||
| void xf86RegisterStateChangeNotificationCallback(xf86StateChangeNotificationCallbackFunc func, pointer arg); | ||||
| Bool xf86DeregisterStateChangeNotificationCallback(xf86StateChangeNotificationCallbackFunc func); | ||||
| #ifdef async | ||||
| Bool xf86QueueAsyncEvent(void (*func)(pointer),pointer arg); | ||||
| #endif | ||||
| 
 | ||||
| int xf86GetLastScrnFlag(int entityIndex); | ||||
| void xf86SetLastScrnFlag(int entityIndex, int scrnIndex); | ||||
|  |  | |||
|  | @ -65,7 +65,7 @@ xf86CurrentAccessRec xf86CurrentAccess = {NULL,NULL}; | |||
| 
 | ||||
| BusRec primaryBus = { BUS_NONE, {{0}}}; | ||||
| 
 | ||||
| Bool xf86ResAccessEnter = FALSE; | ||||
| static Bool xf86ResAccessEnter = FALSE; | ||||
| 
 | ||||
| #ifdef REDUCER | ||||
| /* Resources that temporarily conflict with estimated resources */ | ||||
|  | @ -664,32 +664,6 @@ xf86AccessRestoreState(void) | |||
|  * Otherwise resources needed for access control might be shadowed | ||||
|  * by other resources! | ||||
|  */ | ||||
| #ifdef async | ||||
| 
 | ||||
| static AsyncQPtr *AsyncQ = NULL; | ||||
| _X_EXPORT ScrnInfoPtr xf86CurrentScreen = NULL; | ||||
| 
 | ||||
| #define SETUP_Q  org = AsyncQ; \ | ||||
| 	         AsyncQ = &new; | ||||
| 
 | ||||
| #define PROCESS_Q xf86CurrentScreen = pScrn; | ||||
|                   if (!new) AsyncQ = org; \ | ||||
|                   else { \ | ||||
|                        AsyncQPtr tmp_Q; \ | ||||
|                        while (1) {\ | ||||
|                           new->func(new->arg);\ | ||||
|                           if (!(new->next)) {\ | ||||
| 			      AsyncQ = org; xfree(new); break; \ | ||||
| 			   } \ | ||||
| 			   tmp_Q = new->next; \ | ||||
| 		           xfree(new); \ | ||||
|  		           new = tmp_Q; \ | ||||
| 		       } \ | ||||
|                   } | ||||
| #else | ||||
| #define SETUP_Q | ||||
| #define PROCESS_Q | ||||
| #endif | ||||
| 
 | ||||
| _X_EXPORT void | ||||
| xf86EnableAccess(ScrnInfoPtr pScrn) | ||||
|  | @ -698,9 +672,6 @@ xf86EnableAccess(ScrnInfoPtr pScrn) | |||
|     register EntityAccessPtr pceAcc; | ||||
|     register xf86AccessPtr pAcc; | ||||
|     EntityAccessPtr tmp; | ||||
| #ifdef async | ||||
|     AsyncQPtr *org, new = NULL; | ||||
| #endif | ||||
| 
 | ||||
| #ifdef DEBUG | ||||
|     ErrorF("Enable access %i\n",pScrn->scrnIndex); | ||||
|  | @ -709,9 +680,7 @@ xf86EnableAccess(ScrnInfoPtr pScrn) | |||
|     /* Entity is not under access control or currently enabled */ | ||||
|     if (!pScrn->access) { | ||||
| 	if (pScrn->busAccess) { | ||||
| 	    SETUP_Q; | ||||
| 	    ((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess); | ||||
| 	    PROCESS_Q; | ||||
| 	} | ||||
| 	return; | ||||
|     } | ||||
|  | @ -722,7 +691,6 @@ xf86EnableAccess(ScrnInfoPtr pScrn) | |||
| 	if (peAcc == pceAcc) { | ||||
| 	    return; | ||||
| 	} | ||||
| 	SETUP_Q; | ||||
| 	if (pScrn->CurrentAccess->pMemAccess == pceAcc) | ||||
| 	    pScrn->CurrentAccess->pMemAccess = NULL; | ||||
| 	while (pceAcc) { | ||||
|  | @ -740,13 +708,11 @@ xf86EnableAccess(ScrnInfoPtr pScrn) | |||
| 	    peAcc = peAcc->next; | ||||
| 	} | ||||
| 	pScrn->CurrentAccess->pIoAccess = (EntityAccessPtr) pScrn->access; | ||||
| 	PROCESS_Q; | ||||
| 	return; | ||||
| 	 | ||||
|     case MEM_IO: | ||||
| 	pceAcc = pScrn->CurrentAccess->pIoAccess; | ||||
| 	if (peAcc != pceAcc) { /* current Io != pAccess */ | ||||
| 	    SETUP_Q; | ||||
| 	    tmp = pceAcc; | ||||
| 	    while (pceAcc) { | ||||
| 		pAcc = pceAcc->pAccess; | ||||
|  | @ -769,7 +735,6 @@ xf86EnableAccess(ScrnInfoPtr pScrn) | |||
| 	    if (pceAcc == peAcc) { /* current Mem == pAccess */ | ||||
| 		return; | ||||
| 	    } | ||||
| 	    SETUP_Q; | ||||
| 	    while (pceAcc) {  /* current Mem != pAccess */ | ||||
| 		pAcc = pceAcc->pAccess; | ||||
| 		if (pAcc && pAcc->AccessDisable)  | ||||
|  | @ -787,7 +752,6 @@ xf86EnableAccess(ScrnInfoPtr pScrn) | |||
| 	} | ||||
| 	pScrn->CurrentAccess->pMemAccess = | ||||
| 	    pScrn->CurrentAccess->pIoAccess = (EntityAccessPtr) pScrn->access; | ||||
| 	PROCESS_Q; | ||||
| 	return; | ||||
| 	 | ||||
|     case MEM: | ||||
|  | @ -795,7 +759,6 @@ xf86EnableAccess(ScrnInfoPtr pScrn) | |||
| 	if (peAcc == pceAcc) { | ||||
| 	    return; | ||||
| 	} | ||||
| 	SETUP_Q; | ||||
| 	if (pScrn->CurrentAccess->pIoAccess == pceAcc) | ||||
| 	    pScrn->CurrentAccess->pIoAccess = NULL; | ||||
| 	while (pceAcc) { | ||||
|  | @ -813,14 +776,11 @@ xf86EnableAccess(ScrnInfoPtr pScrn) | |||
| 	    peAcc = peAcc->next; | ||||
| 	} | ||||
| 	pScrn->CurrentAccess->pMemAccess = (EntityAccessPtr) pScrn->access; | ||||
| 	PROCESS_Q; | ||||
| 	return; | ||||
| 
 | ||||
|     case NONE: | ||||
| 	if (pScrn->busAccess) { | ||||
| 	    SETUP_Q; | ||||
| 	    ((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess); | ||||
| 	    PROCESS_Q; | ||||
| 	} | ||||
| 	return; | ||||
|     } | ||||
|  | @ -3160,23 +3120,6 @@ notifyStateChange(xf86NotifyState state) | |||
|     } | ||||
| } | ||||
| 
 | ||||
| #ifdef async | ||||
| _X_EXPORT Bool | ||||
| xf86QueueAsyncEvent(void (*func)(pointer),pointer arg) | ||||
| { | ||||
|     AsyncQPtr new; | ||||
|      | ||||
|     if (!AsyncQ) return FALSE; | ||||
| 
 | ||||
|     new = (AsyncQPtr)xfnalloc(sizeof(AsyncQRec)); | ||||
|     new->func = func; | ||||
|     new->arg = arg; | ||||
|     (*AsyncQPtr)->next = new; | ||||
|     AsyncQPtr = &new; | ||||
|     return TRUE; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| /* Multihead accel sharing accessor functions and entity Private handling */ | ||||
| 
 | ||||
| _X_EXPORT int | ||||
|  |  | |||
|  | @ -74,15 +74,6 @@ typedef struct { | |||
|     IOADDRESS                   domainIO; | ||||
| } EntityRec, *EntityPtr; | ||||
| 
 | ||||
| /* asynchronous event handling */ | ||||
| #ifdef async | ||||
| typedef struct _AsyncQRec { | ||||
|     void (*func)(pointer); | ||||
|     pointer arg; | ||||
|     struct _AsyncQRec *next; | ||||
| } AsyncQRec, *AsyncQPtr; | ||||
| #endif | ||||
| 
 | ||||
| #define NO_SEPARATE_IO_FROM_MEM 0x0001 | ||||
| #define NO_SEPARATE_MEM_FROM_IO 0x0002 | ||||
| #define NEED_VGA_ROUTED 0x0004 | ||||
|  |  | |||
|  | @ -129,7 +129,7 @@ DLFindSymbol(const char *name) | |||
| } | ||||
| 
 | ||||
| void * | ||||
| DLLoadModule(loaderPtr modrec, int fd, int flags) | ||||
| DLLoadModule(loaderPtr modrec, int flags) | ||||
| { | ||||
|     DLModulePtr dlfile; | ||||
|     DLModuleList *l; | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ | |||
| #ifndef _DLLOADER_H | ||||
| #define _DLLOADER_H | ||||
| 
 | ||||
| extern void *DLLoadModule(loaderPtr, int, int flags); | ||||
| extern void *DLLoadModule(loaderPtr, int flags); | ||||
| extern void DLUnloadModule(void *); | ||||
| extern void *DLFindSymbol(const char *name); | ||||
| 
 | ||||
|  |  | |||
|  | @ -313,7 +313,6 @@ LoaderOpen(const char *module, const char *cname, int handle, | |||
| { | ||||
|     loaderPtr tmp; | ||||
|     int new_handle; | ||||
|     int fd; | ||||
| 
 | ||||
| #if defined(DEBUG) | ||||
|     ErrorF("LoaderOpen(%s)\n", module); | ||||
|  | @ -369,16 +368,6 @@ LoaderOpen(const char *module, const char *cname, int handle, | |||
|     freeHandles[new_handle] = HANDLE_USED; | ||||
|     refCount[new_handle] = 1; | ||||
| 
 | ||||
|     if ((fd = open(module, O_RDONLY)) < 0) { | ||||
| 	xf86Msg(X_ERROR, "Unable to open %s\n", module); | ||||
| 	freeHandles[new_handle] = HANDLE_FREE; | ||||
| 	if (errmaj) | ||||
| 	    *errmaj = LDR_NOMODOPEN; | ||||
| 	if (errmin) | ||||
| 	    *errmin = errno; | ||||
| 	return -1; | ||||
|     } | ||||
| 
 | ||||
|     tmp = _LoaderListPush(); | ||||
|     tmp->name = malloc(strlen(module) + 1); | ||||
|     strcpy(tmp->name, module); | ||||
|  | @ -387,7 +376,7 @@ LoaderOpen(const char *module, const char *cname, int handle, | |||
|     tmp->handle = new_handle; | ||||
|     tmp->module = moduleseq++; | ||||
| 
 | ||||
|     if ((tmp->private = DLLoadModule(tmp, fd, flags)) == NULL) { | ||||
|     if ((tmp->private = DLLoadModule(tmp, flags)) == NULL) { | ||||
| 	xf86Msg(X_ERROR, "Failed to load %s\n", module); | ||||
| 	_LoaderListPop(new_handle); | ||||
| 	freeHandles[new_handle] = HANDLE_FREE; | ||||
|  | @ -398,8 +387,6 @@ LoaderOpen(const char *module, const char *cname, int handle, | |||
| 	return -1; | ||||
|     } | ||||
| 
 | ||||
|     close(fd); | ||||
| 
 | ||||
|     return new_handle; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -115,6 +115,17 @@ FreeStringList(char **paths) | |||
| 
 | ||||
| static char **defaultPathList = NULL; | ||||
| 
 | ||||
| static Bool | ||||
| PathIsAbsolute(const char *path) | ||||
| { | ||||
| #ifdef __UNIXOS2__ | ||||
|     return (*path == '/' || (strlen(path) > 2 && isalpha(elem[0]) && | ||||
| 		elem[1] == ':' && elem[2] == '/')); | ||||
| #else | ||||
|     return (*path == '/'); | ||||
| #endif | ||||
| }	 | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert a comma-separated path into a NULL-terminated array of path | ||||
|  * elements, rejecting any that are not full absolute paths, and appending | ||||
|  | @ -138,13 +149,7 @@ InitPathList(const char *path) | |||
| 	return NULL; | ||||
|     elem = strtok(fullpath, ","); | ||||
|     while (elem) { | ||||
| 	/* Only allow fully specified paths */ | ||||
| #ifndef __UNIXOS2__ | ||||
| 	if (*elem == '/') | ||||
| #else | ||||
| 	if (*elem == '/' || (strlen(elem) > 2 && isalpha(elem[0]) && | ||||
| 			     elem[1] == ':' && elem[2] == '/')) | ||||
| #endif | ||||
| 	if (PathIsAbsolute(elem)) | ||||
| 	{ | ||||
| 	    len = strlen(elem); | ||||
| 	    addslash = (elem[len - 1] != '/'); | ||||
|  | @ -750,13 +755,7 @@ LoadSubModule(ModuleDescPtr parent, const char *module, | |||
| 
 | ||||
|     xf86MsgVerb(X_INFO, 3, "Loading sub module \"%s\"\n", module); | ||||
| 
 | ||||
|     /* Absolute module paths are not allowed here */ | ||||
| #ifndef __UNIXOS2__ | ||||
|     if (module[0] == '/') | ||||
| #else | ||||
|     if (isalpha(module[0]) && module[1] == ':' && module[2] == '/') | ||||
| #endif | ||||
|     { | ||||
|     if (PathIsAbsolute(module)) { | ||||
| 	xf86Msg(X_ERROR, | ||||
| 		"LoadSubModule: Absolute module path not permitted: \"%s\"\n", | ||||
| 		module); | ||||
|  | @ -786,12 +785,7 @@ LoadSubModuleLocal(ModuleDescPtr parent, const char *module, | |||
| 
 | ||||
|     xf86MsgVerb(X_INFO, 3, "Loading local sub module \"%s\"\n", module); | ||||
| 
 | ||||
|     /* Absolute module paths are not allowed here */ | ||||
| #ifndef __UNIXOS2__ | ||||
|     if (module[0] == '/') | ||||
| #else | ||||
|     if (isalpha(module[0]) && module[1] == ':' && module[2] == '/') | ||||
| #endif | ||||
|     if (PathIsAbsolute(module)) | ||||
|     { | ||||
| 	xf86Msg(X_ERROR, | ||||
| 		"LoadSubModule: Absolute module path not permitted: \"%s\"\n", | ||||
|  | @ -908,14 +902,8 @@ doLoadModule(const char *module, const char *path, const char **subdirlist, | |||
|      * if the module name is not a full pathname, we need to | ||||
|      * check the elements in the path | ||||
|      */ | ||||
| #ifndef __UNIXOS2__ | ||||
|     if (module[0] == '/') | ||||
| 	found = xstrdup(module); | ||||
| #else | ||||
|     /* accept a drive name here */ | ||||
|     if (isalpha(module[0]) && module[1] == ':' && module[2] == '/') | ||||
| 	found = xstrdup(module); | ||||
| #endif | ||||
|     if (PathIsAbsolute(module)) | ||||
| 	xstrdup(module); | ||||
|     path_elem = pathlist; | ||||
|     while (!found && *path_elem != NULL) { | ||||
| 	found = FindModule(m, *path_elem, subdirlist, patterns); | ||||
|  |  | |||
|  | @ -354,9 +354,6 @@ _X_HIDDEN void *xfree86LookupTab[] = { | |||
|     SYMFUNC(xf86RegisterStateChangeNotificationCallback) | ||||
|     SYMFUNC(xf86DeregisterStateChangeNotificationCallback) | ||||
|     SYMFUNC(xf86NoSharedResources) | ||||
| #ifdef async | ||||
|     SYMFUNC(xf86QueueAsyncEvent) | ||||
| #endif | ||||
|     /* Shared Accel Accessor Functions */ | ||||
|     SYMFUNC(xf86GetLastScrnFlag) | ||||
|     SYMFUNC(xf86SetLastScrnFlag) | ||||
|  | @ -1139,9 +1136,6 @@ _X_HIDDEN void *xfree86LookupTab[] = { | |||
|     SYMVAR(xf86DummyVar3) | ||||
| #endif | ||||
| 
 | ||||
| #ifdef async | ||||
|     SYMVAR(xf86CurrentScreen) | ||||
| #endif | ||||
|     /* predefined resource lists from xf86Bus.h */ | ||||
|     SYMVAR(resVgaExclusive) | ||||
|     SYMVAR(resVgaShared) | ||||
|  |  | |||
							
								
								
									
										236
									
								
								record/set.c
								
								
								
								
							
							
						
						
									
										236
									
								
								record/set.c
								
								
								
								
							|  | @ -1,4 +1,3 @@ | |||
| 
 | ||||
| /*
 | ||||
| 
 | ||||
| Copyright 1995, 1998  The Open Group | ||||
|  | @ -44,9 +43,6 @@ from The Open Group. | |||
|     implemented, and RecordCreateSet will decide heuristically which one | ||||
|     to use based on the set members. | ||||
| 
 | ||||
|     Note: When compiling for use in the server, do not use -DTESTING. | ||||
|     When compiling for stand-alone testing of the set ADT, use -DTESTING. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifdef HAVE_DIX_CONFIG_H | ||||
|  | @ -55,41 +51,7 @@ from The Open Group. | |||
| 
 | ||||
| #include <string.h> | ||||
| 
 | ||||
| #ifndef TESTING | ||||
| #include "misc.h" | ||||
| #else | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| 
 | ||||
| /* stuff that you normally get from the X Server's environment */ | ||||
| 
 | ||||
| typedef int Bool; | ||||
| #ifndef TRUE | ||||
| #define TRUE 1 | ||||
| #define FALSE 0 | ||||
| #endif | ||||
| 
 | ||||
| typedef unsigned short CARD16; | ||||
| 
 | ||||
| #define xalloc malloc | ||||
| #define xfree free | ||||
| #define ALLOCATE_LOCAL malloc | ||||
| #define DEALLOCATE_LOCAL free | ||||
| 
 | ||||
| void *Xcalloc(size) | ||||
|     int size; | ||||
| { | ||||
|     void *p = malloc(size); | ||||
|     if (p) memset(p, 0, size); | ||||
|     return p; | ||||
| } | ||||
| 
 | ||||
| #ifndef max | ||||
| #define max(_a, _b) ( ((_a) > (_b)) ? (_a) : (_b) ) | ||||
| #endif | ||||
| 
 | ||||
| #endif /* TESTING */ | ||||
| 
 | ||||
| #include "set.h" | ||||
| 
 | ||||
| static int | ||||
|  | @ -402,20 +364,6 @@ bailout: | |||
|     return (RecordSetPtr)prls; | ||||
| } | ||||
| 
 | ||||
| #ifdef TESTING | ||||
| typedef enum { | ||||
|   BitVectorImplementation, IntervalListImplementation} RecordSetImplementation; | ||||
| 
 | ||||
| RecordSetImplementation _RecordSetImpl; | ||||
| 
 | ||||
| static void | ||||
| _RecordForceSetImplementation(setimpl) | ||||
|     RecordSetImplementation setimpl; | ||||
| { | ||||
|     _RecordSetImpl = setimpl; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| typedef RecordSetPtr (*RecordCreateSetProcPtr)( | ||||
|     RecordSetInterval *pIntervals, | ||||
|     int nIntervals, | ||||
|  | @ -438,12 +386,8 @@ _RecordSetMemoryRequirements(RecordSetInterval *pIntervals, int nIntervals, | |||
| 					    &bma); | ||||
|     rlsize = IntervalListMemoryRequirements(pIntervals, nIntervals, maxMember, | ||||
| 					    &rla); | ||||
| #ifdef TESTING | ||||
|     if (_RecordSetImpl == BitVectorImplementation) | ||||
| #else | ||||
|     if ( ( (nIntervals > 1) && (maxMember <= 255) ) | ||||
| 	|| (bmsize < rlsize) ) | ||||
| #endif | ||||
|     { | ||||
| 	*alignment = bma; | ||||
| 	*ppCreateSet = BitVectorCreateSet; | ||||
|  | @ -492,183 +436,3 @@ RecordCreateSet(pIntervals, nIntervals, pMem, memsize) | |||
|     } | ||||
|     return (*pCreateSet)(pIntervals, nIntervals, pMem, size); | ||||
| } | ||||
| 
 | ||||
| /***************************************************************************/ | ||||
| 
 | ||||
| #ifdef TESTING | ||||
| 
 | ||||
| /*
 | ||||
| 
 | ||||
| Test Strategy | ||||
| 
 | ||||
| Having two set representations is convenient for testing because we | ||||
| can play them against each other.  The test code will be able to | ||||
| specify which implementation to use.  This breaks the encapsulation, | ||||
| but that seems acceptable for testing.  The crux of the test loop | ||||
| looks like this: | ||||
| 
 | ||||
| loop: | ||||
|     generate random list of Intervals | ||||
| 
 | ||||
|     create set A using bit vector implementation | ||||
|     create set B using Interval list implementation | ||||
| 
 | ||||
|     for each possible set member | ||||
|         if set A and set B disagree on whether this is a member    error; | ||||
| 
 | ||||
|     iterate over both sets, comparing the intervals returned by each. | ||||
|     if intervals or number of intervals are different    error; | ||||
| 
 | ||||
|     iterate over intervals of set A | ||||
| 	for i = interval.first to interval.last | ||||
| 	    if i is not a member of set B	error; | ||||
| 
 | ||||
|     iterate over intervals of set B | ||||
| 	for i = interval.first to interval.last | ||||
| 	    if i is not a member of set A	error; | ||||
| 
 | ||||
|     destroy sets A, B | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| int GenerateRandomIntervals(pIntervals, maxintervals) | ||||
|     RecordSetInterval *pIntervals; | ||||
|     int maxintervals; | ||||
| { | ||||
|     int i, nIntervals; | ||||
| 
 | ||||
|     nIntervals = rand() % maxintervals; | ||||
| 
 | ||||
|     for (i = 0; i < nIntervals; i++) | ||||
|     { | ||||
| 	pIntervals[i].first = rand(); | ||||
| 	pIntervals[i].last  = pIntervals[i].first + rand(); | ||||
|     } | ||||
|     return nIntervals; | ||||
| } | ||||
| 
 | ||||
| #define MAXINTERVALS 100 | ||||
| 
 | ||||
| int main(argc, argv) | ||||
|     int argc; | ||||
|     char **argv; | ||||
| { | ||||
|     RecordSetPtr bs, rs; | ||||
|     RecordSetInterval br, rr; | ||||
|     RecordSetIteratePtr bi, ri; | ||||
|     CARD16 i; | ||||
|     int testcount; | ||||
|     RecordSetInterval intervals[MAXINTERVALS]; | ||||
|     int nIntervals; | ||||
|     int bsize, rsize; | ||||
|     int balign, ralign; | ||||
|     int pad; | ||||
| 
 | ||||
|     for (testcount = 0; 1; testcount++) | ||||
|     { | ||||
| 	nIntervals = GenerateRandomIntervals(intervals, MAXINTERVALS); | ||||
| 	printf("%d nIntervals %d\n", testcount, nIntervals); | ||||
| 
 | ||||
| 	if (testcount & 1) | ||||
| 	{ | ||||
| 	    _RecordForceSetImplementation(BitVectorImplementation); | ||||
| 	    bsize = RecordSetMemoryRequirements(intervals, nIntervals, &balign); | ||||
| 	    _RecordForceSetImplementation(IntervalListImplementation); | ||||
| 	    rsize = RecordSetMemoryRequirements(intervals, nIntervals, &ralign); | ||||
| 	    pad = (ralign - (bsize & (ralign - 1))) & (ralign - 1); | ||||
| 	    bs = (RecordSetPtr)xalloc(bsize + pad + rsize ); | ||||
| 	    if (!bs) | ||||
| 	    { | ||||
| 		fprintf(stderr, "%d: failed to alloc memory for  sets\n", | ||||
| 			testcount); | ||||
| 		continue; | ||||
| 	    } | ||||
| 	    rs = (RecordSetPtr)(((char *)bs) + bsize + pad); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 	    bs = rs = NULL; | ||||
| 	    bsize = rsize = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	_RecordForceSetImplementation(BitVectorImplementation); | ||||
| 	bs = RecordCreateSet(intervals, nIntervals, bs, bsize); | ||||
| 	_RecordForceSetImplementation(IntervalListImplementation); | ||||
| 	rs = RecordCreateSet(intervals, nIntervals, rs, rsize); | ||||
| 
 | ||||
| 	if (!bs || !rs) | ||||
| 	{ | ||||
| 	    fprintf(stderr, "%d: failed to create sets\n", testcount); | ||||
| 	    continue; | ||||
| 	} | ||||
| 
 | ||||
| 	for (i = 0; i < 65535; i++) | ||||
| 	{ | ||||
| 	    unsigned long b, r; | ||||
| 
 | ||||
| 	    b = RecordIsMemberOfSet(bs, i); | ||||
| 	    r = RecordIsMemberOfSet(rs, i); | ||||
| 	    if ( (b && !r) || (!b && r) ) | ||||
| 	    { | ||||
| 		fprintf(stderr, "%d: isMemberOfSet %d\n", | ||||
| 			testcount, (int)i); | ||||
| 	    } | ||||
| 	} | ||||
| 
 | ||||
| 	bi = RecordIterateSet(bs, NULL, &br); | ||||
| 	ri = RecordIterateSet(rs, NULL, &rr); | ||||
| 
 | ||||
| 	while (bi && ri) | ||||
| 	{ | ||||
| 	    if ( (rr.first != br.first) || (rr.last != br.last) ) | ||||
| 	    { | ||||
| 		fprintf(stderr, "%d: iterateSet interval value mismatch\n", | ||||
| 			testcount); | ||||
| 	    } | ||||
| 	    bi = RecordIterateSet(bs, bi, &br); | ||||
| 	    ri = RecordIterateSet(rs, ri, &rr); | ||||
| 	} | ||||
| 	if (bi != ri) | ||||
| 	{ | ||||
| 	    fprintf(stderr, "%d: iterateSet interval count mismatch\n", | ||||
| 		    testcount); | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	bi = NULL; | ||||
| 	while (bi = RecordIterateSet(bs, bi, &br)) | ||||
| 	{ | ||||
| 	    for (i = br.first; i <= br.last; i++) | ||||
| 	    { | ||||
| 		if (!RecordIsMemberOfSet(rs, i)) | ||||
| 		{ | ||||
| 		    fprintf(stderr, "%d: iterateSet b / isMemberOfSet r %d\n", | ||||
| 			    testcount, (int)i); | ||||
| 		} | ||||
| 	    } | ||||
| 	} | ||||
| 
 | ||||
| 	ri = NULL; | ||||
| 	while (ri = RecordIterateSet(rs, ri, &rr)) | ||||
| 	{ | ||||
| 	    for (i = rr.first; i <= rr.last; i++) | ||||
| 	    { | ||||
| 		if (!RecordIsMemberOfSet(bs, i) ) | ||||
| 		{ | ||||
| 		    fprintf(stderr, "%d: iterateSet r / isMemberOfSet b %d\n", | ||||
| 			    testcount, (int)i); | ||||
| 		} | ||||
| 	    } | ||||
| 	} | ||||
| 
 | ||||
| 	RecordDestroySet(bs); | ||||
| 	RecordDestroySet(rs); | ||||
| 
 | ||||
| 	if (testcount & 1) | ||||
| 	{ | ||||
| 	    xfree(bs); | ||||
| 	} | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #endif /* TESTING */ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue