Changeset 2903


Ignore:
Timestamp:
Sep 12, 2013, 6:39:40 PM (6 years ago)
Author:
touky
Message:

small tweak on file object.

Location:
trunk
Files:
2 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/lol/sys/file.h

    r2816 r2903  
    3535};
    3636
     37struct StreamType
     38{
     39    enum Value
     40    {
     41        StdIn = 0,
     42        StdOut,
     43        StdErr,
     44        File
     45    }
     46    m_value;
     47
     48    inline StreamType(Value v) : m_value(v) {}
     49    inline operator Value() { return m_value; }
     50    inline int Value() { return m_value; }
     51};
     52
    3753class File
    3854{
     
    4359    ~File();
    4460
     61    void Open(StreamType stream);
    4562    void Open(String const &file, FileAccess mode);
    4663    bool IsValid() const;
     
    4966    int Read(uint8_t *buf, int count);
    5067    String ReadString();
     68    int Write(uint8_t *buf, int count);
     69    int WriteString(const String &buf);
    5170
    5271private:
  • trunk/src/sys/file.cpp

    r2816 r2903  
    3333    friend class File;
    3434
     35    FileData() : m_type(StreamType::File) { }
     36
     37    void Open(StreamType stream)
     38    {
     39        if (m_type == StreamType::File)
     40            return;
     41        m_type = stream;
     42        switch((int)stream)
     43        {
     44#if __CELLOS_LV2__
     45        /* FIXME: no modes, no error checking, no nothing */
     46#elif __ANDROID__
     47        /* FIXME: no modes, no error checking, no nothing */
     48#elif HAVE_STDIO_H
     49            case StreamType::StdIn:  m_fd = stdin;  break;
     50            case StreamType::StdOut: m_fd = stdout; break;
     51            case StreamType::StdErr: m_fd = stderr; break;
     52#endif
     53        }
     54    }
     55
    3556    void Open(String const &file, FileAccess mode)
    3657    {
     58        m_type = StreamType::File;
    3759#if __CELLOS_LV2__
    3860        String realfile = String(SYS_APP_HOME) + '/' + file;
     
    106128    }
    107129
     130    int Write(uint8_t *buf, int count)
     131    {
     132#if __CELLOS_LV2__
     133/*
     134        uint64_t done;
     135        CellFsErrno err = cellFsRead(m_fd, buf, count, &done);
     136
     137        if (err != CELL_FS_SUCCEEDED)
     138            return -1;
     139
     140        return (int)done;
     141*/
     142        return 0;
     143#elif __ANDROID__
     144        //return AAsset_read(m_asset, buf, count);
     145        return 0;
     146#elif HAVE_STDIO_H
     147        size_t done = fwrite(buf, 1, count, m_fd);
     148        if (done <= 0)
     149            return -1;
     150
     151        return (int)done;
     152#else
     153        return 0;
     154#endif
     155    }
     156
     157    int WriteString(const String &buf)
     158    {
     159        return Write((uint8_t *)buf.C(), buf.Count());
     160    }
     161
    108162    void Close()
    109163    {
     164        if (m_type != StreamType::File)
     165            return;
    110166#if __CELLOS_LV2__
    111167        if (m_fd >= 0)
     
    131187#endif
    132188    Atomic<int> m_refcount;
     189    StreamType m_type;
    133190};
    134191
     
    174231}
    175232
     233void File::Open(StreamType stream)
     234{
     235    return m_data->Open(stream);
     236}
     237
    176238void File::Open(String const &file, FileAccess mode)
    177239{
     
    194256}
    195257
     258int File::Write(uint8_t *buf, int count)
     259{
     260    return m_data->Write(buf, count);
     261}
     262
     263int File::WriteString(const String &buf)
     264{
     265    return m_data->WriteString(buf);
     266}
     267
    196268void File::Close()
    197269{
Note: See TracChangeset for help on using the changeset viewer.