GL CHOCO ENGINE
Loading...
Searching...
No Matches
fs_utils.c File Reference

ファイル処理に関するユーティリティAPIの実装 More...

#include <string.h>
#include <stddef.h>
#include <stdbool.h>
#include "engine/io_utils/fs_utils/fs_utils.h"
#include "engine/containers/choco_string.h"
#include "engine/core/filesystem/filesystem.h"
#include "engine/core/memory/choco_memory.h"
#include "engine/base/choco_macros.h"
#include "engine/base/choco_message.h"
Include dependency graph for fs_utils.c:

Data Structures

struct  fs_utils
 ファイルシステムユーティリティ内部状態管理構造体 More...
 

Macros

#define FS_READ_UNIT_SIZE   512
 

Functions

fs_utils_result_t fs_utils_create (const char *filepath_, const char *filename_, const char *extension_, filesystem_open_mode_t open_mode_, fs_utils_t **fs_utils_)
 fs_utils_t構造体インスタンスを生成し初期化する
 
void fs_utils_destroy (fs_utils_t **fs_utils_)
 fs_utils_が管理するメモリと自身のメモリを解放し、*fs_utils_=NULLにする
 
fs_utils_result_t fs_utils_text_file_read (fs_utils_t *fs_utils_, choco_string_t *out_string_)
 fs_utils_create で指定したファイルの中身を全て読み込む
 
fs_utils_result_t fs_utils_fullpath_get (fs_utils_t *fs_utils_, choco_string_t *out_fullpath_)
 fs_utils_が保持するファイルパス,ファイル名,拡張子の文字列からフルパス文字列を生成する
 

Detailed Description

ファイル処理に関するユーティリティAPIの実装

Author
chocolate-pie24
Version
0.1
Date
2025-12.26
Todo:
ターゲットコントローラに応じてFS_READ_UNIT_SIZEを変える
License
MIT License. See LICENSE file in the project root for full license text.

Macro Definition Documentation

◆ FS_READ_UNIT_SIZE

#define FS_READ_UNIT_SIZE   512

ファイル読み込みの際に一度に読み込むバイト数(メモリの動的確保回数を減らすため,固定値にした)

Function Documentation

◆ fs_utils_create()

fs_utils_result_t fs_utils_create ( const char *  filepath_,
const char *  filename_,
const char *  extension_,
filesystem_open_mode_t  open_mode_,
fs_utils_t **  fs_utils_ 
)

fs_utils_t構造体インスタンスを生成し初期化する

Warning
引数の値は以下に注意する
  • filepath_の末尾には必ず'/'をつける
  • extensionは必ず'.'から始めること
Note
filepath/filename.extentionのファイルがopen_mode_でopenされる
fs_utils_result_t ret = fs_utils_create("path/to/", "filename", ".txt", FILESYSTEM_MODE_READ, &fs_utils); // path/to/filename.txtがオープンされる
// エラー処理
@ FILESYSTEM_MODE_READ
Definition: filesystem.h:60
fs_utils_result_t fs_utils_create(const char *filepath_, const char *filename_, const char *extension_, filesystem_open_mode_t open_mode_, fs_utils_t **fs_utils_)
fs_utils_t構造体インスタンスを生成し初期化する
Definition: fs_utils.c:91
fs_utils_result_t
ファイルシステムユーティリティ実行結果コード定義
Definition: fs_utils.h:37
ファイルシステムユーティリティ内部状態管理構造体
Definition: fs_utils.c:66
Parameters
filepath_ファイルパス
filename_ファイル名
extension_拡張子(拡張子がない場合はNULLを指定する)
open_mode_ファイルオープンモード filesystem_open_mode_t
fs_utils_初期化対象構造体インスタンスへのダブルポインタ
Return values
FS_UTILS_INVALID_ARGUMENT以下のいずれか
  • filepath_ == NULL
  • filename_ == NULL
  • fs_utils_ == NULL
  • *fs_utils_ != NULL
  • open_mode_ == FILESYSTEM_MODE_NONE
  • メモリシステム未初期化
FS_UTILS_LIMIT_EXCEEDEDメモリシステムのシステム使用可能範囲上限を超過
FS_UTILS_NO_MEMORYメモリ割り当て失敗
FS_UTILS_OVERFLOW文字列が長すぎてオーバーフロー
FS_UTILS_UNDEFINED_ERROR想定していないエラー(バグorエラー処理漏れ)
FS_UTILS_DATA_CORRUPTEDデータメモリ破損,API誤用,初期化漏れ
FS_UTILS_FILE_OPEN_ERRORファイルオープンエラー
FS_UTILS_RUNTIME_ERROR既にオープン済みのファイルハンドル(初期化済みのハンドルは引数チェックで弾かれるため起こり得ない。発生したらバグ)
FS_UTILS_SUCCESSメモリ確保と初期化に成功し、正常終了

◆ fs_utils_destroy()

void fs_utils_destroy ( fs_utils_t **  fs_utils_)

fs_utils_が管理するメモリと自身のメモリを解放し、*fs_utils_=NULLにする

Note
  • 2重デストロイ許可
  • fs_utils_ == NULLの場合はno-op
  • *fs_utils_ == NULLの場合はno-op
  • 内部でfilesystem_destroyが呼び出され、オープン中のファイルがクローズされる
fs_utils_result_t ret = fs_utils_create("path/to/", "filename", ".txt", FILESYSTEM_MODE_READ, &fs_utils); // path/to/filename.txtがオープンされる
// エラー処理
fs_utils_destroy(&fs_utils); // 2重デストロイ許可
void fs_utils_destroy(fs_utils_t **fs_utils_)
fs_utils_が管理するメモリと自身のメモリを解放し、*fs_utils_=NULLにする
Definition: fs_utils.c:188
Parameters
fs_utils_メモリ解放対象構造体インスタンスへのダブルポインタ

