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

📄 fs_name.c

📁 linux下开发的针对所有磁盘的数据恢复的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*** fs_name** The Sleuth Kit **** Display and manipulate directory entries ** This file contains generic functions that call the appropriate function** depending on the file system type.**** Brian Carrier [carrier <at> sleuthkit [dot] org]** Copyright (c) 2006-2008 Brian Carrier.  All Rights reserved** Copyright (c) 2003-2005 Brian Carrier.  All rights reserved **** TASK** Copyright (c) 2002 Brian Carrier, @stake Inc.  All rights reserved**** TCTUTILs** Copyright (c) 2001 Brian Carrier.  All rights reserved**** This software is distributed under the Common Public License 1.0*//** * \file fs_name.c * Code to allocate and free the TSK_FS_NAME structures. */#include "tsk_fs_i.h"char tsk_fs_name_type_str[TSK_FS_NAME_TYPE_STR_MAX][2] =    { "-", "p", "c", "d", "b", "r",    "l", "s", "h", "w", "v"};/** * \internal * Allocate a fs_name structure */TSK_FS_NAME *tsk_fs_name_alloc(size_t norm_namelen, size_t shrt_namelen){    TSK_FS_NAME *fs_name;    fs_name = (TSK_FS_NAME *) tsk_malloc(sizeof(*fs_name));    if (fs_name == NULL)        return NULL;    fs_name->name = (char *) tsk_malloc(norm_namelen + 1);    if (fs_name->name == NULL) {        free(fs_name);        return NULL;    }    fs_name->name_size = norm_namelen;    fs_name->flags = 0;    fs_name->shrt_name_size = shrt_namelen;    if (shrt_namelen == 0) {        fs_name->shrt_name = NULL;    }    else {        fs_name->shrt_name = (char *) tsk_malloc(shrt_namelen + 1);        if (fs_name->shrt_name == NULL) {            free(fs_name->name);            free(fs_name);            return NULL;        }    }    fs_name->type = TSK_FS_NAME_TYPE_UNDEF;    fs_name->tag = TSK_FS_NAME_TAG;    return fs_name;}/** * \internal * returns 1 on error */uint8_ttsk_fs_name_realloc(TSK_FS_NAME * fs_name, size_t namelen){    if ((fs_name == NULL) || (fs_name->tag != TSK_FS_NAME_TAG))        return 1;    if (fs_name->name_size >= namelen)        return 0;    fs_name->name = (char *) tsk_realloc(fs_name->name, namelen + 1);    if (fs_name->name == NULL) {        fs_name->name_size = 0;        return 1;    }    fs_name->type = TSK_FS_NAME_TYPE_UNDEF;    fs_name->name_size = namelen;    return 0;}/** * \internal * reset the values in the TSK_FS_NAME structure * @param a_fs_name Name structure to reset */voidtsk_fs_name_reset(TSK_FS_NAME * a_fs_name){    if (a_fs_name->name)        a_fs_name->name[0] = '\0';    if (a_fs_name->shrt_name)        a_fs_name->shrt_name[0] = '\0';    a_fs_name->meta_addr = 0;    a_fs_name->meta_seq = 0;    a_fs_name->type = 0;    a_fs_name->flags = 0;}/** * \internal */voidtsk_fs_name_free(TSK_FS_NAME * fs_name){    if ((!fs_name) || (fs_name->tag != TSK_FS_NAME_TAG))        return;    if (fs_name->name) {        free(fs_name->name);        fs_name->name = NULL;    }    if (fs_name->shrt_name) {        free(fs_name->shrt_name);        fs_name->shrt_name = NULL;    }    free(fs_name);}/** \internal * Copy the contents of a TSK_FS_NAME structure to another * structure.  * @param a_fs_name_to Destination structure to copy to * @param a_fs_name_from Source structure to copy from * @returns 1 on error */uint8_ttsk_fs_name_copy(TSK_FS_NAME * a_fs_name_to,    const TSK_FS_NAME * a_fs_name_from){    if ((a_fs_name_to == NULL) || (a_fs_name_from == NULL))        return 1;    /* If the source has a full name,  copy it */    if (a_fs_name_from->name) {        // make sure there is enough space        if (strlen(a_fs_name_from->name) >= a_fs_name_to->name_size) {            a_fs_name_to->name_size = strlen(a_fs_name_from->name) + 16;            a_fs_name_to->name =                (char *) tsk_realloc(a_fs_name_to->name,                a_fs_name_to->name_size);            if (a_fs_name_to->name == NULL)                return 1;        }        strncpy(a_fs_name_to->name, a_fs_name_from->name,            a_fs_name_to->name_size);    }    else {        if (a_fs_name_to->name_size > 0)            a_fs_name_to->name[0] = '\0';    }    // copy the short name, if one exists    if (a_fs_name_from->shrt_name) {        if (strlen(a_fs_name_from->shrt_name) >=            a_fs_name_to->shrt_name_size) {            a_fs_name_to->shrt_name_size =                strlen(a_fs_name_from->shrt_name) + 16;            a_fs_name_to->shrt_name =                (char *) tsk_realloc(a_fs_name_to->shrt_name,                a_fs_name_to->shrt_name_size);            if (a_fs_name_to->shrt_name == NULL)                return 1;        }        strncpy(a_fs_name_to->shrt_name, a_fs_name_from->shrt_name,            a_fs_name_to->shrt_name_size);    }    else {        if (a_fs_name_to->shrt_name_size > 0)            a_fs_name_to->shrt_name[0] = '\0';    }    a_fs_name_to->meta_addr = a_fs_name_from->meta_addr;    a_fs_name_to->meta_seq = a_fs_name_from->meta_seq;    a_fs_name_to->type = a_fs_name_from->type;    a_fs_name_to->flags = a_fs_name_from->flags;    return 0;}/*********************************************************************** * Printing functions ***********************************************************************//** * \internal  * make the ls -l output from the mode  * * ls must be 12 bytes or more! */voidtsk_fs_make_ls(TSK_FS_META * a_fs_meta, char *ls){    /* put the default values in */    strcpy(ls, "----------");    if (a_fs_meta->type < TSK_FS_META_TYPE_STR_MAX)        ls[0] = tsk_fs_meta_type_str[a_fs_meta->type][0];    /* user perms */    if (a_fs_meta->mode & TSK_FS_META_MODE_IRUSR)        ls[1] = 'r';    if (a_fs_meta->mode & TSK_FS_META_MODE_IWUSR)        ls[2] = 'w';    /* set uid */    if (a_fs_meta->mode & TSK_FS_META_MODE_ISUID) {        if (a_fs_meta->mode & TSK_FS_META_MODE_IXUSR)            ls[3] = 's';        else            ls[3] = 'S';    }    else if (a_fs_meta->mode & TSK_FS_META_MODE_IXUSR)        ls[3] = 'x';    /* group perms */    if (a_fs_meta->mode & TSK_FS_META_MODE_IRGRP)        ls[4] = 'r';    if (a_fs_meta->mode & TSK_FS_META_MODE_IWGRP)        ls[5] = 'w';    /* set gid */    if (a_fs_meta->mode & TSK_FS_META_MODE_ISGID) {        if (a_fs_meta->mode & TSK_FS_META_MODE_IXGRP)            ls[6] = 's';        else            ls[6] = 'S';    }    else if (a_fs_meta->mode & TSK_FS_META_MODE_IXGRP)        ls[6] = 'x';    /* other perms */    if (a_fs_meta->mode & TSK_FS_META_MODE_IROTH)        ls[7] = 'r';    if (a_fs_meta->mode & TSK_FS_META_MODE_IWOTH)        ls[8] = 'w';    /* sticky bit */    if (a_fs_meta->mode & TSK_FS_META_MODE_ISVTX) {        if (a_fs_meta->mode & TSK_FS_META_MODE_IXOTH)            ls[9] = 't';        else            ls[9] = 'T';    }    else if (a_fs_meta->mode & TSK_FS_META_MODE_IXOTH)        ls[9] = 'x';}static voidtsk_fs_print_time(FILE * hFile, time_t time){    if (time <= 0) {        tsk_fprintf(hFile, "0000-00-00 00:00:00 (UTC)");    }    else {        struct tm *tmTime = localtime(&time);        tsk_fprintf(hFile, "%.4d-%.2d-%.2d %.2d:%.2d:%.2d (%s)",            (int) tmTime->tm_year + 1900,            (int) tmTime->tm_mon + 1, (int) tmTime->tm_mday,            tmTime->tm_hour,            (int) tmTime->tm_min, (int) tmTime->tm_sec,

⌨️ 快捷键说明

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