xref: /qemu/fsdev/9p-marshal.h (revision 42bdeb04)
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 Liu static 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