--- nono/lib/mappedfile.cpp 2026/04/29 17:04:34 1.1 +++ nono/lib/mappedfile.cpp 2026/04/29 17:05:08 1.1.1.4 @@ -4,7 +4,9 @@ // Licensed under nono-license.txt // +// // ファイルを mmap して提供するクラス +// #include "mappedfile.h" #include "mystring.h" @@ -16,7 +18,6 @@ // コンストラクタ MappedFile::MappedFile() { - fd = -1; } // デストラクタ @@ -45,40 +46,6 @@ MappedFile::SetDispname(const std::strin dispname = name; } -// サイズが len で確定しているファイルを読み込み専用でオープンして mmap する。 -// ファイルがなければエラー。これは ROM とか用。 -// 成功すれば mmap した領域のポインタを返す。 -// 失敗すればエラーメッセージを表示して NULL を返す。 -uint8 * -MappedFile::OpenRdOnly(off_t len) -{ - memlen = len; - - fd = open(filename.c_str(), O_RDONLY); - if (fd < 0) { - warn("%s open failed", dispname.c_str()); - return NULL; - } - - if (CheckFilesize() == false) { - Close(); - return NULL; - } - - // mmap する。 - // RDONLY なのでファイルには書き戻さないけど、 - // オンメモリでハックを入れたりできるよう MAP_PRIVATE を指定する。 - void *m = mmap(NULL, memlen, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); - if (m == MAP_FAILED) { - warn("%s mmap failed", dispname.c_str()); - Close(); - return NULL; - } - mem = (uint8 *)m; - - return mem; -} - // サイズが len で確定しているファイルを読み書き両用でオープンして mmap する。 // ファイルがなければ作成する。これは SRAM とか用。 // 成功すれば mmap した領域のポインタを返す。 @@ -131,41 +98,6 @@ MappedFile::OpenCreate(off_t memlen_) return mem; } -// サイズの確定していないファイルを読み書き両用でオープンして mmap する。 -// ファイルがなければエラー。これはディスクイメージ用。 -// 成功すれば mmap した領域のポインタを返す。 -// 失敗すればエラーメッセージを表示して NULL を返す。 -uint8 * -MappedFile::OpenFile() -{ - struct stat st; - - fd = open(filename.c_str(), O_RDWR); - if (fd < 0) { - warn("%s open failed", dispname.c_str()); - return NULL; - } - - // ファイルサイズを取得 - if (fstat(fd, &st) < 0) { - warn("%s stat failed", dispname.c_str()); - Close(); - return NULL; - } - memlen = st.st_size; - - // mmap する。 - void *m = mmap(NULL, memlen, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - if (mem == MAP_FAILED) { - warn("%s mmap failed", dispname.c_str()); - Close(); - return NULL; - } - mem = (uint8 *)m; - - return mem; -} - // ファイルサイズが memlen と同じかどうか調べる。 // ファイルサイズが memlen より短ければエラーメッセージを表示し false を返す。 // ファイルサイズが memlen より長ければワーニングを表示し true を返す。 @@ -205,9 +137,7 @@ MappedFile::Close() mem = NULL; memlen = 0; } - if (fd >= 0) { - close(fd); - } + fd.Close(); filename.clear(); dispname.clear();