am 93b9e865: Merge "There are no big endian hosts, grandpa."
* commit '93b9e8653e95d711b4df163febd662fc022de72a': There are no big endian hosts, grandpa.
This commit is contained in:
commit
5c027334cc
3 changed files with 25 additions and 28 deletions
|
|
@ -79,7 +79,7 @@ static bool SendRequest(int fd, int id, const char* path) {
|
||||||
char buf[sizeof(SyncRequest) + path_length] __attribute__((aligned(8)));
|
char buf[sizeof(SyncRequest) + path_length] __attribute__((aligned(8)));
|
||||||
SyncRequest* req = reinterpret_cast<SyncRequest*>(buf);
|
SyncRequest* req = reinterpret_cast<SyncRequest*>(buf);
|
||||||
req->id = id;
|
req->id = id;
|
||||||
req->path_length = htoll(path_length);
|
req->path_length = path_length;
|
||||||
char* data = reinterpret_cast<char*>(req + 1);
|
char* data = reinterpret_cast<char*>(req + 1);
|
||||||
memcpy(data, path, path_length);
|
memcpy(data, path, path_length);
|
||||||
|
|
||||||
|
|
@ -143,14 +143,14 @@ static bool sync_ls(int fd, const char* path, sync_ls_cb func, void* cookie) {
|
||||||
if (msg.dent.id == ID_DONE) return true;
|
if (msg.dent.id == ID_DONE) return true;
|
||||||
if (msg.dent.id != ID_DENT) return false;
|
if (msg.dent.id != ID_DENT) return false;
|
||||||
|
|
||||||
size_t len = ltohl(msg.dent.namelen);
|
size_t len = msg.dent.namelen;
|
||||||
if (len > 256) return false; // TODO: resize buffer? continue?
|
if (len > 256) return false; // TODO: resize buffer? continue?
|
||||||
|
|
||||||
char buf[257];
|
char buf[257];
|
||||||
if (!ReadFdExactly(fd, buf, len)) return false;
|
if (!ReadFdExactly(fd, buf, len)) return false;
|
||||||
buf[len] = 0;
|
buf[len] = 0;
|
||||||
|
|
||||||
func(ltohl(msg.dent.mode), ltohl(msg.dent.size), ltohl(msg.dent.time), buf, cookie);
|
func(msg.dent.mode, msg.dent.size, msg.dent.time, buf, cookie);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -165,9 +165,9 @@ static bool sync_finish_stat(SyncConnection& sc, unsigned int* timestamp,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timestamp) *timestamp = ltohl(msg.stat.time);
|
if (timestamp) *timestamp = msg.stat.time;
|
||||||
if (mode) *mode = ltohl(msg.stat.mode);
|
if (mode) *mode = msg.stat.mode;
|
||||||
if (size) *size = ltohl(msg.stat.size);
|
if (size) *size = msg.stat.size;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -211,7 +211,7 @@ static int write_data_file(SyncConnection& sc, const char* path, syncsendbuf* sb
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
sbuf->size = htoll(ret);
|
sbuf->size = ret;
|
||||||
if (!WriteFdExactly(sc.fd, sbuf, sizeof(unsigned) * 2 + ret)) {
|
if (!WriteFdExactly(sc.fd, sbuf, sizeof(unsigned) * 2 + ret)) {
|
||||||
err = -1;
|
err = -1;
|
||||||
break;
|
break;
|
||||||
|
|
@ -238,7 +238,7 @@ static int write_data_link(SyncConnection& sc, const char* path, syncsendbuf* sb
|
||||||
}
|
}
|
||||||
sbuf->data[len] = '\0';
|
sbuf->data[len] = '\0';
|
||||||
|
|
||||||
sbuf->size = htoll(len + 1);
|
sbuf->size = len + 1;
|
||||||
sbuf->id = ID_DATA;
|
sbuf->id = ID_DATA;
|
||||||
|
|
||||||
if (!WriteFdExactly(sc.fd, sbuf, sizeof(unsigned) * 2 + len + 1)) {
|
if (!WriteFdExactly(sc.fd, sbuf, sizeof(unsigned) * 2 + len + 1)) {
|
||||||
|
|
@ -269,14 +269,14 @@ static bool sync_send(SyncConnection& sc, const char *lpath, const char *rpath,
|
||||||
|
|
||||||
syncmsg msg;
|
syncmsg msg;
|
||||||
msg.data.id = ID_DONE;
|
msg.data.id = ID_DONE;
|
||||||
msg.data.size = htoll(mtime);
|
msg.data.size = mtime;
|
||||||
if (!WriteFdExactly(sc.fd, &msg.data, sizeof(msg.data))) goto fail;
|
if (!WriteFdExactly(sc.fd, &msg.data, sizeof(msg.data))) goto fail;
|
||||||
|
|
||||||
if (!ReadFdExactly(sc.fd, &msg.status, sizeof(msg.status))) goto fail;
|
if (!ReadFdExactly(sc.fd, &msg.status, sizeof(msg.status))) goto fail;
|
||||||
|
|
||||||
if (msg.status.id != ID_OKAY) {
|
if (msg.status.id != ID_OKAY) {
|
||||||
if (msg.status.id == ID_FAIL) {
|
if (msg.status.id == ID_FAIL) {
|
||||||
size_t len = ltohl(msg.status.msglen);
|
size_t len = msg.status.msglen;
|
||||||
if (len > 256) len = 256;
|
if (len > 256) len = 256;
|
||||||
if (!ReadFdExactly(sc.fd, sbuf->data, len)) goto fail;
|
if (!ReadFdExactly(sc.fd, sbuf->data, len)) goto fail;
|
||||||
sbuf->data[len] = 0;
|
sbuf->data[len] = 0;
|
||||||
|
|
@ -333,7 +333,7 @@ static int sync_recv(SyncConnection& sc, const char* rpath, const char* lpath, b
|
||||||
id = msg.data.id;
|
id = msg.data.id;
|
||||||
|
|
||||||
handle_data:
|
handle_data:
|
||||||
len = ltohl(msg.data.size);
|
len = msg.data.size;
|
||||||
if (id == ID_DONE) break;
|
if (id == ID_DONE) break;
|
||||||
if (id != ID_DATA) goto remote_error;
|
if (id != ID_DATA) goto remote_error;
|
||||||
if (len > sc.max) {
|
if (len > sc.max) {
|
||||||
|
|
@ -368,7 +368,7 @@ remote_error:
|
||||||
adb_unlink(lpath);
|
adb_unlink(lpath);
|
||||||
|
|
||||||
if(id == ID_FAIL) {
|
if(id == ID_FAIL) {
|
||||||
len = ltohl(msg.data.size);
|
len = msg.data.size;
|
||||||
if(len > 256) len = 256;
|
if(len > 256) len = 256;
|
||||||
if(!ReadFdExactly(sc.fd, buffer, len)) {
|
if(!ReadFdExactly(sc.fd, buffer, len)) {
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
||||||
|
|
@ -85,9 +85,9 @@ static bool do_stat(int s, const char* path) {
|
||||||
memset(&st, 0, sizeof(st));
|
memset(&st, 0, sizeof(st));
|
||||||
// TODO: add a way to report that the stat failed!
|
// TODO: add a way to report that the stat failed!
|
||||||
lstat(path, &st);
|
lstat(path, &st);
|
||||||
msg.stat.mode = htoll(st.st_mode);
|
msg.stat.mode = st.st_mode;
|
||||||
msg.stat.size = htoll(st.st_size);
|
msg.stat.size = st.st_size;
|
||||||
msg.stat.time = htoll(st.st_mtime);
|
msg.stat.time = st.st_mtime;
|
||||||
|
|
||||||
return WriteFdExactly(s, &msg.stat, sizeof(msg.stat));
|
return WriteFdExactly(s, &msg.stat, sizeof(msg.stat));
|
||||||
}
|
}
|
||||||
|
|
@ -107,10 +107,10 @@ static bool do_list(int s, const char* path) {
|
||||||
struct stat st;
|
struct stat st;
|
||||||
if (lstat(filename.c_str(), &st) == 0) {
|
if (lstat(filename.c_str(), &st) == 0) {
|
||||||
size_t d_name_length = strlen(de->d_name);
|
size_t d_name_length = strlen(de->d_name);
|
||||||
msg.dent.mode = htoll(st.st_mode);
|
msg.dent.mode = st.st_mode;
|
||||||
msg.dent.size = htoll(st.st_size);
|
msg.dent.size = st.st_size;
|
||||||
msg.dent.time = htoll(st.st_mtime);
|
msg.dent.time = st.st_mtime;
|
||||||
msg.dent.namelen = htoll(d_name_length);
|
msg.dent.namelen = d_name_length;
|
||||||
|
|
||||||
if (!WriteFdExactly(s, &msg.dent, sizeof(msg.dent)) ||
|
if (!WriteFdExactly(s, &msg.dent, sizeof(msg.dent)) ||
|
||||||
!WriteFdExactly(s, de->d_name, d_name_length)) {
|
!WriteFdExactly(s, de->d_name, d_name_length)) {
|
||||||
|
|
@ -133,7 +133,7 @@ static bool fail_message(int s, const std::string& reason) {
|
||||||
|
|
||||||
syncmsg msg;
|
syncmsg msg;
|
||||||
msg.data.id = ID_FAIL;
|
msg.data.id = ID_FAIL;
|
||||||
msg.data.size = htoll(reason.size());
|
msg.data.size = reason.size();
|
||||||
return WriteFdExactly(s, &msg.data, sizeof(msg.data)) && WriteFdExactly(s, reason);
|
return WriteFdExactly(s, &msg.data, sizeof(msg.data)) && WriteFdExactly(s, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -185,13 +185,13 @@ static bool handle_send_file(int s, char *path, uid_t uid,
|
||||||
|
|
||||||
if(msg.data.id != ID_DATA) {
|
if(msg.data.id != ID_DATA) {
|
||||||
if(msg.data.id == ID_DONE) {
|
if(msg.data.id == ID_DONE) {
|
||||||
timestamp = ltohl(msg.data.size);
|
timestamp = msg.data.size;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fail_message(s, "invalid data message");
|
fail_message(s, "invalid data message");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
len = ltohl(msg.data.size);
|
len = msg.data.size;
|
||||||
if (len > buffer.size()) { // TODO: resize buffer?
|
if (len > buffer.size()) { // TODO: resize buffer?
|
||||||
fail_message(s, "oversize data message");
|
fail_message(s, "oversize data message");
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
@ -245,7 +245,7 @@ static bool handle_send_link(int s, char *path, std::vector<char>& buffer) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = ltohl(msg.data.size);
|
len = msg.data.size;
|
||||||
if (len > buffer.size()) { // TODO: resize buffer?
|
if (len > buffer.size()) { // TODO: resize buffer?
|
||||||
fail_message(s, "oversize data message");
|
fail_message(s, "oversize data message");
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -346,7 +346,7 @@ static bool do_recv(int s, const char* path, std::vector<char>& buffer) {
|
||||||
adb_close(fd);
|
adb_close(fd);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
msg.data.size = htoll(r);
|
msg.data.size = r;
|
||||||
if (!WriteFdExactly(s, &msg.data, sizeof(msg.data)) || !WriteFdExactly(s, &buffer[0], r)) {
|
if (!WriteFdExactly(s, &msg.data, sizeof(msg.data)) || !WriteFdExactly(s, &buffer[0], r)) {
|
||||||
adb_close(fd);
|
adb_close(fd);
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -368,7 +368,7 @@ static bool handle_sync_command(int fd, std::vector<char>& buffer) {
|
||||||
fail_message(fd, "command read failure");
|
fail_message(fd, "command read failure");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
size_t path_length = ltohl(request.path_length);
|
size_t path_length = request.path_length;
|
||||||
if (path_length > 1024) {
|
if (path_length > 1024) {
|
||||||
fail_message(fd, "path too long");
|
fail_message(fd, "path too long");
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,6 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#define htoll(x) (x)
|
|
||||||
#define ltohl(x) (x)
|
|
||||||
|
|
||||||
#define MKID(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
|
#define MKID(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
|
||||||
|
|
||||||
#define ID_STAT MKID('S','T','A','T')
|
#define ID_STAT MKID('S','T','A','T')
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue