Annotation of nono/host/diskdriver.h, revision 1.1.1.1

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2021 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
                      7: //
                      8: // ディスクイメージのドライバ (基本クラス)。
                      9: //
                     10: 
                     11: // Driver クラスとは無関係。
                     12: 
                     13: #pragma once
                     14: 
                     15: #include "object.h"
                     16: 
                     17: class DiskImageDriver : public Object
                     18: {
                     19:        using inherited = Object;
                     20: 
                     21:  public:
                     22:        DiskImageDriver(const std::string& objname_, const std::string& pathname_);
                     23:        ~DiskImageDriver() override;
                     24: 
                     25:        // このドライバが知っているファイルフォーマットなら true を返す。
                     26:        // 知らないファイルフォーマットなら黙って false を返す。
                     27:        virtual bool Match() = 0;
                     28: 
                     29:        // このイメージがサポートしている形式なら true を返す。
                     30:        // サポートしていない形式 (例えば未知のバージョンや機能等) なら
                     31:        // errmsg にエラーメッセージをセットして (pathname の接頭は不要)
                     32:        // false を返す。
                     33:        virtual bool Attach(std::string& errmsg) = 0;
                     34: 
                     35:        // このイメージが書き込み可能かどうかを返す。
                     36:        // 書き込み可能なら 1、不可なら 0 を返す。
                     37:        // エラーなら (errno をセットして?) -1 を返す。
                     38:        int IsWriteable() const;
                     39: 
                     40:        // イメージをオープンする。
                     41:        // 実際にはこの時点では書き込み禁止でオープンされており、
                     42:        // read_only == false が指定されたらオープンし直す、となっている。
                     43:        // 成功すれば true を返す。
                     44:        // 失敗すれば warn 系でエラーを表示して false を返す。
                     45:        virtual bool Open(bool read_only) = 0;
                     46: 
                     47:        // イメージをクローズする。
                     48:        virtual void Close() = 0;
                     49: 
                     50:        // イメージのサイズを返す。
                     51:        // オープンされてなければ 0 を返す。
                     52:        off_t GetSize() const { return filesize; }
                     53: 
                     54:        // イメージの offset から size バイトを buf に読み出す。
                     55:        // 成功すれば true を返す。失敗すれば false を返す。
                     56:        virtual bool Read(void *buf, off_t offset, size_t size) = 0;
                     57: 
                     58:        // イメージの offset 以降に buf から size バイトを書き込む。
                     59:        // 成功すれば true を返す。失敗すれば false を返す。
                     60:        virtual bool Write(const void *buf, off_t offset, size_t size) = 0;
                     61: 
                     62:  protected:
                     63:        // fd から dst に size バイト読んでポインタを進める。
                     64:        // 必ず size バイト読み込むため成功すれば戻り値は size。
                     65:        // エラーなら errno をセットして -1 を返す。EOF を超えるのもエラー扱い。
                     66:        static ssize_t readimg(int fd, void *dst, size_t size);
                     67: 
                     68:        // fd に src に size バイト書いてポインタを進める。
                     69:        // 必ず size バイト書き出すため成功すれば戻り値は size。
                     70:        // エラーなら errno をセットして -1 を返す。
                     71:        static ssize_t writeimg(int fd, const void *src, size_t size);
                     72: 
                     73:        // fd の offset から dst に size バイト読み込む。ポインタは移動しない。
                     74:        // 必ず size バイト読み込むため成功すれば戻り値は size。
                     75:        // エラーなら errno をセットして -1 を返す。EOF を超えるのもエラー扱い。
                     76:        static ssize_t readpos(int fd, void *dst, size_t size, off_t offset);
                     77: 
                     78:        // fd の offset に src から size バイト書き出す。ポインタは移動しない。
                     79:        // 必ず size バイト書き出すため成功すれば戻り値は size。
                     80:        // エラーなら errno をセットして -1 を返す。
                     81:        static ssize_t writepos(int fd, const void *src, size_t size, off_t offset);
                     82: 
                     83:        const std::string& pathname;
                     84: 
                     85:        // イメージサイズ。オープンされなければ 0。
                     86:        off_t filesize {};
                     87: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.