summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorꦌꦫꦶꦏ꧀ꦦꦿꦧꦮꦑꦩꦭ꧀ <erik@darapsa.co.id>2022-01-14 07:51:16 +0800
committerꦌꦫꦶꦏ꧀ꦦꦿꦧꦮꦑꦩꦭ꧀ <erik@darapsa.co.id>2022-01-14 07:51:16 +0800
commit8d4b8195833c9ace6b5a2259a7daaa567bc6eee0 (patch)
tree39fa6d2e2f72728122146e5792b32b5eacde7259
parent1acec3c9832401f703867d80e3bc598d56f44494 (diff)
Use pthread when there's no C11 threads
-rw-r--r--configure.ac2
-rw-r--r--request.c25
2 files changed, 26 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index 7ce3b34..7f4be42 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,6 +4,8 @@ AC_PROG_CC
AM_PROG_AR
LT_INIT
PKG_CHECK_MODULES([TIDY], [tidy])
+AC_CHECK_HEADERS([threads.h],
+ [AC_DEFINE([HAVE_THREADS_H])])
AC_CHECK_HEADER_STDBOOL
AC_C_INLINE
AC_CHECK_FUNCS([memset])
diff --git a/request.c b/request.c
index 34bff9c..3b1d715 100644
--- a/request.c
+++ b/request.c
@@ -13,7 +13,12 @@ extern emscripten_fetch_attr_t attr;
#else
+#ifdef HAVE_THREADS_H
#include <threads.h>
+#else
+#include <pthread.h>
+typedef pthread_t thrd_t;
+#endif
#include <curl/curl.h>
extern char *sampleurl;
@@ -35,9 +40,17 @@ static size_t append(char *data, size_t size, size_t nmemb, icclient_response *r
return realsize;
}
-static int async(void *arg)
+static
+#ifdef HAVE_THREADS_H
+int
+#else
+void *
+#endif
+async(void *arg)
{
+#ifdef HAVE_THREADS_H
int ret = thrd_success;
+#endif
struct container *container = (struct container *)arg;
CURLcode res = curl_easy_perform(container->response->curl);
if (container->post)
@@ -45,7 +58,9 @@ static int async(void *arg)
if (res == CURLE_OK && container->handler)
container->handler(container->response);
else {
+#ifdef HAVE_THREADS_H
ret = thrd_error;
+#endif
#ifdef DEBUG
const char *error = curl_easy_strerror(res);
#ifdef __ANDROID__
@@ -56,7 +71,11 @@ static int async(void *arg)
#endif
}
free(container);
+#ifdef HAVE_THREADS_H
return ret;
+#else
+ return NULL;
+#endif
}
#endif
@@ -182,6 +201,10 @@ void request(void (*handler)(icclient_response *), void (*callback)(void *), str
container->handler = handler;
container->response = response;
thrd_t thread;
+#ifdef HAVE_THREADS_H
thrd_create(&thread, async, container);
+#else
+ pthread_create(&thread, NULL, async, container);
+#endif
#endif
}