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

📄 tsk_error.c

📁 linux下开发的针对所有磁盘的数据恢复的源码
💻 C
字号:
/* * The Sleuth Kit  * * Brian Carrier [carrier <at> sleuthkit [dot] org] * Copyright (c) 2006-2008 Brian Carrier.  All Rights reserved * * This software is distributed under the Common Public License 1.0 */#include "tsk_base_i.h"/** * \file tsk_error.c * Contains the error handling code and variables. *//* Global variables that fit here as well as anywhere */char *progname = "unknown";int tsk_verbose = 0;/**  * \ingroup baselib * Set when an error occurs and contains the error code. */uint32_t tsk_errno = 0;/* \internal * Contains an error-specific string and is valid only  * when tsk_errno is set. This should be set when errno is set, * if it is not needed, then set tsk_errstr[0] to '\0'. */char tsk_errstr[TSK_ERRSTR_L];/* \internal * Contains a caller-specific string and is valid only when tsk_errno is set ** This is typically set to start with a NULL char when errno is set and then set with* a string by the code that called the * function that had the error.  For* example, the X_read() function may set why* the read failed in tsk_errstr and the* function that called X_read() can provide* more context about why X_read() was * called in the first place*/char tsk_errstr2[TSK_ERRSTR_L];/* \internal * Buffer used to store the printed message formed by tsk_errstr and tsk_errstr2 */char tsk_errstr_print[TSK_ERRSTR_PR_L];/* Error messages */static const char *tsk_err_aux_str[TSK_ERR_IMG_MAX] = {    "Insufficient memory",    ""};/* imagetools specific error strings */static const char *tsk_err_img_str[TSK_ERR_IMG_MAX] = {    "Missing image file names", // 0    "Invalid image offset",    "Cannot determine image type",    "Unsupported image type",    "Error opening image file",    "Error stat(ing) image file",       // 5    "Error seeking in image file",    "Error reading image file",    "Read offset too large for image file",    "Invalid API argument",    "Invalid magic value",      // 10    "Error writing data",    "Error converting file name"};static const char *tsk_err_mm_str[TSK_ERR_VS_MAX] = {    "Cannot determine partition type",  // 0    "Unsupported partition type",    "Error reading image file",    "Invalid magic value",    "Invalid walk range",    "Invalid buffer size",      // 5    "Invalid sector address",    "Invalid API argument",};static const char *tsk_err_fs_str[TSK_ERR_FS_MAX] = {    "Cannot determine file system type",        // 0    "Unsupported file system type",    "Function/Feature not supported",    "Invalid walk range",    "Error reading image file",    "Invalid API argument",     // 5    "Invalid block address",    "Invalid metadata address",    "Error in metadata structure",    "Invalid magic value",    "Error extracting file from image", // 10    "Error writing data",    "Error converting Unicode",    "Error recovering deleted file",    "General file system error",    "File system is corrupt",   // 15    "Attribute not found in file",};static const char *tsk_err_hdb_str[TSK_ERR_HDB_MAX] = {    "Cannot determine hash database type",      // 0    "Unsupported hash database type",    "Error reading hash database file",    "Error reading hash database index",    "Invalid argument",    "Error writing data",       // 5    "Error creating file",    "Error deleting file",    "Missing file",    "Error creating process",    "Error opening file",       // 10    "Corrupt hash database"};/** * \ingroup baselib * Return the string with the current error message.  The string does not end with a  * newline. * * @returns String with error message or NULL if there is no error */const char *tsk_error_get(){    size_t pidx = 0;    if (tsk_errno == 0)        return NULL;    memset(tsk_errstr_print, 0, TSK_ERRSTR_PR_L);    if (tsk_errno & TSK_ERR_AUX) {        if ((TSK_ERR_MASK & tsk_errno) < TSK_ERR_AUX_MAX)            snprintf(&tsk_errstr_print[pidx], TSK_ERRSTR_PR_L - pidx,                "%s", tsk_err_aux_str[tsk_errno & TSK_ERR_MASK]);        else            snprintf(&tsk_errstr_print[pidx], TSK_ERRSTR_PR_L - pidx,                "auxtools error: %" PRIu32, TSK_ERR_MASK & tsk_errno);    }    else if (tsk_errno & TSK_ERR_IMG) {        if ((TSK_ERR_MASK & tsk_errno) < TSK_ERR_IMG_MAX)            snprintf(&tsk_errstr_print[pidx], TSK_ERRSTR_PR_L - pidx,                "%s", tsk_err_img_str[tsk_errno & TSK_ERR_MASK]);        else            snprintf(&tsk_errstr_print[pidx], TSK_ERRSTR_PR_L - pidx,                "imgtools error: %" PRIu32, TSK_ERR_MASK & tsk_errno);    }    else if (tsk_errno & TSK_ERR_VS) {        if ((TSK_ERR_MASK & tsk_errno) < TSK_ERR_VS_MAX)            snprintf(&tsk_errstr_print[pidx], TSK_ERRSTR_PR_L - pidx,                "%s", tsk_err_mm_str[tsk_errno & TSK_ERR_MASK]);        else            snprintf(&tsk_errstr_print[pidx], TSK_ERRSTR_PR_L - pidx,                "mmtools error: %" PRIu32, TSK_ERR_MASK & tsk_errno);    }    else if (tsk_errno & TSK_ERR_FS) {        if ((TSK_ERR_MASK & tsk_errno) < TSK_ERR_FS_MAX)            snprintf(&tsk_errstr_print[pidx], TSK_ERRSTR_PR_L - pidx,                "%s", tsk_err_fs_str[tsk_errno & TSK_ERR_MASK]);        else            snprintf(&tsk_errstr_print[pidx], TSK_ERRSTR_PR_L - pidx,                "fstools error: %" PRIu32, TSK_ERR_MASK & tsk_errno);    }    else if (tsk_errno & TSK_ERR_HDB) {        if ((TSK_ERR_MASK & tsk_errno) < TSK_ERR_HDB_MAX)            snprintf(&tsk_errstr_print[pidx], TSK_ERRSTR_PR_L - pidx,                "%s", tsk_err_hdb_str[tsk_errno & TSK_ERR_MASK]);        else            snprintf(&tsk_errstr_print[pidx], TSK_ERRSTR_PR_L - pidx,                "hashtools error: %" PRIu32, TSK_ERR_MASK & tsk_errno);    }    else {        snprintf(&tsk_errstr_print[pidx], TSK_ERRSTR_PR_L - pidx,            "Unknown Error: %" PRIu32, tsk_errno);    }    pidx = strlen(tsk_errstr_print);    /* Print the unique string, if it exists */    if (tsk_errstr[0] != '\0') {        snprintf(&tsk_errstr_print[pidx], TSK_ERRSTR_PR_L - pidx,            " (%s)", tsk_errstr);        pidx = strlen(tsk_errstr_print);    }    if (tsk_errstr2[0] != '\0') {        snprintf(&tsk_errstr_print[pidx], TSK_ERRSTR_PR_L - pidx,            " (%s)", tsk_errstr2);        pidx = strlen(tsk_errstr_print);    }    return (char *) &tsk_errstr_print[0];}/** * \ingroup baselib * Print the current error message to a file. * * @param hFile File to print message to */voidtsk_error_print(FILE * hFile){    const char *str;    if (tsk_errno == 0)        return;    str = tsk_error_get();    if (str != NULL) {        tsk_fprintf(hFile, "%s\n", str);    }    else {        tsk_fprintf(hFile,            "Error creating Sleuth Kit error string (Errno: %d)\n",            tsk_errno);    }}/** * \ingroup baselib * Clear the error number and error message.   */voidtsk_error_reset(){    tsk_errno = 0;    tsk_errstr[0] = '\0';    tsk_errstr2[0] = '\0';}

⌨️ 快捷键说明

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