12a6a4076SMarkus Armbruster #ifndef QEMU_9P_MARSHAL_H 22a6a4076SMarkus Armbruster #define QEMU_9P_MARSHAL_H 3829dd286SWei Liu 4*42bdeb04SChristian Schoenebeck #include "p9array.h" 5*42bdeb04SChristian Schoenebeck 687b804ecSzhouyang typedef struct V9fsString { 7829dd286SWei Liu uint16_t size; 8829dd286SWei Liu char *data; 9829dd286SWei Liu } V9fsString; 10*42bdeb04SChristian Schoenebeck P9ARRAY_DECLARE_TYPE(V9fsString); 11829dd286SWei Liu 1287b804ecSzhouyang typedef struct V9fsQID { 1387032833SAntonios Motakis uint8_t type; 1487032833SAntonios Motakis uint32_t version; 1587032833SAntonios Motakis uint64_t path; 16829dd286SWei Liu } V9fsQID; 17829dd286SWei Liu 1887b804ecSzhouyang typedef struct V9fsStat { 19829dd286SWei Liu int16_t size; 20829dd286SWei Liu int16_t type; 21829dd286SWei Liu int32_t dev; 22829dd286SWei Liu V9fsQID qid; 23829dd286SWei Liu int32_t mode; 24829dd286SWei Liu int32_t atime; 25829dd286SWei Liu int32_t mtime; 26829dd286SWei Liu int64_t length; 27829dd286SWei Liu V9fsString name; 28829dd286SWei Liu V9fsString uid; 29829dd286SWei Liu V9fsString gid; 30829dd286SWei Liu V9fsString muid; 31829dd286SWei Liu /* 9p2000.u */ 32829dd286SWei Liu V9fsString extension; 33829dd286SWei Liu int32_t n_uid; 34829dd286SWei Liu int32_t n_gid; 35829dd286SWei Liu int32_t n_muid; 36829dd286SWei Liu } V9fsStat; 37829dd286SWei Liu 3887b804ecSzhouyang typedef struct V9fsIattr { 39829dd286SWei Liu int32_t valid; 40829dd286SWei Liu int32_t mode; 41829dd286SWei Liu int32_t uid; 42829dd286SWei Liu int32_t gid; 43829dd286SWei Liu int64_t size; 44829dd286SWei Liu int64_t atime_sec; 45829dd286SWei Liu int64_t atime_nsec; 46829dd286SWei Liu int64_t mtime_sec; 47829dd286SWei Liu int64_t mtime_nsec; 48829dd286SWei Liu } V9fsIattr; 49829dd286SWei Liu 50829dd286SWei Liu typedef struct V9fsStatDotl { 51829dd286SWei Liu uint64_t st_result_mask; 52829dd286SWei Liu V9fsQID qid; 53829dd286SWei Liu uint32_t st_mode; 54829dd286SWei Liu uint32_t st_uid; 55829dd286SWei Liu uint32_t st_gid; 56829dd286SWei Liu uint64_t st_nlink; 57829dd286SWei Liu uint64_t st_rdev; 58829dd286SWei Liu uint64_t st_size; 59829dd286SWei Liu uint64_t st_blksize; 60829dd286SWei Liu uint64_t st_blocks; 61829dd286SWei Liu uint64_t st_atime_sec; 62829dd286SWei Liu uint64_t st_atime_nsec; 63829dd286SWei Liu uint64_t st_mtime_sec; 64829dd286SWei Liu uint64_t st_mtime_nsec; 65829dd286SWei Liu uint64_t st_ctime_sec; 66829dd286SWei Liu uint64_t st_ctime_nsec; 67829dd286SWei Liu uint64_t st_btime_sec; 68829dd286SWei Liu uint64_t st_btime_nsec; 69829dd286SWei Liu uint64_t st_gen; 70829dd286SWei Liu uint64_t st_data_version; 71829dd286SWei Liu } V9fsStatDotl; 72829dd286SWei Liu v9fs_string_init(V9fsString * str)73829dd286SWei Liustatic inline void v9fs_string_init(V9fsString *str) 74829dd286SWei Liu { 75829dd286SWei Liu str->data = NULL; 76829dd286SWei Liu str->size = 0; 77829dd286SWei Liu } 78bc70a592SGreg Kurz void v9fs_string_free(V9fsString *str); 79bc70a592SGreg Kurz void v9fs_string_sprintf(V9fsString *str, const char *fmt, ...); 80bc70a592SGreg Kurz void v9fs_string_copy(V9fsString *lhs, V9fsString *rhs); 81829dd286SWei Liu 82829dd286SWei Liu #endif 83