◆ fs_utils_fullpath_get()

fs_utils_result_t fs_utils_fullpath_get ( fs_utils_t fs_utils_,
choco_string_t out_fullpath_ 
)

fs_utils_が保持するファイルパス,ファイル名,拡張子の文字列からフルパス文字列を生成する

Note
処理に失敗した場合,out_fullpath_の内部データは変更される可能性がある
Warning
out_fullpath_は choco_string_default_create choco_string_create_from_c_string によって初期化されたインスタンスを渡すこと
Parameters
fs_utils_fs_utils_t構造体インスタンスへのポインタ
out_fullpath_フルパス格納先choco_string_t構造体インスタンスへのポインタ
Return values
FS_UTILS_INVALID_ARGUMENT以下のいずれか
  • fs_utils_がNULL
  • out_fullpath_がNULL
  • filepathの文字列をコピーする際にchoco_string_copyがCHOCO_STRING_INVALID_ARGUMENTを返した
  • filenameの文字列をコピーする際にchoco_string_concatがCHOCO_STRING_INVALID_ARGUMENTを返した
  • extensionの文字列をコピーする際にchoco_string_concatがCHOCO_STRING_INVALID_ARGUMENTを返した
FS_UTILS_DATA_CORRUPTED以下のいずれか
  • fs_utils_の内部状態が無効もしくは未初期化
  • filepathの文字列をコピーする際にchoco_string_copyがCHOCO_STRING_DATA_CORRUPTEDを返した
  • filenameの文字列をコピーする際にchoco_string_concatがCHOCO_STRING_DATA_CORRUPTEDを返した
  • extensionの文字列をコピーする際にchoco_string_concatがCHOCO_STRING_DATA_CORRUPTEDを返した
FS_UTILS_OVERFLOW以下のいずれか
  • filepathの文字列をコピーする際にchoco_string_copyがCHOCO_STRING_OVERFLOWを返した
  • filenameの文字列をコピーする際にchoco_string_concatがCHOCO_STRING_OVERFLOWを返した
  • extensionの文字列をコピーする際にchoco_string_concatがCHOCO_STRING_OVERFLOWを返した
FS_UTILS_NO_MEMORY以下のいずれか
  • filepathの文字列をコピーする際にchoco_string_copyがCHOCO_STRING_NO_MEMORYを返した
  • filenameの文字列をコピーする際にchoco_string_concatがCHOCO_STRING_NO_MEMORYを返した
  • extensionの文字列をコピーする際にchoco_string_concatがCHOCO_STRING_NO_MEMORYを返した
FS_UTILS_LIMIT_EXCEEDED以下のいずれか
  • filepathの文字列をコピーする際にchoco_string_copyがCHOCO_STRING_LIMIT_EXCEEDEDを返した
  • filenameの文字列をコピーする際にchoco_string_concatがCHOCO_STRING_LIMIT_EXCEEDEDを返した
  • extensionの文字列をコピーする際にchoco_string_concatがCHOCO_STRING_LIMIT_EXCEEDEDを返した
FS_UTILS_UNDEFINED_ERROR処理過程において想定外のエラーコードを受け取った
FS_UTILS_SUCCESSフルパス文字列の生成に成功し,正常終了

◆ fs_utils_text_file_read()

fs_utils_result_t fs_utils_text_file_read ( fs_utils_t fs_utils_,
choco_string_t out_string_ 
)

fs_utils_create で指定したファイルの中身を全て読み込む

Warning
内部ではchoco_string_concat_from_c_stringを使用して文字列を連結する。各文字列処理には終端文字による判定処理が存在する。 ここで、バイナリファイルには終端文字(0)が普通に含まれるため、バイナリファイルの読み込みには使用してはいけない。
fs_utils_result_t ret = fs_utils_create("path/to/", "filename", ".txt", FILESYSTEM_MODE_READ, &fs_utils); // path/to/filename.txtがオープンされる
// エラー処理
choco_string_t* string = NULL;
// エラー処理
ret = fs_utils_text_file_read(fs_utils, string); // path/to/filename.txtの中身が全て読み込まれ、stringに格納される
// エラー処理
choco_string_result_t
文字列API実行結果コードリスト
Definition: choco_string.h:40
choco_string_result_t choco_string_default_create(choco_string_t **string_)
空の文字列コンテナを生成する
Definition: choco_string.c:92
fs_utils_result_t fs_utils_text_file_read(fs_utils_t *fs_utils_, choco_string_t *out_string_)
fs_utils_create で指定したファイルの中身を全て読み込む
Definition: fs_utils.c:203
文字列コンテナ内部状態管理構造体
Definition: choco_string.c:68
Parameters
fs_utils_fs_utils_t構造体インスタンスへのポインタ
out_string_読み込んだ文字列の格納先
Return values
FS_UTILS_INVALID_ARGUMENT以下のいずれか
  • fs_utils_ == NULL
  • out_string_ == NULL
FS_UTILS_DATA_CORRUPTEDデータメモリ破損,API誤用,初期化漏れ
FS_UTILS_BAD_OPERATION読み込み用ではないファイルオープンモードが渡された
FS_UTILS_RUNTIME_ERRORファイル読み込み中にエラーが発生
FS_UTILS_NO_MEMORYメモリ確保に失敗
FS_UTILS_OVERFLOW処理過程でオーバーフローが発生
FS_UTILS_LIMIT_EXCEEDEDメモリ管理システムが管理するメモリ使用量上限超過
FS_UTILS_SUCCESSファイルの読み込みに成功し、正常終了