btBroadphaseProxy* btSimpleBroadphase::createProxy( const btVector3& aabbMin, const btVector3& aabbMax,int shapeType,void* userPtr , int collisionFilterGroup, int collisionFilterMask, btDispatcher* /*dispatcher*/) { if (m_numHandles >= m_maxHandles) { btAssert(0); return 0; //should never happen, but don't let the game crash ;-) } btAssert(aabbMin[0]<= aabbMax[0] && aabbMin[1]<= aabbMax[1] && aabbMin[2]<= aabbMax[2]); int newHandleIndex = allocHandle(); btSimpleBroadphaseProxy* proxy = new (&m_pHandles[newHandleIndex])btSimpleBroadphaseProxy(aabbMin,aabbMax,shapeType,userPtr,collisionFilterGroup,collisionFilterMask); return proxy; }
/* * Threaded socket accept. */ static int Naccept(int fd, struct sockaddr* addr, size_t* len) { int nfd; nfd = allocHandle(); if (nfd == -1) { return (-1); } fhand[nfd].sock = WSAAccept(fhand[fd].sock, addr, len, NULL, 0); if (fhand[nfd].sock == INVALID_SOCKET) { freeHandle(nfd); return (-1); } return (nfd); }
/* * Threaded file open. */ static int Fopen(const char* path, int mode) { int fd; fd = allocHandle(); if (fd == -1) { return (-1); } switch (mode) { case JOPEN_READ: fhand[fd].hand = CreateFile(path, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); break; case JOPEN_WRITE: fhand[fd].hand = CreateFile(path, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); break; case JOPEN_APPEND: fhand[fd].hand = CreateFile(path, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); break; case JOPEN_READWRITE: fhand[fd].hand = CreateFile(path, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); break; default: freeHandle(fd); return (-1); } // printf("Opening %s on %d %x\n", path, fd, fhand[fd].hand); if (fhand[fd].hand == INVALID_HANDLE_VALUE) { freeHandle(fd); return (-1); } else { return (fd); } }
static void *blkOpen(const char *path, fsMode_t mode) { struct fsFileControlBlock *fcb; if (mode & FS_RDWR || !(mode & (FS_READ | FS_APPEND)) || (mode & FS_READ && mode & FS_APPEND)) { fsSetError(FS_ERR_INVAL); return NULL; } fcb = fsBlockOpenFile(path, mode & FS_APPEND); if (fcb) { struct fsBlockHandle *handle = allocHandle(fcb); if (handle) { handle->mode = mode; mos_mutex_lock(&fcb->mutex); if (mode & FS_READ) /* Read mode */ { handle->pos = 0; handle->curr = fcb->first; handle->readEnd = 0; } else /* Write mode */ { /* Traverse blocks until the last one */ seekBlock(handle, fcb->size); handle->pos = fcb->size; } mos_mutex_unlock(&fcb->mutex); } else fsBlockCloseFile(fcb); return handle; } else return NULL; }
/* * Threaded socket create. */ static int Nsocket(int stream) { int fd; fd = allocHandle(); if (fd == -1) { return (-1); } if (stream == 0) { fhand[fd].sock = WSASocket(AF_INET, SOCK_DGRAM, 0, NULL, 0, 0); } else { fhand[fd].sock = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, 0); } if (fhand[fd].sock == INVALID_SOCKET) { freeHandle(fd); return (-1); } else { return (fd); } }