girara_list_t* jumanji_db_history_find(jumanji_database_t* database, const char* input) { if (database == NULL || database->session == NULL || input == NULL) { return NULL; } /* prepare statement */ static const char SQL_HISTORY_FIND[] = "SELECT * FROM history WHERE " "url LIKE (SELECT '%' || ? || '%') OR " "title LIKE (SELECT '%' || ? || '%');"; sqlite3_stmt* statement = jumanji_db_prepare_statement(database->session, SQL_HISTORY_FIND); if (statement == NULL) { return NULL; } /* bind values */ if (sqlite3_bind_text(statement, 1, input, -1, NULL) != SQLITE_OK || sqlite3_bind_text(statement, 2, input, -1, NULL) != SQLITE_OK ) { girara_error("Could not bind query parameters"); sqlite3_finalize(statement); return NULL; } girara_list_t* results = girara_list_new(); if (results == NULL) { sqlite3_finalize(statement); return NULL; } girara_list_set_free_function(results, jumanji_db_free_result_link); while(sqlite3_step(statement) == SQLITE_ROW) { jumanji_db_result_link_t* link = malloc(sizeof(jumanji_db_result_link_t)); if (link == NULL) { sqlite3_finalize(statement); return NULL; } char* url = (char*) sqlite3_column_text(statement, 0); char* title = (char*) sqlite3_column_text(statement, 1); link->url = g_strdup(url); link->title = g_strdup(title); link->visited = sqlite3_column_int(statement, 2); girara_list_append(results, link); } sqlite3_finalize(statement); return results; }
} END_TEST START_TEST(test_datastructures_list_prepend) { girara_list_t* list = girara_list_new(); fail_unless((list != NULL), NULL); /* test parameters */ girara_list_prepend(list, NULL); fail_unless((girara_list_size(list) != 0), NULL); girara_list_free(list); } END_TEST
} END_TEST START_TEST(test_datastructures_list_free_free_function) { // free function girara_list_t* list = girara_list_new(); list_free_called = 0; fail_unless((list != NULL), NULL); girara_list_set_free_function(list, list_free); girara_list_append(list, (void*) 0xDEAD); girara_list_free(list); fail_unless((list_free_called == 1), NULL); } END_TEST
} END_TEST START_TEST(test_datastructures_list_free_already_cleared) { // free cleared list girara_list_t* list = girara_list_new(); fail_unless((list != NULL), NULL); girara_list_append(list, (void*) 0xDEAD); fail_unless((girara_list_size(list) == 1), NULL); girara_list_clear(list); fail_unless((girara_list_size(list) == 0), NULL); girara_list_free(list); } END_TEST
} END_TEST START_TEST(test_datastructures_list_merge) { girara_list_t* list1 = girara_list_new(); girara_list_t* list2 = girara_list_new(); fail_unless((list1 != NULL), NULL); fail_unless((list2 != NULL), NULL); fail_unless((girara_list_merge(NULL, NULL) == NULL), NULL); fail_unless((girara_list_merge(list1, NULL) == list1), NULL); fail_unless((girara_list_merge(NULL, list2) == NULL), NULL); girara_list_append(list1, (void*)0); girara_list_append(list2, (void*)1); girara_list_t* list3 = girara_list_merge(list1, list2); fail_unless((list3 == list1), NULL); fail_unless((girara_list_nth(list3, 0) == (void*)0), NULL); fail_unless((girara_list_nth(list3, 1) == (void*)1), NULL); girara_list_free(list1); girara_list_free(list2); } END_TEST
} END_TEST START_TEST(test_datastructures_list_free_empty) { // free empty list girara_list_t* list = girara_list_new(); fail_unless((list != NULL), NULL); girara_list_free(list); list = girara_list_new2(NULL); fail_unless((list != NULL), NULL); girara_list_free(list); list = girara_list_new2(g_free); fail_unless((list != NULL), NULL); girara_list_free(list); } END_TEST
static girara_list_t* read_pwd_info(void) { girara_list_t* list = girara_list_new(); girara_list_set_free_function(list, &free_pwd_info); struct passwd* pw; errno = 0; while ((pw = getpwent()) != NULL) { pwd_info_t* pwdinfo = g_malloc0(sizeof(pwd_info_t)); pwdinfo->name = g_strdup(pw->pw_name); pwdinfo->dir = g_strdup(pw->pw_dir); girara_list_append(list, pwdinfo); errno = 0; } fail_unless(errno == 0, "Non-zero errno :%d", errno, NULL); endpwent(); return list; }
girara_list_t* pdf_page_images_get(zathura_page_t* page, void* data, zathura_error_t* error) { mupdf_page_t* mupdf_page = data; if (page == NULL) { if (error != NULL) { *error = ZATHURA_ERROR_INVALID_ARGUMENTS; } goto error_ret; } girara_list_t* list = NULL; zathura_document_t* document = zathura_page_get_document(page); if (document == NULL) { goto error_ret; } mupdf_document_t* mupdf_document = zathura_document_get_data(document); /* Setup image list */ list = girara_list_new(); if (list == NULL) { if (error != NULL) { *error = ZATHURA_ERROR_OUT_OF_MEMORY; } goto error_free; } girara_list_set_free_function(list, (girara_free_function_t) pdf_zathura_image_free); /* Extract images */ mupdf_page_extract_text(mupdf_document, mupdf_page); fz_stext_block* block; for (block = mupdf_page->text->first_block; block; block = block->next) { if (block->type == FZ_STEXT_BLOCK_IMAGE) { zathura_image_t* zathura_image = g_malloc(sizeof(zathura_image_t)); zathura_image->position.x1 = block->bbox.x0; zathura_image->position.y1 = block->bbox.y0; zathura_image->position.x2 = block->bbox.x1; zathura_image->position.y2 = block->bbox.y1; zathura_image->data = block->u.i.image; girara_list_append(list, zathura_image); } } return list; error_free: if (error != NULL && *error == ZATHURA_ERROR_OK) { *error = ZATHURA_ERROR_UNKNOWN; } if (list != NULL) { girara_list_free(list); } error_ret: return NULL; }