qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

9p-synth.h (2232B)


      1 /*
      2  * 9p
      3  *
      4  * Copyright IBM, Corp. 2011
      5  *
      6  * Authors:
      7  *  Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
      8  *
      9  * This work is licensed under the terms of the GNU GPL, version 2.  See
     10  * the COPYING file in the top-level directory.
     11  *
     12  */
     13 
     14 #ifndef QEMU_9P_SYNTH_H
     15 #define QEMU_9P_SYNTH_H
     16 
     17 typedef struct V9fsSynthNode V9fsSynthNode;
     18 typedef ssize_t (*v9fs_synth_read)(void *buf, int len, off_t offset,
     19                                    void *arg);
     20 typedef ssize_t (*v9fs_synth_write)(void *buf, int len, off_t offset,
     21                                     void *arg);
     22 typedef struct V9fsSynthNodeAttr {
     23     int mode;
     24     int inode;
     25     int nlink;
     26     v9fs_synth_read read;
     27     v9fs_synth_write write;
     28 } V9fsSynthNodeAttr;
     29 
     30 struct V9fsSynthNode {
     31     QLIST_HEAD(, V9fsSynthNode) child;
     32     QLIST_ENTRY(V9fsSynthNode) sibling;
     33     char name[NAME_MAX];
     34     V9fsSynthNodeAttr *attr;
     35     V9fsSynthNodeAttr actual_attr;
     36     void *private;
     37     int open_count;
     38 };
     39 
     40 typedef struct V9fsSynthOpenState {
     41     off_t offset;
     42     V9fsSynthNode *node;
     43     struct dirent dent;
     44     /*
     45      * Ensure there is enough space for 'dent' above, some systems have a
     46      * d_name size of just 1, which would cause a buffer overrun.
     47      */
     48     char dent_trailing_space[NAME_MAX];
     49 } V9fsSynthOpenState;
     50 
     51 int qemu_v9fs_synth_mkdir(V9fsSynthNode *parent, int mode,
     52                           const char *name, V9fsSynthNode **result);
     53 int qemu_v9fs_synth_add_file(V9fsSynthNode *parent, int mode,
     54                              const char *name, v9fs_synth_read read,
     55                              v9fs_synth_write write, void *arg);
     56 
     57 /* qtest stuff */
     58 
     59 #define QTEST_V9FS_SYNTH_WALK_FILE "WALK%d"
     60 #define QTEST_V9FS_SYNTH_LOPEN_FILE "LOPEN"
     61 #define QTEST_V9FS_SYNTH_WRITE_FILE "WRITE"
     62 
     63 /* for READDIR test */
     64 #define QTEST_V9FS_SYNTH_READDIR_DIR "ReadDirDir"
     65 #define QTEST_V9FS_SYNTH_READDIR_FILE "ReadDirFile%d"
     66 #define QTEST_V9FS_SYNTH_READDIR_NFILES 100
     67 
     68 /* Any write to the "FLUSH" file is handled one byte at a time by the
     69  * backend. If the byte is zero, the backend returns success (ie, 1),
     70  * otherwise it forces the server to try again forever. Thus allowing
     71  * the client to cancel the request.
     72  */
     73 #define QTEST_V9FS_SYNTH_FLUSH_FILE "FLUSH"
     74 
     75 #endif