girara_list_t* zathura_document_get_information(zathura_document_t* document, zathura_error_t* error) { if (document == NULL || document->plugin == NULL) { if (error != NULL) { *error = ZATHURA_ERROR_INVALID_ARGUMENTS; } return NULL; } zathura_plugin_functions_t* functions = zathura_plugin_get_functions(document->plugin); if (functions->document_get_information == NULL) { if (error != NULL) { *error = ZATHURA_ERROR_NOT_IMPLEMENTED; } return NULL; } girara_list_t* result = functions->document_get_information(document, document->data, error); if (result != NULL) { girara_list_set_free_function(result, (girara_free_function_t) zathura_document_information_entry_free); } return result; }
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_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
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; }