From d11ac58f4b95b2f0fe3579b6fd430b2c29465af2 Mon Sep 17 00:00:00 2001 From: Ryo Nakamura Date: Sun, 23 Oct 2022 15:51:21 +0900 Subject: compilable in linux --- CMakeLists.txt | 2 +- src/file.c | 4 +++- src/main.c | 11 +++++------ src/platform.c | 17 ++++++++++++++--- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9baf3c5..a05f854 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,4 +9,4 @@ set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG") add_executable(sscp src/main.c src/platform.c src/ssh.c src/file.c) target_include_directories(sscp PUBLIC ./src /usr/local/include) target_link_directories(sscp PUBLIC /usr/local/lib) -target_link_libraries(sscp ssh) +target_link_libraries(sscp ssh pthread m) diff --git a/src/file.c b/src/file.c index 462f05a..4d04d18 100644 --- a/src/file.c +++ b/src/file.c @@ -306,7 +306,9 @@ int file_fill_dst(char *target, struct list_head *file_list) list_for_each_entry(f, file_list, list) { f->dst_remote = dst_remote; - snprintf(f->dst_path, PATH_MAX, "%s/%s", dst_path, f->path); + strncat(f->dst_path, dst_path, PATH_MAX); + strncat(f->dst_path, "/", PATH_MAX); + strncat(f->dst_path, f->path, PATH_MAX); } return 0; diff --git a/src/main.c b/src/main.c index 717e6bb..a8d7114 100644 --- a/src/main.c +++ b/src/main.c @@ -307,6 +307,10 @@ int main(int argc, char **argv) struct sscp_thread *t = &threads[n]; t->sscp = &sscp; t->finished = false; + t->sftp = ssh_make_sftp_session(sscp.host, sscp.opts); + if (!t->sftp) + goto join_out; + ret = pthread_create(&t->tid, NULL, sscp_copy_thread, t); if (ret < 0) { pr_err("pthread_create error: %d\n", ret); @@ -352,14 +356,9 @@ void *sscp_copy_thread(void *arg) { struct sscp_thread *t = arg; struct sscp *sscp = t->sscp; - sftp_session sftp; + sftp_session sftp = t->sftp; struct chunk *c; - /* create sftp session */ - sftp = ssh_make_sftp_session(sscp->host, sscp->opts); - if (!sftp) - return NULL; - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL); pthread_cleanup_push(sscp_copy_thread_cleanup, t); diff --git a/src/platform.c b/src/platform.c index 5e0573e..1a87cd3 100644 --- a/src/platform.c +++ b/src/platform.c @@ -1,14 +1,15 @@ -#include -#include - #ifdef __APPLE__ #include #include #elif linux +#define _GNU_SOURCE +#include #else #error unsupported platform #endif +#include +#include #ifdef __APPLE__ int nr_cpus() @@ -25,3 +26,13 @@ int nr_cpus() } #endif +#ifdef linux +int nr_cpus() +{ + cpu_set_t cpu_set; + if (sched_getaffinity(0, sizeof(cpu_set_t), &cpu_set) == 0) + return CPU_COUNT(&cpu_set); + return -1; +} +#endif + -- cgit v1.2.3