OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #ifndef FILE_INTERFACES_H |
| 6 #define FILE_INTERFACES_H |
| 7 |
| 8 #include <errno.h> |
| 9 #include <fcntl.h> |
| 10 #include <stdarg.h> |
| 11 #include <string.h> |
| 12 #include <sys/dir.h> |
| 13 #include <sys/ioctl.h> |
| 14 #include <sys/types.h> |
| 15 #include <termios.h> |
| 16 #include <unistd.h> |
| 17 |
| 18 #include "../base/nacl_dirent.h" |
| 19 |
| 20 class FileStream { |
| 21 public: |
| 22 virtual ~FileStream() {} |
| 23 |
| 24 virtual void addref() = 0; |
| 25 virtual void release() = 0; |
| 26 virtual FileStream* dup(int fd) = 0; |
| 27 |
| 28 virtual void close() = 0; |
| 29 virtual int read(char* buf, size_t count, size_t* nread) = 0; |
| 30 virtual int write(const char* buf, size_t count, size_t* nwrote) = 0; |
| 31 virtual int seek(nacl_abi_off_t offset, int whence, |
| 32 nacl_abi_off_t* new_offset) { |
| 33 return ESPIPE; |
| 34 } |
| 35 virtual int fstat(nacl_abi_stat* out) { |
| 36 memset(out, 0, sizeof(nacl_abi_stat)); |
| 37 return 0; |
| 38 } |
| 39 virtual int getdents(dirent* buf, size_t count, size_t* nread) { |
| 40 return ENOTDIR; |
| 41 } |
| 42 |
| 43 virtual int isatty() { |
| 44 errno = EINVAL; |
| 45 return 0; |
| 46 } |
| 47 virtual int tcgetattr(termios* termios_p) { |
| 48 errno = EINVAL; |
| 49 return -1; |
| 50 } |
| 51 virtual int tcsetattr(int optional_actions, const termios* termios_p) { |
| 52 errno = EINVAL; |
| 53 return -1; |
| 54 } |
| 55 virtual int fcntl(int cmd, va_list ap) { |
| 56 errno = EINVAL; |
| 57 return -1; |
| 58 } |
| 59 virtual int ioctl(int request, va_list ap) { |
| 60 errno = EINVAL; |
| 61 return -1; |
| 62 } |
| 63 |
| 64 virtual bool is_read_ready() { |
| 65 return true; |
| 66 } |
| 67 virtual bool is_write_ready() { |
| 68 return true; |
| 69 } |
| 70 virtual bool is_exception() { |
| 71 return false; |
| 72 } |
| 73 }; |
| 74 |
| 75 class PathHandler { |
| 76 public: |
| 77 virtual ~PathHandler() {} |
| 78 |
| 79 virtual void addref() = 0; |
| 80 virtual void release() = 0; |
| 81 |
| 82 virtual FileStream* open(int fd, const char* pathname, int oflag) = 0; |
| 83 virtual int stat(const char* pathname, nacl_abi_stat* out) = 0; |
| 84 }; |
| 85 |
| 86 class InputInterface { |
| 87 public: |
| 88 virtual ~InputInterface() {} |
| 89 |
| 90 virtual void OnOpen(bool success) = 0; |
| 91 virtual void OnRead(const char* buf, size_t size) = 0; |
| 92 virtual void OnClose() = 0; |
| 93 }; |
| 94 |
| 95 class OutputInterface { |
| 96 public: |
| 97 virtual ~OutputInterface() {} |
| 98 |
| 99 virtual bool OpenFile(int fd, const char* name, int mode, |
| 100 InputInterface* stream) = 0; |
| 101 virtual bool OpenSocket(int fd, const char* host, uint16_t port, |
| 102 InputInterface* stream) = 0; |
| 103 virtual bool Write(int fd, const char* data, size_t size) = 0; |
| 104 virtual bool Read(int fd, size_t size) = 0; |
| 105 virtual bool Close(int fd) = 0; |
| 106 }; |
| 107 |
| 108 #endif // FILE_INTERFACES_H |
| 109 |
OLD | NEW |