⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsk_stack.c

📁 linux下开发的针对所有磁盘的数据恢复的源码
💻 C
字号:
/* * The Sleuth Kit  * * Brian Carrier [carrier <at> sleuthkit [dot] org] * Copyright (c) 2007 Brian Carrier.  All Rights reserved * * This software is distributed under the Common Public License 1.0 */#include "tsk_base_i.h"/** \file tsk_stack.c * Contains the functions to create and maintain a stack, which supports basic * popping, pushing, and searching.  These are used for finding loops when * recursing structures *//** * \ingroup baselib * Create a TSK_STACK structure * @returns Pointer to structure or NULL on error */TSK_STACK *tsk_stack_create(){    TSK_STACK *tsk_stack;    if ((tsk_stack = (TSK_STACK *) tsk_malloc(sizeof(TSK_STACK))) == NULL) {        return NULL;    }    tsk_stack->len = 64;    tsk_stack->top = 0;    if ((tsk_stack->vals =            (uint64_t *) tsk_malloc(tsk_stack->len * sizeof(uint64_t))) ==        NULL) {        free(tsk_stack);        return NULL;    }    return tsk_stack;}/** * \ingroup baselib * Push a value to the top of TSK_STACK. * @param a_tsk_stack Pointer to stack to push onto * @param a_val Value to push on * @returns 1 on error  */uint8_ttsk_stack_push(TSK_STACK * a_tsk_stack, uint64_t a_val){    if (a_tsk_stack->top == a_tsk_stack->len) {        a_tsk_stack->len += 64;        if ((a_tsk_stack->vals =                (uint64_t *) tsk_realloc((char *) a_tsk_stack->vals,                    a_tsk_stack->len * sizeof(uint64_t))) == NULL) {            return 1;        }    }    a_tsk_stack->vals[a_tsk_stack->top++] = a_val;    return 0;}/** * \ingroup baselib * Pop a value from the top of the stack. * @param a_tsk_stack Stack to pop from */voidtsk_stack_pop(TSK_STACK * a_tsk_stack){    a_tsk_stack->top--;}/** * \ingroup baselib * Search a TSK_STACK for a given value * @param a_tsk_stack Stack to search * @param a_val Value to search for  * @returns 1 if found and 0 if not */uint8_ttsk_stack_find(TSK_STACK * a_tsk_stack, uint64_t a_val){    size_t i;    for (i = 0; i < a_tsk_stack->top; i++) {        if (a_tsk_stack->vals[i] == a_val)            return 1;    }    return 0;}/** * \ingroup baselib * Free an allocated TSK_STACK structure * @param a_tsk_stack Stack to free */voidtsk_stack_free(TSK_STACK * a_tsk_stack){    free(a_tsk_stack->vals);    free(a_tsk_stack);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -