void reset_response_record(ResponseRecord *rec) { rec->statusCode->length = 0; rec->statusMessage->length = 0; //Delete all header strings for (size_t i = 0; i < rec->headerNames->length; ++i) { deleteString(arrayGet(rec->headerNames, i)); arraySet(rec->headerNames, i, NULL); } for (size_t i = 0; i < rec->headerValues->length; ++i) { deleteString(arrayGet(rec->headerValues, i)); arraySet(rec->headerValues, i, NULL); } rec->headerNames->length = 0; rec->headerValues->length = 0; if (rec->map.buffer != NULL && rec->map.buffer != MAP_FAILED) { munmap(rec->map.buffer, rec->map.length); rec->map.buffer = NULL; rec->map.length = 0; } if (rec->fd >= 0) { close(rec->fd); rec->fd = -1; } rec->headerBuffer.length = 0; rec->bodyBuffer.length = 0; }
String *responseRecordGetHeader(ResponseRecord *rec, const char *name) { for (size_t i = 0; i < rec->headerNames->length; ++i) { String *thisName = arrayGet(rec->headerNames, i); if (stringEqualsCString(thisName, name)) { return arrayGet(rec->headerValues, i); } } return NULL; }
static String *get_header_value(const char *name, RequestRecord *rec) { for (size_t i = 0; i < rec->headerNames->length; ++i) { String *thisName = arrayGet(rec->headerNames, i); if (stringEqualsCString(thisName, name)) { return arrayGet(rec->headerValues, i); } } return NULL; }
void reset_request_record(RequestRecord *rec) { rec->host->length = 0; rec->port->length = 0; rec->method->length = 0; rec->protocol->length = 0; rec->path->length = 0; rec->queryString->length = 0; //Delete all header strings for (size_t i = 0; i < rec->headerNames->length; ++i) { deleteString(arrayGet(rec->headerNames, i)); arraySet(rec->headerNames, i, NULL); } for (size_t i = 0; i < rec->headerValues->length; ++i) { deleteString(arrayGet(rec->headerValues, i)); arraySet(rec->headerValues, i, NULL); } rec->headerNames->length = 0; rec->headerValues->length = 0; //Delete all parameter strings for (size_t i = 0; i < rec->parameterNames->length; ++i) { deleteString(arrayGet(rec->parameterNames, i)); arraySet(rec->parameterNames, i, NULL); } for (size_t i = 0; i < rec->parameterValues->length; ++i) { deleteString(arrayGet(rec->parameterValues, i)); arraySet(rec->parameterValues, i, NULL); } rec->parameterNames->length = 0; rec->parameterValues->length = 0; if (rec->map.buffer != NULL && rec->map.buffer != MAP_FAILED) { munmap(rec->map.buffer, rec->map.length); rec->map.buffer = NULL; rec->map.length = 0; } if (rec->fd >= 0) { close(rec->fd); rec->fd = -1; } rec->headerBuffer.length = 0; rec->bodyBuffer.length = 0; }
/** * Removes stale file descriptors and initializes file descriptor sets. */ static void prepareForSelect(Selector* selector) { fd_set* exceptFds = &selector->exceptFds; fd_set* readFds = &selector->readFds; fd_set* writeFds = &selector->writeFds; FD_ZERO(exceptFds); FD_ZERO(readFds); FD_ZERO(writeFds); Array* selectableFds = selector->selectableFds; int i = 0; selector->maxFd = 0; int size = arraySize(selectableFds); while (i < size) { SelectableFd* selectableFd = arrayGet(selectableFds, i); if (selectableFd->remove) { // This descriptor should be removed. arrayRemove(selectableFds, i); size--; if (selectableFd->onRemove != NULL) { selectableFd->onRemove(selectableFd); } free(selectableFd); } else { if (selectableFd->beforeSelect != NULL) { selectableFd->beforeSelect(selectableFd); } bool inSet = false; if (maybeAdd(selectableFd, selectableFd->onExcept, exceptFds)) { LOGD("Selecting fd %d for writing...", selectableFd->fd); inSet = true; } if (maybeAdd(selectableFd, selectableFd->onReadable, readFds)) { LOGD("Selecting fd %d for reading...", selectableFd->fd); inSet = true; } if (maybeAdd(selectableFd, selectableFd->onWritable, writeFds)) { inSet = true; } if (inSet) { // If the fd is in a set, check it against max. int fd = selectableFd->fd; if (fd > selector->maxFd) { selector->maxFd = fd; } } // Move to next descriptor. i++; } } }
const string* a3dsGetObjectMaterialName(const a3dsDataT* a3ds, const string* object_name) { for (int i = 0; i < arrayLength(a3ds->objects); i++) { a3dsObjectDataT** o = arrayGet(a3ds->objects, i); if ((*o)->mesh && strcmp(object_name, (*o)->name) == 0) return ((*o)->mesh->material); } return (NULL); }
void a3dsFree(a3dsDataT* a3ds) { for (int i = 0; i < arrayLength(a3ds->materials); i++) { a3dsMaterialDataT* mat = *(a3dsMaterialDataT**)arrayGet(a3ds->materials, i); free(mat); } arrayFree(a3ds->materials); for (int i = 0; i < arrayLength(a3ds->objects); i++) { a3dsObjectDataT* obj = *(a3dsObjectDataT**)arrayGet(a3ds->objects, i); if (obj->mesh) free(obj->mesh); free(obj); } arrayFree(a3ds->objects); free(a3ds); }
/** * Notifies user if file descriptors are readable or writable, or if * out-of-band data is present. */ static void fireEvents(Selector* selector) { Array* selectableFds = selector->selectableFds; int size = arraySize(selectableFds); int i; for (i = 0; i < size; i++) { SelectableFd* selectableFd = arrayGet(selectableFds, i); maybeInvoke(selectableFd, selectableFd->onExcept, &selector->exceptFds); maybeInvoke(selectableFd, selectableFd->onReadable, &selector->readFds); maybeInvoke(selectableFd, selectableFd->onWritable, &selector->writeFds); } }
const a3dsObjectDataT* a3dsGetObjectData(const a3dsDataT* a3ds, const string* object_name) { if (!object_name) return (NULL); for (int i = 0; i < arrayLength(a3ds->objects); i++) { a3dsObjectDataT** o = arrayGet(a3ds->objects, i); if (strcmp(object_name, (*o)->name) == 0) return (*o); } return (NULL); }
const a3dsMaterialDataT* a3dsGetMaterialData(const a3dsDataT* a3ds, const string* material_name) { if (!material_name) return (NULL); for (int i = 0; i < arrayLength(a3ds->materials); i++) { a3dsMaterialDataT** m = arrayGet(a3ds->materials, i); if (strcmp(material_name, (*m)->name) == 0) return (*m); } return (NULL); }
modelica_metatype boxptr_arrayNth(threadData_t *threadData,modelica_metatype arr,modelica_metatype ix) { return arrayGet(arr, mmc_unbox_integer(ix)+1); }
static void testCreate() { DataValue value; char * string1 = "abc", * string2 = "foo"; char blob1[] = {0x00, 0x01}, blob2[] = {0x03, 0x05, 0x07}; HashTable * hashTable1, * hashTable2; DataArray * array1, * array2; AssociativeArray * assArray1, * assArray2; value = valueCreateBoolean(false); TestCase_assert(value.type == DATA_TYPE_BOOLEAN, "Expected %d but got %d", DATA_TYPE_BOOLEAN, value.type); TestCase_assert(!value.value.boolean, "Expected false but got true"); valueDispose(&value); value = valueCreateBoolean(true); TestCase_assert(value.type == DATA_TYPE_BOOLEAN, "Expected %d but got %d", DATA_TYPE_BOOLEAN, value.type); TestCase_assert(value.value.boolean, "Expected true but got false"); valueDispose(&value); value = valueCreateInt8(0); TestCase_assert(value.type == DATA_TYPE_INT8, "Expected %d but got %d", DATA_TYPE_INT8, value.type); TestCase_assert(value.value.int8 == 0, "Expected 0 but got %d", value.value.int8); valueDispose(&value); value = valueCreateInt8(1); TestCase_assert(value.type == DATA_TYPE_INT8, "Expected %d but got %d", DATA_TYPE_INT8, value.type); TestCase_assert(value.value.int8 == 1, "Expected 1 but got %d", value.value.int8); valueDispose(&value); value = valueCreateUInt8(0); TestCase_assert(value.type == DATA_TYPE_UINT8, "Expected %d but got %d", DATA_TYPE_UINT8, value.type); TestCase_assert(value.value.uint8 == 0, "Expected 0 but got %d", value.value.uint8); valueDispose(&value); value = valueCreateUInt8(1); TestCase_assert(value.type == DATA_TYPE_UINT8, "Expected %d but got %d", DATA_TYPE_UINT8, value.type); TestCase_assert(value.value.uint8 == 1, "Expected 1 but got %d", value.value.uint8); valueDispose(&value); value = valueCreateInt16(0); TestCase_assert(value.type == DATA_TYPE_INT16, "Expected %d but got %d", DATA_TYPE_INT16, value.type); TestCase_assert(value.value.int16 == 0, "Expected 0 but got %d", value.value.int16); valueDispose(&value); value = valueCreateInt16(1); TestCase_assert(value.type == DATA_TYPE_INT16, "Expected %d but got %d", DATA_TYPE_INT16, value.type); TestCase_assert(value.value.int16 == 1, "Expected 1 but got %d", value.value.int16); valueDispose(&value); value = valueCreateUInt16(0); TestCase_assert(value.type == DATA_TYPE_UINT16, "Expected %d but got %d", DATA_TYPE_UINT16, value.type); TestCase_assert(value.value.uint16 == 0, "Expected 0 but got %d", value.value.uint16); valueDispose(&value); value = valueCreateUInt16(1); TestCase_assert(value.type == DATA_TYPE_UINT16, "Expected %d but got %d", DATA_TYPE_UINT16, value.type); TestCase_assert(value.value.uint16 == 1, "Expected 1 but got %d", value.value.uint16); valueDispose(&value); value = valueCreateInt32(0); TestCase_assert(value.type == DATA_TYPE_INT32, "Expected %d but got %d", DATA_TYPE_INT32, value.type); TestCase_assert(value.value.int32 == 0, "Expected 0 but got %d", value.value.int32); valueDispose(&value); value = valueCreateInt32(1); TestCase_assert(value.type == DATA_TYPE_INT32, "Expected %d but got %d", DATA_TYPE_INT32, value.type); TestCase_assert(value.value.int32 == 1, "Expected 1 but got %d", value.value.int32); valueDispose(&value); value = valueCreateUInt32(0); TestCase_assert(value.type == DATA_TYPE_UINT32, "Expected %d but got %d", DATA_TYPE_UINT32, value.type); TestCase_assert(value.value.uint32 == 0, "Expected 0 but got %d", value.value.uint32); valueDispose(&value); value = valueCreateUInt32(1); TestCase_assert(value.type == DATA_TYPE_UINT32, "Expected %d but got %d", DATA_TYPE_UINT32, value.type); TestCase_assert(value.value.uint32 == 1, "Expected 1 but got %d", value.value.uint32); valueDispose(&value); value = valueCreateInt64(0); TestCase_assert(value.type == DATA_TYPE_INT64, "Expected %d but got %d", DATA_TYPE_INT64, value.type); TestCase_assert(value.value.int64 == 0, "Expected 0 but got " INT64_FORMAT, value.value.int64); valueDispose(&value); value = valueCreateInt64(1); TestCase_assert(value.type == DATA_TYPE_INT64, "Expected %d but got %d", DATA_TYPE_INT64, value.type); TestCase_assert(value.value.int64 == 1, "Expected 1 but got " INT64_FORMAT, value.value.int64); valueDispose(&value); value = valueCreateUInt64(0); TestCase_assert(value.type == DATA_TYPE_UINT64, "Expected %d but got %d", DATA_TYPE_UINT64, value.type); TestCase_assert(value.value.uint64 == 0, "Expected 0 but got " UINT64_FORMAT, value.value.uint64); valueDispose(&value); value = valueCreateUInt64(1); TestCase_assert(value.type == DATA_TYPE_UINT64, "Expected %d but got %d", DATA_TYPE_UINT64, value.type); TestCase_assert(value.value.uint64 == 1, "Expected 1 but got " UINT64_FORMAT, value.value.uint64); valueDispose(&value); value = valueCreateFloat(0.0f); TestCase_assert(value.type == DATA_TYPE_FLOAT, "Expected %d but got %d", DATA_TYPE_FLOAT, value.type); TestCase_assert(value.value.float32 == 0.0f, "Expected 0.0 but got %f", value.value.float32); valueDispose(&value); value = valueCreateFloat(1.0f); TestCase_assert(value.type == DATA_TYPE_FLOAT, "Expected %d but got %d", DATA_TYPE_FLOAT, value.type); TestCase_assert(value.value.float32 == 1.0f, "Expected 1.0 but got %f", value.value.float32); valueDispose(&value); value = valueCreateDouble(0.0); TestCase_assert(value.type == DATA_TYPE_DOUBLE, "Expected %d but got %d", DATA_TYPE_DOUBLE, value.type); TestCase_assert(value.value.float64 == 0.0, "Expected 0.0 but got %f", value.value.float64); valueDispose(&value); value = valueCreateDouble(1.0); TestCase_assert(value.type == DATA_TYPE_DOUBLE, "Expected %d but got %d", DATA_TYPE_DOUBLE, value.type); TestCase_assert(value.value.float64 == 1.0, "Expected 1.0 but got %f", value.value.float64); valueDispose(&value); value = valueCreateFixed16_16(0x00000); TestCase_assert(value.type == DATA_TYPE_FIXED_16_16, "Expected %d but got %d", DATA_TYPE_FIXED_16_16, value.type); TestCase_assert(value.value.fixed == 0x00000, "Expected 0x00000 but got 0x%05X", value.value.fixed); valueDispose(&value); value = valueCreateFixed16_16(0x10000); TestCase_assert(value.type == DATA_TYPE_FIXED_16_16, "Expected %d but got %d", DATA_TYPE_FIXED_16_16, value.type); TestCase_assert(value.value.fixed == 0x10000, "Expected 0x10000 but got 0x%05X", value.value.fixed); valueDispose(&value); value = valueCreatePointer((void *) 0x0); TestCase_assert(value.type == DATA_TYPE_POINTER, "Expected %d but got %d", DATA_TYPE_POINTER, value.type); TestCase_assert(value.value.pointer == (void *) 0x0, "Expected 0x0 but got %p", value.value.pointer); valueDispose(&value); value = valueCreatePointer((void *) 0x1); TestCase_assert(value.type == DATA_TYPE_POINTER, "Expected %d but got %d", DATA_TYPE_POINTER, value.type); TestCase_assert(value.value.pointer == (void *) 0x1, "Expected 0x1 but got %p", value.value.pointer); valueDispose(&value); value = valueCreateString(string1, 2, true, true); TestCase_assert(value.type == DATA_TYPE_STRING, "Expected %d but got %d", DATA_TYPE_STRING, value.type); TestCase_assert(!strcmp(value.value.string, "ab"), "Expected \"ab\" but got \"%s\"", value.value.string); TestCase_assert(value.value.string != string1, "Expected differing pointers, but both are %p", string1); valueDispose(&value); value = valueCreateString(string2, DATA_USE_STRLEN, false, false); TestCase_assert(value.type == DATA_TYPE_STRING, "Expected %d but got %d", DATA_TYPE_STRING, value.type); TestCase_assert(value.value.string == string2, "Expected %p but got %p", string2, value.value.string); valueDispose(&value); value = valueCreateBlob(blob1, sizeof(blob1), true, true); TestCase_assert(value.type == DATA_TYPE_BLOB, "Expected %d but got %d", DATA_TYPE_BLOB, value.type); TestCase_assert(value.value.blob.length == 2, "Expected 2 but got " SIZE_T_FORMAT, value.value.blob.length); TestCase_assert(!memcmp(value.value.blob.bytes, blob1, sizeof(blob1)), "Expected {0x%02X, 0x%02X} but got {0x%02X, 0x%02X}", blob1[0], blob1[1], ((char *) value.value.blob.bytes)[0], ((char *) value.value.blob.bytes)[1]); TestCase_assert(value.value.blob.bytes != blob1, "Expected differing pointers, but both are %p", blob1); valueDispose(&value); value = valueCreateBlob(blob2, sizeof(blob2), false, false); TestCase_assert(value.type == DATA_TYPE_BLOB, "Expected %d but got %d", DATA_TYPE_BLOB, value.type); TestCase_assert(value.value.blob.length == 3, "Expected 3 but got " SIZE_T_FORMAT, value.value.blob.length); TestCase_assert(value.value.blob.bytes == blob2, "Expected %p but got %p", blob2, value.value.blob.bytes); valueDispose(&value); hashTable1 = hashCreate(); hashSet(hashTable1, "a", valueCreateBoolean(false)); hashTable2 = hashCreate(); value = valueCreateHashTable(hashTable1, true, true); TestCase_assert(value.type == DATA_TYPE_HASH_TABLE, "Expected %d but got %d", DATA_TYPE_HASH_TABLE, value.type); TestCase_assert(value.value.hashTable != hashTable1, "Expected differing pointers, but both are %p", hashTable1); TestCase_assert(value.value.hashTable->count == hashTable1->count, "Expected " SIZE_T_FORMAT " but got " SIZE_T_FORMAT, hashTable1->count, value.value.hashTable->count); TestCase_assert(hashGet(value.value.hashTable, "a") != NULL, "Expected non-NULL but got NULL"); TestCase_assert(hashGet(value.value.hashTable, "a")->type == DATA_TYPE_BOOLEAN, "Expected %d but got %d", DATA_TYPE_BOOLEAN, hashGet(value.value.hashTable, "a")->type); TestCase_assert(!hashGet(value.value.hashTable, "a")->value.boolean, "Expected false but got true"); valueDispose(&value); value = valueCreateHashTable(hashTable2, true, false); TestCase_assert(value.type == DATA_TYPE_HASH_TABLE, "Expected %d but got %d", DATA_TYPE_HASH_TABLE, value.type); TestCase_assert(value.value.hashTable == hashTable2, "Expected %p but got %p", hashTable2, value.value.hashTable); valueDispose(&value); array1 = arrayCreate(); arrayAppend(array1, valueCreateBoolean(false)); array2 = arrayCreate(); value = valueCreateArray(array1, true, true); TestCase_assert(value.type == DATA_TYPE_ARRAY, "Expected %d but got %d", DATA_TYPE_ARRAY, value.type); TestCase_assert(value.value.array != array1, "Expected differing pointers, but both are %p", array1); TestCase_assert(value.value.array->count == array1->count, "Expected " SIZE_T_FORMAT " but got " SIZE_T_FORMAT, array1->count, value.value.array->count); TestCase_assert(arrayGet(value.value.array, 0) != NULL, "Expected non-NULL but got NULL"); TestCase_assert(arrayGet(value.value.array, 0)->type == DATA_TYPE_BOOLEAN, "Expected %d but got %d", DATA_TYPE_BOOLEAN, arrayGet(value.value.array, 0)->type); TestCase_assert(!arrayGet(value.value.array, 0)->value.boolean, "Expected false but got true"); valueDispose(&value); value = valueCreateArray(array2, true, false); TestCase_assert(value.type == DATA_TYPE_ARRAY, "Expected %d but got %d", DATA_TYPE_ARRAY, value.type); TestCase_assert(value.value.array == array2, "Expected %p but got %p", array2, value.value.array); valueDispose(&value); assArray1 = associativeArrayCreate(); associativeArrayAppend(assArray1, "a", valueCreateBoolean(false)); assArray2 = associativeArrayCreate(); value = valueCreateAssociativeArray(assArray1, true, true); TestCase_assert(value.type == DATA_TYPE_ASSOCIATIVE_ARRAY, "Expected %d but got %d", DATA_TYPE_ASSOCIATIVE_ARRAY, value.type); TestCase_assert(value.value.associativeArray != assArray1, "Expected differing pointers, but both are %p", assArray1); TestCase_assert(value.value.associativeArray->count == assArray1->count, "Expected " SIZE_T_FORMAT " but got " SIZE_T_FORMAT, assArray1->count, value.value.associativeArray->count); TestCase_assert(associativeArrayGetValueAtIndex(value.value.associativeArray, 0) != NULL, "Expected non-NULL but got NULL"); TestCase_assert(associativeArrayGetValueAtIndex(value.value.associativeArray, 0)->type == DATA_TYPE_BOOLEAN, "Expected %d but got %d", DATA_TYPE_BOOLEAN, associativeArrayGetValueAtIndex(value.value.associativeArray, 0)->type); TestCase_assert(!associativeArrayGetValueAtIndex(value.value.associativeArray, 0)->value.boolean, "Expected false but got true"); TestCase_assert(!strcmp(associativeArrayGetKeyAtIndex(value.value.associativeArray, 0), "a"), "Expected \"a\" but got \"%s\"", associativeArrayGetKeyAtIndex(value.value.associativeArray, 0)); valueDispose(&value); value = valueCreateAssociativeArray(assArray2, true, false); TestCase_assert(value.type == DATA_TYPE_ASSOCIATIVE_ARRAY, "Expected %d but got %d", DATA_TYPE_ASSOCIATIVE_ARRAY, value.type); TestCase_assert(value.value.associativeArray == assArray2, "Expected %p but got %p", assArray2, value.value.associativeArray); valueDispose(&value); }