%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/src/veeamsnap-6.1.2.1781/
Upload File :
Create Path :
Current File : //usr/src/veeamsnap-6.1.2.1781/rangelist_ex.c

// Copyright (c) Veeam Software Group GmbH

#include "stdafx.h"
#ifdef SNAPSTORE_MULTIDEV

#include "rangelist_ex.h"

#define SECTION "ranges_ex "

void rangelist_ex_init( rangelist_ex_t* rglist )
{
    INIT_LIST_HEAD( &rglist->head );
}

static inline rangelist_el_ex_t* _rangelist_ex_get_first( rangelist_ex_t* rglist )
{
    rangelist_el_ex_t* el = NULL;
    if (!list_empty( &rglist->head )){
        el = list_entry( rglist->head.next, rangelist_el_ex_t, link );
        list_del( &el->link );
    }
    return el;
}

void rangelist_ex_done( rangelist_ex_t* rglist )
{
    rangelist_el_ex_t* el;
    while (NULL != (el = _rangelist_ex_get_first( rglist )))
        dbg_kfree( el );
}

int rangelist_ex_add( rangelist_ex_t* rglist, range_t* rg, void* extension )
{
    rangelist_el_ex_t* el = dbg_kzalloc( sizeof( rangelist_el_ex_t ), GFP_KERNEL );
    if (el == NULL)
        return -ENOMEM;

    INIT_LIST_HEAD( &el->link );

    el->rg.ofs = rg->ofs;
    el->rg.cnt = rg->cnt;
    el->extension = extension;

    list_add_tail( &el->link, &rglist->head );

    return SUCCESS;
}

int rangelist_ex_get( rangelist_ex_t* rglist, range_t* rg, void** p_extension )
{
    rangelist_el_ex_t* el = _rangelist_ex_get_first( rglist );
    if (el == NULL)
        return -ENODATA;

    rg->ofs = el->rg.ofs;
    rg->cnt = el->rg.cnt;
    *p_extension = el->extension;

    dbg_kfree( el );

    return SUCCESS;
}

bool rangelist_ex_empty( rangelist_ex_t* rglist )
{
    return list_empty( &rglist->head );
}
#endif //SNAPSTORE_MULTIDEV

Zerion Mini Shell 1.0