aboutsummaryrefslogtreecommitdiff
path: root/client/acronc
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2022-07-27 16:23:22 -0700
committerTrumeet <yuuta@yuuta.moe>2022-07-27 16:23:22 -0700
commit1b9b47ddce6d9e17029efc79a459a7eb3238628c (patch)
treed36a765553fc00ae1a489cf80b236c643c05b35d /client/acronc
parentbf83b67c68f3111ea42e2916cb1ba782fe1e1a24 (diff)
downloadacron-1b9b47ddce6d9e17029efc79a459a7eb3238628c.tar
acron-1b9b47ddce6d9e17029efc79a459a7eb3238628c.tar.gz
acron-1b9b47ddce6d9e17029efc79a459a7eb3238628c.tar.bz2
acron-1b9b47ddce6d9e17029efc79a459a7eb3238628c.zip
feat(acronc): add Windows support
Diffstat (limited to 'client/acronc')
-rw-r--r--client/acronc/README.md4
-rw-r--r--client/acronc/config.c4
-rw-r--r--client/acronc/handler_stdin.c6
-rw-r--r--client/acronc/log.c8
-rw-r--r--client/acronc/main.c19
5 files changed, 30 insertions, 11 deletions
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 <stdarg.h>
#include <assert.h>
-#ifdef __linux__
+#if defined(__linux__)
#include <sys/types.h>
#include <unistd.h>
#include <sys/syscall.h>
+#elif defined(_WIN32)
+#include <windows.h>
#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 <stdio.h>
#include <stdlib.h>
#include <uv.h>
-#include <err.h>
#include <string.h>
+
+#ifdef _WIN32
+#include <io.h>
+#else
#include <unistd.h>
+#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;
+}