From 1b9b47ddce6d9e17029efc79a459a7eb3238628c Mon Sep 17 00:00:00 2001 From: Trumeet Date: Wed, 27 Jul 2022 16:23:22 -0700 Subject: feat(acronc): add Windows support --- client/acronc/README.md | 4 +--- client/acronc/config.c | 4 ++++ client/acronc/handler_stdin.c | 6 +++++- client/acronc/log.c | 8 ++++++-- client/acronc/main.c | 19 ++++++++++++++----- 5 files changed, 30 insertions(+), 11 deletions(-) (limited to 'client/acronc') diff --git a/client/acronc/README.md b/client/acronc/README.md index 87c9db0..a551491 100644 --- a/client/acronc/README.md +++ b/client/acronc/README.md @@ -4,8 +4,6 @@ Acron client using libac and libuv, written in C. Current status: In development. -Windows is currently not supported yet. - ## License -GPL-2.0-only \ No newline at end of file +GPL-2.0-only diff --git a/client/acronc/config.c b/client/acronc/config.c index 4f86843..433fbf4 100644 --- a/client/acronc/config.c +++ b/client/acronc/config.c @@ -94,7 +94,11 @@ int config_parse(const int argc, const char **argv, ac_connection_parameters_t * if (!params->token) { if (!(params->token = getenv("ACRONC_TOKEN"))) { printf("Token: "); +#ifdef _WIN32 + scanf("%1023[^\r\n]", tok); +#else scanf("%1023[^\n]", tok); +#endif params->token = tok; } } diff --git a/client/acronc/handler_stdin.c b/client/acronc/handler_stdin.c index 4b8d0b8..fb7c87c 100644 --- a/client/acronc/handler_stdin.c +++ b/client/acronc/handler_stdin.c @@ -59,7 +59,11 @@ static void on_stdin(uv_stream_t *t, ssize_t nread, const uv_buf_t *buf) { uv_close((uv_handle_t *) t, on_close); return; } +#ifdef _WIN32 + buf->base[nread - 2] = '\0'; /* Remove junk and tailing \r\n */ +#else buf->base[nread - 1] = '\0'; /* Remove junk and tailing \n */ +#endif if ((++ id) > INT_MAX) { id = 0; } @@ -90,4 +94,4 @@ int h_stdin(int (*on_input)(ac_request_t *req), if ((r = uv_tty_init(loop, &tty, 0, 0))) return r; if ((r = stdin_start())) return r; return 0; -} \ No newline at end of file +} diff --git a/client/acronc/log.c b/client/acronc/log.c index 08f48b6..feda8c2 100644 --- a/client/acronc/log.c +++ b/client/acronc/log.c @@ -11,10 +11,12 @@ #include #include -#ifdef __linux__ +#if defined(__linux__) #include #include #include +#elif defined(_WIN32) +#include #endif void g_log(enum log_level level, @@ -48,8 +50,10 @@ void g_log(enum log_level level, assert(0); } int tid = -1; -#ifdef __linux__ +#if defined(__linux__) tid = (int) syscall(__NR_gettid); +#elif defined(_WIN32) + tid = (int) GetCurrentThreadId(); #endif fprintf(stream, "[%d %s:%d]: ", tid, file, line); diff --git a/client/acronc/main.c b/client/acronc/main.c index ec9323d..760b426 100644 --- a/client/acronc/main.c +++ b/client/acronc/main.c @@ -12,9 +12,13 @@ #include #include #include -#include #include + +#ifdef _WIN32 +#include +#else #include +#endif static uv_loop_t lop; uv_loop_t *loop = &lop; @@ -143,7 +147,10 @@ int main(int argc, const char **argv) { #endif .tok = NULL }; - if ((r = ac_init(&config))) errx(r, "Cannot initialize Acron library."); + if ((r = ac_init(&config))) { + LOGEV("Cannot initialize Acron library: %d", r); + return r; + } if ((r = uv_loop_init(loop))) goto uviniterr; if ((r = h_signal(on_int, on_stdin_closed))) goto uviniterr; @@ -154,9 +161,11 @@ int main(int argc, const char **argv) { /* Seems to return 1 if uv_stop is called. */ return 0; } - errx(-r, "Cannot run: %s", uv_strerror(r)); + LOGEV("Cannot run: %s", uv_strerror(r)); + return -r; } return 0; uviniterr: - errx(-r, "Cannot initialize: %s", uv_strerror(r)); -} \ No newline at end of file + LOGEV("Cannot initialize: %s", uv_strerror(r)); + return -r; +} -- cgit v1.2.3