xref: /qemu/fsdev/9p-marshal.h (revision 829dd2861a0f925526c5598d65a1bc05de9186c2)
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