1*829dd286SWei Liu #ifndef _QEMU_9P_MARSHAL_H 2*829dd286SWei Liu #define _QEMU_9P_MARSHAL_H 3*829dd286SWei Liu 4*829dd286SWei Liu typedef struct V9fsString 5*829dd286SWei Liu { 6*829dd286SWei Liu uint16_t size; 7*829dd286SWei Liu char *data; 8*829dd286SWei Liu } V9fsString; 9*829dd286SWei Liu 10*829dd286SWei Liu typedef struct V9fsQID 11*829dd286SWei Liu { 12*829dd286SWei Liu int8_t type; 13*829dd286SWei Liu int32_t version; 14*829dd286SWei Liu int64_t path; 15*829dd286SWei Liu } V9fsQID; 16*829dd286SWei Liu 17*829dd286SWei Liu typedef struct V9fsStat 18*829dd286SWei Liu { 19*829dd286SWei Liu int16_t size; 20*829dd286SWei Liu int16_t type; 21*829dd286SWei Liu int32_t dev; 22*829dd286SWei Liu V9fsQID qid; 23*829dd286SWei Liu int32_t mode; 24*829dd286SWei Liu int32_t atime; 25*829dd286SWei Liu int32_t mtime; 26*829dd286SWei Liu int64_t length; 27*829dd286SWei Liu V9fsString name; 28*829dd286SWei Liu V9fsString uid; 29*829dd286SWei Liu V9fsString gid; 30*829dd286SWei Liu V9fsString muid; 31*829dd286SWei Liu /* 9p2000.u */ 32*829dd286SWei Liu V9fsString extension; 33*829dd286SWei Liu int32_t n_uid; 34*829dd286SWei Liu int32_t n_gid; 35*829dd286SWei Liu int32_t n_muid; 36*829dd286SWei Liu } V9fsStat; 37*829dd286SWei Liu 38*829dd286SWei Liu typedef struct V9fsIattr 39*829dd286SWei Liu { 40*829dd286SWei Liu int32_t valid; 41*829dd286SWei Liu int32_t mode; 42*829dd286SWei Liu int32_t uid; 43*829dd286SWei Liu int32_t gid; 44*829dd286SWei Liu int64_t size; 45*829dd286SWei Liu int64_t atime_sec; 46*829dd286SWei Liu int64_t atime_nsec; 47*829dd286SWei Liu int64_t mtime_sec; 48*829dd286SWei Liu int64_t mtime_nsec; 49*829dd286SWei Liu } V9fsIattr; 50*829dd286SWei Liu 51*829dd286SWei Liu typedef struct V9fsStatDotl { 52*829dd286SWei Liu uint64_t st_result_mask; 53*829dd286SWei Liu V9fsQID qid; 54*829dd286SWei Liu uint32_t st_mode; 55*829dd286SWei Liu uint32_t st_uid; 56*829dd286SWei Liu uint32_t st_gid; 57*829dd286SWei Liu uint64_t st_nlink; 58*829dd286SWei Liu uint64_t st_rdev; 59*829dd286SWei Liu uint64_t st_size; 60*829dd286SWei Liu uint64_t st_blksize; 61*829dd286SWei Liu uint64_t st_blocks; 62*829dd286SWei Liu uint64_t st_atime_sec; 63*829dd286SWei Liu uint64_t st_atime_nsec; 64*829dd286SWei Liu uint64_t st_mtime_sec; 65*829dd286SWei Liu uint64_t st_mtime_nsec; 66*829dd286SWei Liu uint64_t st_ctime_sec; 67*829dd286SWei Liu uint64_t st_ctime_nsec; 68*829dd286SWei Liu uint64_t st_btime_sec; 69*829dd286SWei Liu uint64_t st_btime_nsec; 70*829dd286SWei Liu uint64_t st_gen; 71*829dd286SWei Liu uint64_t st_data_version; 72*829dd286SWei Liu } V9fsStatDotl; 73*829dd286SWei Liu 74*829dd286SWei Liu static inline void v9fs_string_init(V9fsString *str) 75*829dd286SWei Liu { 76*829dd286SWei Liu str->data = NULL; 77*829dd286SWei Liu str->size = 0; 78*829dd286SWei Liu } 79*829dd286SWei Liu extern void v9fs_string_free(V9fsString *str); 80*829dd286SWei Liu extern void v9fs_string_null(V9fsString *str); 81*829dd286SWei Liu extern void v9fs_string_sprintf(V9fsString *str, const char *fmt, ...); 82*829dd286SWei Liu extern void v9fs_string_copy(V9fsString *lhs, V9fsString *rhs); 83*829dd286SWei Liu 84*829dd286SWei Liu #endif 85