1/* Stream - inode stream access functions 2** 3** Copyright 2003-2004, Axel D��rfler, axeld@pinc-software.de. All rights reserved. 4** Distributed under the terms of the MIT License. 5*/ 6#ifndef STREAM_H 7#define STREAM_H 8 9 10#include "Volume.h" 11 12#include <sys/stat.h> 13 14class Node; 15 16 17namespace BFS { 18 19class Stream : public bfs_inode { 20 public: 21 Stream(Volume &volume, block_run run); 22 Stream(Volume &volume, off_t id); 23 ~Stream(); 24 25 status_t InitCheck(); 26 Volume &GetVolume() const { return fVolume; } 27 28 status_t FindBlockRun(off_t pos, block_run &run, off_t &offset); 29 status_t ReadAt(off_t pos, uint8 *buffer, size_t *length); 30 31 status_t GetName(char *name, size_t size) const; 32 off_t Size() const { return data.Size(); } 33 off_t ID() const { return fVolume.ToVnode(inode_num); } 34 status_t ReadLink(char *buffer, size_t bufferSize); 35 36 bool IsContainer() const { return Mode() & (S_IFDIR | S_INDEX_DIR | S_ATTR_DIR); } 37 bool IsSymlink() const { return S_ISLNK(Mode()); } 38 bool IsIndex() const { return false; } 39 40 static Node *NodeFactory(Volume &volume, off_t id); 41 42 private: 43 status_t GetNextSmallData(const small_data **_smallData) const; 44 45 Volume &fVolume; 46}; 47 48} // namespace BFS 49 50#endif /* STREAM_H */ 51