/
vTech
/
FcApps
Обзор
Документация
Войти
/
vTech
/
FcApps
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
FcLibs/FcFile/src/FcFile.h
169 строк
4 KB
vTech
alpha_00
03 дек 2025, 17:45
03 дек 2025, 17:45
ab8382d
Код
Авторство
О чём код?
#ifndef __FCFILE_H__ #define __FCFILE_H__ #define _CRT_SECURE_NO_WARNINGS #define FCFILEDEF static inline #include "FcFile_Errors.h" #include "FcFile_Filesystem.h" #include <malloc.h> #include <stdint.h> #include <stdio.h> typedef struct _FcFile_t { union { uint8_t *ptr8; char *ptrChar; } memory; size_t size; } FcFile_t; FCFILEDEF FcFile_Error_t FcFile(FcFile_t *pFile, const TCHAR * pName); FCFILEDEF FcFile_Error_t FcFile_Write(const char *pName, const void *pData, size_t mSize); FCFILEDEF void FcFile_Free(FcFile_t *pFile); FCFILEDEF void FcFile_Strip(FcFile_t *pFile); FCFILEDEF void FcFile_Strip_c(FcFile_t *pFile, const char symbol); FCFILEDEF uint8_t* FcFile_getData(FcFile_t* pFile) { if (!pFile) return NULL; return pFile->memory.ptr8; } FCFILEDEF size_t FcFile_getSize(FcFile_t* pFile) { if (!pFile) return 0; return pFile->size; } FCFILEDEF FcFile_Error_t FcFile_Filesystem_createFolder(const TCHAR directory[]); FCFILEDEF FcFile_Error_t FcFile(FcFile_t *pFile, const TCHAR *pName) { FILE *mStream; long size_file; FcFile_Error_t mError; mError = FCFILE_ERROR_NOERROR; if (!pFile) { mError = FCFILE_ERROR_FUNCTIONPARAMETER; goto gError; } //#ifdef _MSC_VER #ifdef linux if (NULL == (mStream = fopen(pName, "rb"))) { mError = FCFILE_ERROR_THEFILEWASNOTOPENED; } #elif _WIN32 if (0 != _tfopen_s(&mStream, (_TCHAR*)pName, _T("rb"))) { mError = FCFILE_ERROR_THEFILEWASNOTOPENED; } #else #error #endif //#else //#ifdef UNICODE // mStream = _wfopen(pName, TEXT("rb")); //#else // mStream = fopen(pName, "rb"); //#endif //#endif if (mStream == NULL) { mError = FCFILE_ERROR_THEFILEWASNOTOPENED; goto gError; } if (fseek(mStream, 0, SEEK_END) != 0) { mError = FCFILE_ERROR_FSEEKERROR; goto gError; } if ((size_file = ftell(mStream)) == -1L) { mError = FCFILE_ERROR_FTELLERROR; goto gError; } rewind(mStream); if ((pFile->memory.ptr8 = (uint8_t *)malloc((size_t)size_file)) == NULL) { mError = FCFILE_ERROR_OOM; goto gError; } pFile->size = (size_t)size_file; if (!fread(pFile->memory.ptr8, (size_t)size_file, 1, mStream)) { mError = FCFILE_ERROR_FREADERROR; goto gError; } if (fclose(mStream) != 0) { mError = FCFILE_ERROR_FCLOSE; goto gError; } return mError; gError: FcFile_Free(pFile); return mError; } FCFILEDEF void FcFile_Free(FcFile_t *pFile) { if (pFile) { free(pFile->memory.ptr8); pFile->memory.ptr8 = NULL; pFile->size = 0; } } FCFILEDEF FcFile_Error_t FcFile_Write( const char *pName, const void *pData, size_t mSize) { FILE *mFile; FcFile_Error_t mError; mFile = NULL; mError = FCFILE_ERROR_NOERROR; if (!pName || !pData) { goto gError; } #ifdef _MSC_VER fopen_s(&mFile, pName, "wb+"); #else mFile = fopen(pName, "wb+"); #endif if (!mFile) { mError = FCFILE_ERROR_THEFILEWASNOTOPENED; goto gError; } if (mSize != fwrite(pData, mSize, 1, mFile)) { mError = FCFILE_ERROR_FWRITE; goto gError; } return mError; gError: if (mFile) fclose(mFile); return mError; } FCFILEDEF void FcFile_Strip(FcFile_t *pFile) { size_t offset = 0; if (!pFile) { goto gError; } for (size_t i = 0; i < pFile->size; ++i) { uint8_t c = pFile->memory.ptr8[i]; if (c == ' ' || c == '\t' || c == '\n') ++offset; else pFile->memory.ptr8[i - offset] = c; } if (pFile->size && offset) pFile->memory.ptr8[pFile->size - offset] = '\0'; gError: return; } FCFILEDEF void FcFile_Strip_c(FcFile_t *pFile, const char symbol) { size_t offset = 0; if (!pFile) { goto gError; } for (size_t i = 0; i < pFile->size; ++i) { uint8_t c = pFile->memory.ptr8[i]; if (c == ' ' || c == '\t' || c == '\n' || c == symbol) ++offset; else pFile->memory.ptr8[i - offset] = c; } if (pFile->size && offset) pFile->memory.ptr8[pFile->size - offset] = '\0'; gError: return; } #undef FCFILEDEF #endif //__FCFILE_H__