From d849d98cc5e630c2df9f07b306e724adc8580c81 Mon Sep 17 00:00:00 2001 From: vm Date: Mon, 8 Jun 2020 14:54:40 +0200 Subject: some changes in the vm --- 03_exercise/CMakeLists.txt | 3 --- 03_exercise/cli/client | Bin 31152 -> 35192 bytes 03_exercise/cli/client.c | 16 +++++++++++++--- 03_exercise/srv/shell.c | 4 ++-- 4 files changed, 15 insertions(+), 8 deletions(-) (limited to '03_exercise') diff --git a/03_exercise/CMakeLists.txt b/03_exercise/CMakeLists.txt index a03d39b..e72de65 100644 --- a/03_exercise/CMakeLists.txt +++ b/03_exercise/CMakeLists.txt @@ -14,6 +14,3 @@ add_executable(server srv/prompt_utils.c srv/array.c srv/shell.c srv/process.c s target_compile_options(client INTERFACE ${PROJECT_WARNINGS}) target_compile_options(server INTERFACE ${PROJECT_WARNINGS}) - -add_sanitizers(client) -add_sanitizers(server) diff --git a/03_exercise/cli/client b/03_exercise/cli/client index 56618d6..4450079 100755 Binary files a/03_exercise/cli/client and b/03_exercise/cli/client differ diff --git a/03_exercise/cli/client.c b/03_exercise/cli/client.c index 67731f4..22f4e61 100644 --- a/03_exercise/cli/client.c +++ b/03_exercise/cli/client.c @@ -70,7 +70,7 @@ int main() { return 0; } -void receive_file(int recv_sock, char *path, int size) { +void receive_file(int recv_sock, char *path, size_t size, char *start_buf, size_t start_buf_len) { char buffer[BUF_SIZE]; int file_fd; int received; @@ -85,6 +85,17 @@ void receive_file(int recv_sock, char *path, int size) { received = 0; + if (start_buf) { + // there was part of the file already in the "packet" which was supposed to contain only the header + // put that into the file too + if (write_all(file_fd, start_buf, start_buf_len) != start_buf_len) { + perror("write start buf"); + printf("\n"); + return; + } + received += start_buf_len; + } + /* Read all data */ while (received < size) { int nread; @@ -138,9 +149,8 @@ bool check_get(char *buffer) { char path[strlen(rest) + 1]; memcpy(path, rest, strlen(rest)); path[strlen(rest)] = 0; - path[strlen(rest) - 1] = 0; - receive_file(server_sock, path, file_size); + receive_file(server_sock, path, file_size, &(buffer[i+2]), strlen(&(buffer[i+2]))); return true; } diff --git a/03_exercise/srv/shell.c b/03_exercise/srv/shell.c index 38c5f9d..0419f35 100644 --- a/03_exercise/srv/shell.c +++ b/03_exercise/srv/shell.c @@ -116,14 +116,14 @@ void send_file(int client_fd, char *path) { int length = snprintf(NULL, 0, "%ld", sz); sprintf(buffer, "<