/* * Copyright (C) 2009 Karel Zak * * This file may be redistributed under the terms of the * GNU Lesser General Public License. */ /** * SECTION: iter * @title: Iterator * @short_description: unified iterator * * The iterator keeps the direction and the last position for access to the * internal library tables/lists. * * It's very unusual to use the same iterator on multiple places in your * application or share the same iterator, for this purpose libfdisk does not * provide reference counting for this object. It's recommended to initialize * the iterator by fdisk_new_iter() at begin of your function and then * fdisk_free_iter() before you return from the function. * * Don't forget to call fdisk_reset_iter() if you want to use the iterator more * than once. */ #include #include #include #include "fdiskP.h" /** * fdisk_new_iter: * @direction: FDISK_INTER_{FOR,BACK}WARD direction * * Returns: newly allocated generic libmount iterator. */ struct fdisk_iter *fdisk_new_iter(int direction) { struct fdisk_iter *itr = calloc(1, sizeof(*itr)); if (!itr) return NULL; itr->direction = direction; return itr; } /** * fdisk_free_iter: * @itr: iterator pointer * * Deallocates the iterator. */ void fdisk_free_iter(struct fdisk_iter *itr) { free(itr); } /** * fdisk_reset_iter: * @itr: iterator pointer * @direction: FDISK_INTER_{FOR,BACK}WARD or -1 to keep the direction unchanged * * Resets the iterator. */ void fdisk_reset_iter(struct fdisk_iter *itr, int direction) { if (direction == -1) direction = itr->direction; memset(itr, 0, sizeof(*itr)); itr->direction = direction; } /** * fdisk_iter_get_direction: * @itr: iterator pointer * * Returns: FDISK_INTER_{FOR,BACK}WARD */ int fdisk_iter_get_direction(struct fdisk_iter *itr) { return itr->direction; }