adb: extract syncmsg structs.
Make it so that we can get the sizeof a member of syncmsg without having an instance of syncmsg or doing something awful along the lines of sizeof(reinterpret_cast<syncmsg*>(nullptr)->status). Test: m adb adbd Change-Id: I4830e7f90033c7706ff52cdd8d13e9cf40c73628
This commit is contained in:
parent
b962d6bee5
commit
eddae92928
1 changed files with 62 additions and 50 deletions
|
@ -41,57 +41,69 @@ struct SyncRequest {
|
|||
// Followed by 'path_length' bytes of path (not NUL-terminated).
|
||||
} __attribute__((packed));
|
||||
|
||||
struct __attribute__((packed)) sync_stat_v1 {
|
||||
uint32_t id;
|
||||
uint32_t mode;
|
||||
uint32_t size;
|
||||
uint32_t mtime;
|
||||
};
|
||||
|
||||
struct __attribute__((packed)) sync_stat_v2 {
|
||||
uint32_t id;
|
||||
uint32_t error;
|
||||
uint64_t dev;
|
||||
uint64_t ino;
|
||||
uint32_t mode;
|
||||
uint32_t nlink;
|
||||
uint32_t uid;
|
||||
uint32_t gid;
|
||||
uint64_t size;
|
||||
int64_t atime;
|
||||
int64_t mtime;
|
||||
int64_t ctime;
|
||||
};
|
||||
|
||||
struct __attribute__((packed)) sync_dent_v1 {
|
||||
uint32_t id;
|
||||
uint32_t mode;
|
||||
uint32_t size;
|
||||
uint32_t mtime;
|
||||
uint32_t namelen;
|
||||
}; // followed by `namelen` bytes of the name.
|
||||
|
||||
struct __attribute__((packed)) sync_dent_v2 {
|
||||
uint32_t id;
|
||||
uint32_t error;
|
||||
uint64_t dev;
|
||||
uint64_t ino;
|
||||
uint32_t mode;
|
||||
uint32_t nlink;
|
||||
uint32_t uid;
|
||||
uint32_t gid;
|
||||
uint64_t size;
|
||||
int64_t atime;
|
||||
int64_t mtime;
|
||||
int64_t ctime;
|
||||
uint32_t namelen;
|
||||
}; // followed by `namelen` bytes of the name.
|
||||
|
||||
struct __attribute__((packed)) sync_data {
|
||||
uint32_t id;
|
||||
uint32_t size;
|
||||
}; // followed by `size` bytes of data.
|
||||
|
||||
struct __attribute__((packed)) sync_status {
|
||||
uint32_t id;
|
||||
uint32_t msglen;
|
||||
}; // followed by `msglen` bytes of error message, if id == ID_FAIL.
|
||||
|
||||
union syncmsg {
|
||||
struct __attribute__((packed)) {
|
||||
uint32_t id;
|
||||
uint32_t mode;
|
||||
uint32_t size;
|
||||
uint32_t mtime;
|
||||
} stat_v1;
|
||||
struct __attribute__((packed)) {
|
||||
uint32_t id;
|
||||
uint32_t error;
|
||||
uint64_t dev;
|
||||
uint64_t ino;
|
||||
uint32_t mode;
|
||||
uint32_t nlink;
|
||||
uint32_t uid;
|
||||
uint32_t gid;
|
||||
uint64_t size;
|
||||
int64_t atime;
|
||||
int64_t mtime;
|
||||
int64_t ctime;
|
||||
} stat_v2;
|
||||
struct __attribute__((packed)) {
|
||||
uint32_t id;
|
||||
uint32_t mode;
|
||||
uint32_t size;
|
||||
uint32_t mtime;
|
||||
uint32_t namelen;
|
||||
} dent_v1; // followed by `namelen` bytes of the name.
|
||||
struct __attribute__((packed)) {
|
||||
uint32_t id;
|
||||
uint32_t error;
|
||||
uint64_t dev;
|
||||
uint64_t ino;
|
||||
uint32_t mode;
|
||||
uint32_t nlink;
|
||||
uint32_t uid;
|
||||
uint32_t gid;
|
||||
uint64_t size;
|
||||
int64_t atime;
|
||||
int64_t mtime;
|
||||
int64_t ctime;
|
||||
uint32_t namelen;
|
||||
} dent_v2; // followed by `namelen` bytes of the name.
|
||||
struct __attribute__((packed)) {
|
||||
uint32_t id;
|
||||
uint32_t size;
|
||||
} data; // followed by `size` bytes of data.
|
||||
struct __attribute__((packed)) {
|
||||
uint32_t id;
|
||||
uint32_t msglen;
|
||||
} status; // followed by `msglen` bytes of error message, if id == ID_FAIL.
|
||||
sync_stat_v1 stat_v1;
|
||||
sync_stat_v2 stat_v2;
|
||||
sync_dent_v1 dent_v1;
|
||||
sync_dent_v2 dent_v2;
|
||||
sync_data data;
|
||||
sync_status status;
|
||||
};
|
||||
|
||||
#define SYNC_DATA_MAX (64 * 1024)
|
||||
|
|
Loading…
Reference in a new issue