/
vTech
/
FcApps
Обзор
Документация
Войти
/
vTech
/
FcApps
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
FcLibs/FcFile/src/FcFile_Errors.h
179 строк
8 KB
vTech
alpha_00
03 дек 2025, 17:45
03 дек 2025, 17:45
ab8382d
Код
Авторство
О чём код?
#ifndef __FCFILE_ERRORS_H__ #define __FCFILE_ERRORS_H__ #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <string.h> typedef int FcFile_Error_t; #ifdef _MSC_VER #define sprintf_s sprintf_s #else #define sprintf_s snprintf #endif enum { FCFILE_ERROR_NOERROR, #ifdef _FCLIBS_ERROR_FILE FCLIBS_ERROR_FILE = _FCLIBS_ERROR_FILE, #endif FCFILE_ERROR_POSIX_EACCES, FCFILE_ERROR_POSIX_EDQUOT, FCFILE_ERROR_POSIX_EFAULT, FCFILE_ERROR_POSIX_EINVAL, FCFILE_ERROR_POSIX_ELOOP, FCFILE_ERROR_POSIX_EMLINK, FCFILE_ERROR_POSIX_ENAMETOOLONG, FCFILE_ERROR_POSIX_ENOENT, FCFILE_ERROR_POSIX_ENOMEM, FCFILE_ERROR_POSIX_ENOSPC, FCFILE_ERROR_POSIX_ENOTDIR, FCFILE_ERROR_POSIX_EPERM, FCFILE_ERROR_POSIX_EROFS, FCFILE_ERROR_POSIX_EBADF, FCFILE_ERROR_POSIX_BlockDevice, FCFILE_ERROR_POSIX_CharacterDevice, FCFILE_ERROR_POSIX_Directory, FCFILE_ERROR_POSIX_FIFO_PIPE, FCFILE_ERROR_POSIX_Symlink, FCFILE_ERROR_POSIX_RegularFile, FCFILE_ERROR_POSIX_Socket, FCFILE_ERROR_POSIX_Unknown, FCFILE_ERROR_FUNCTIONPARAMETER, FCFILE_ERROR_THEFILEWASNOTOPENED, FCFILE_ERROR_FSEEKERROR, FCFILE_ERROR_FTELLERROR, FCFILE_ERROR_OOM, FCFILE_ERROR_FREADERROR, FCFILE_ERROR_FCLOSE, FCFILE_ERROR_FWRITE, FCFILE_ERROR_WINAPI_EXISTS, FCFILE_ERROR_WINAPI_PATH_NOT_FOUND, FCFILE_ERROR_WINAPI_UNKNOWN }; #define FCFILE_ERROR_CODE(id)\ id##FCFILE_ERROR_POSIX_EACCES,\ id##FCFILE_ERROR_POSIX_EDQUOT,\ id##FCFILE_ERROR_POSIX_EFAULT,\ id##FCFILE_ERROR_POSIX_EINVAL,\ id##FCFILE_ERROR_POSIX_ELOOP,\ id##FCFILE_ERROR_POSIX_EMLINK,\ id##FCFILE_ERROR_POSIX_ENAMETOOLONG,\ id##FCFILE_ERROR_POSIX_ENOENT,\ id##FCFILE_ERROR_POSIX_ENOMEM,\ id##FCFILE_ERROR_POSIX_ENOSPC,\ id##FCFILE_ERROR_POSIX_ENOTDIR,\ id##FCFILE_ERROR_POSIX_EPERM,\ id##FCFILE_ERROR_POSIX_EROFS,\ id##FCFILE_ERROR_POSIX_EBADF,\ id##FCFILE_ERROR_POSIX_BlockDevice,\ id##FCFILE_ERROR_POSIX_CharacterDevice,\ id##FCFILE_ERROR_POSIX_Directory,\ id##FCFILE_ERROR_POSIX_FIFO_PIPE,\ id##FCFILE_ERROR_POSIX_Symlink,\ id##FCFILE_ERROR_POSIX_RegularFile,\ id##FCFILE_ERROR_POSIX_Socket,\ id##FCFILE_ERROR_POSIX_Unknown,\ id##FCFILE_ERROR_WINAPI_EXISTS,\ id##FCFILE_ERROR_WINAPI_PATH_NOT_FOUND,\ id##FCFILE_ERROR_WINAPI_UNKNOWN #define FCFILE_ERROR_SWITCH(mError, id)\ case FCFILE_ERROR_POSIX_EACCES: mError = id##FCFILE_ERROR_POSIX_EACCES; break;\ case FCFILE_ERROR_POSIX_EDQUOT: mError = id##FCFILE_ERROR_POSIX_EDQUOT; break;\ case FCFILE_ERROR_POSIX_EFAULT: mError = id##FCFILE_ERROR_POSIX_EFAULT; break;\ case FCFILE_ERROR_POSIX_EINVAL: mError = id##FCFILE_ERROR_POSIX_EINVAL; break;\ case FCFILE_ERROR_POSIX_ELOOP: mError = id##FCFILE_ERROR_POSIX_ELOOP; break;\ case FCFILE_ERROR_POSIX_EMLINK: mError = id##FCFILE_ERROR_POSIX_EMLINK; break;\ case FCFILE_ERROR_POSIX_ENAMETOOLONG: mError = id##FCFILE_ERROR_POSIX_ENAMETOOLONG; break;\ case FCFILE_ERROR_POSIX_ENOENT: mError = id##FCFILE_ERROR_POSIX_ENOENT; break;\ case FCFILE_ERROR_POSIX_ENOMEM: mError = id##FCFILE_ERROR_POSIX_ENOMEM; break;\ case FCFILE_ERROR_POSIX_ENOSPC: mError = id##FCFILE_ERROR_POSIX_ENOSPC; break;\ case FCFILE_ERROR_POSIX_ENOTDIR: mError = id##FCFILE_ERROR_POSIX_ENOTDIR; break;\ case FCFILE_ERROR_POSIX_EPERM: mError = id##FCFILE_ERROR_POSIX_EPERM; break;\ case FCFILE_ERROR_POSIX_EROFS: mError = id##FCFILE_ERROR_POSIX_EROFS; break;\ case FCFILE_ERROR_POSIX_EBADF: mError = id##FCFILE_ERROR_POSIX_EBADF; break;\ case FCFILE_ERROR_POSIX_BlockDevice: mError = id##FCFILE_ERROR_POSIX_BlockDevice; break;\ case FCFILE_ERROR_POSIX_CharacterDevice: mError = id##FCFILE_ERROR_POSIX_CharacterDevice; break;\ case FCFILE_ERROR_POSIX_Directory: mError = id##FCFILE_ERROR_POSIX_Directory; break;\ case FCFILE_ERROR_POSIX_FIFO_PIPE: mError = id##FCFILE_ERROR_POSIX_FIFO_PIPE; break;\ case FCFILE_ERROR_POSIX_Symlink: mError = id##FCFILE_ERROR_POSIX_Symlink; break;\ case FCFILE_ERROR_POSIX_RegularFile: mError = id##FCFILE_ERROR_POSIX_RegularFile; break;\ case FCFILE_ERROR_POSIX_Socket: mError = id##FCFILE_ERROR_POSIX_Socket; break;\ case FCFILE_ERROR_POSIX_Unknown: mError = id##FCFILE_ERROR_POSIX_Unknown; break;\ case FCFILE_ERROR_WINAPI_EXISTS: mError = id##FCFILE_ERROR_WINAPI_EXISTS; break;\ case FCFILE_ERROR_WINAPI_PATH_NOT_FOUND: mError = id##FCFILE_ERROR_WINAPI_PATH_NOT_FOUND; break #define FCFILE_ERROR_SWITCH_TEXT(mError, id)\ case FCFILE_ERROR_POSIX_EACCES: mError = "id##FCFILE_ERROR_POSIX_EACCES"; break;\ case FCFILE_ERROR_POSIX_EDQUOT: mError = "id##FCFILE_ERROR_POSIX_EDQUOT"; break;\ case FCFILE_ERROR_POSIX_EFAULT: mError = "id##FCFILE_ERROR_POSIX_EFAULT"; break;\ case FCFILE_ERROR_POSIX_EINVAL: mError = "id##FCFILE_ERROR_POSIX_EINVAL"; break;\ case FCFILE_ERROR_POSIX_ELOOP: mError = "id##FCFILE_ERROR_POSIX_ELOOP"; break;\ case FCFILE_ERROR_POSIX_EMLINK: mError = "id##FCFILE_ERROR_POSIX_EMLINK"; break;\ case FCFILE_ERROR_POSIX_ENAMETOOLONG: mError = "id##FCFILE_ERROR_POSIX_ENAMETOOLONG"; break;\ case FCFILE_ERROR_POSIX_ENOENT: mError = "id##FCFILE_ERROR_POSIX_ENOENT"; break;\ case FCFILE_ERROR_POSIX_ENOMEM: mError = "id##FCFILE_ERROR_POSIX_ENOMEM"; break;\ case FCFILE_ERROR_POSIX_ENOSPC: mError = "id##FCFILE_ERROR_POSIX_ENOSPC"; break;\ case FCFILE_ERROR_POSIX_ENOTDIR: mError = "id##FCFILE_ERROR_POSIX_ENOTDIR"; break;\ case FCFILE_ERROR_POSIX_EPERM: mError = "id##FCFILE_ERROR_POSIX_EPERM"; break;\ case FCFILE_ERROR_POSIX_EROFS: mError = "id##FCFILE_ERROR_POSIX_EROFS"; break;\ case FCFILE_ERROR_POSIX_EBADF: mError = "id##FCFILE_ERROR_POSIX_EBADF"; break;\ case FCFILE_ERROR_POSIX_BlockDevice: mError = "id##FCFILE_ERROR_POSIX_BlockDevice"; break;\ case FCFILE_ERROR_POSIX_CharacterDevice: mError = "id##FCFILE_ERROR_POSIX_CharacterDevice"; break;\ case FCFILE_ERROR_POSIX_Directory: mError = "id##FCFILE_ERROR_POSIX_Directory"; break;\ case FCFILE_ERROR_POSIX_FIFO_PIPE: mError = "id##FCFILE_ERROR_POSIX_FIFO_PIPE"; break;\ case FCFILE_ERROR_POSIX_Symlink: mError = "id##FCFILE_ERROR_POSIX_Symlink"; break;\ case FCFILE_ERROR_POSIX_RegularFile: mError = "id##FCFILE_ERROR_POSIX_RegularFile"; break;\ case FCFILE_ERROR_POSIX_Socket: mError = "id##FCFILE_ERROR_POSIX_Socket"; break;\ case FCFILE_ERROR_POSIX_Unknown: mError = "id##FCFILE_ERROR_POSIX_Unknown"; break;\ case FCFILE_ERROR_WINAPI_EXISTS: mError = "id##FCFILE_ERROR_WINAPI_EXISTS"; break;\ case FCFILE_ERROR_WINAPI_PATH_NOT_FOUND: mError = "id##FCFILE_ERROR_WINAPI_PATH_NOT_FOUND"; break FCFILEDEF bool FcFile_getLastError(char pError[], size_t length, const char *pFile, const char *pFunc, const char *pFailedFunc, int line) { int mError; do { #if defined(_WIN32) || defined(WIN32) mError = strerror_s(pError, length, errno); #elif defined(_GNU_SOURCE) mError = errno; strerror_r(errno, pError, length); #elif _POSIX_C_SOURCE >= 200112L && !defined(_GNU_SOURCE) mError = strerror_r(errno, pError, length); #else mError = errno; #endif switch (mError) { case 0: sprintf_s( pError, length, "File : %s\nLine : %d\nCurrent function : %s()\nFailed function " ": %s()\nError message : \n", pFile, line, pFunc, pFailedFunc); break; case ERANGE: sprintf_s(pError, length, "strerror_s() failed: buffer too small: %zd\n", length); break; case EINVAL: sprintf_s(pError, length, "strerror_s() failed: invalid error code, %d\n", mError); break; default: sprintf_s(pError, length, "strerror_s() failed: unknown error, %d\n", mError); break; } } while (mError == ERANGE); return mError == 0 ? true : false; } #endif //__FCFILE_ERRORS_H__