summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common.c1
-rw-r--r--src/curl/curl.c6
-rw-r--r--src/curl/http.c6
-rw-r--r--src/curl/websocket.c4
-rw-r--r--src/fs_event/fs_event_inotify.c2
-rw-r--r--src/multiplex.c2
-rw-r--r--src/packet_stream.c6
-rw-r--r--src/socket/socket_linux.c20
-rw-r--r--src/socket/socket_windows.c14
-rw-r--r--src/util/file/file.h1
-rw-r--r--src/util/file/file_linux.c39
-rw-r--r--src/util/file/file_stdio.c8
-rw-r--r--subprojects/libalabaster.wrap2
13 files changed, 62 insertions, 49 deletions
diff --git a/src/common.c b/src/common.c
index 929a455..dada6e2 100644
--- a/src/common.c
+++ b/src/common.c
@@ -2,7 +2,6 @@
#include <al/log.h>
#include <al/random.h>
#include <locale.h>
-
#ifdef NAUNET_ON_WINDOWS
#include "winwrap.h"
#else
diff --git a/src/curl/curl.c b/src/curl/curl.c
index 5a5ac01..d18035c 100644
--- a/src/curl/curl.c
+++ b/src/curl/curl.c
@@ -15,7 +15,7 @@ static void curl_socket_action_callback(struct ev_loop *loop, ev_io *w, s32 reve
s32 running;
CURLMcode mc = curl_multi_socket_action(curl->multi_handle, curl->sock, action, &running);
if (mc != CURLM_OK) {
- error("curl_multi_socket_action() failed (%s).", curl_multi_strerror(mc));
+ log_error("curl_multi_socket_action() failed (%s).", curl_multi_strerror(mc));
return;
}
curl->handle_events(curl->userdata, curl);
@@ -118,7 +118,7 @@ bool nn_curl_add_handle(struct nn_curl *curl)
// a callback is running on another thread.
CURLMcode mc = curl_multi_add_handle(curl->multi_handle, curl->handle);
if (mc != CURLM_OK) {
- error("curl_multi_add_handle() failed (%s).", curl_multi_strerror(mc));
+ log_error("curl_multi_add_handle() failed (%s).", curl_multi_strerror(mc));
return false;
}
curl->added = true;
@@ -130,7 +130,7 @@ bool nn_curl_remove_handle(struct nn_curl *curl)
al_assert(curl->added);
CURLMcode mc = curl_multi_remove_handle(curl->multi_handle, curl->handle);
if (mc != CURLM_OK) {
- error("curl_multi_remove_handle() failed (%s).", curl_multi_strerror(mc));
+ log_error("curl_multi_remove_handle() failed (%s).", curl_multi_strerror(mc));
return false;
}
curl->added = false;
diff --git a/src/curl/http.c b/src/curl/http.c
index 993aef7..154e0c7 100644
--- a/src/curl/http.c
+++ b/src/curl/http.c
@@ -32,7 +32,7 @@ static void http_handle_events(void *userdata, struct nn_curl *curl)
al_assert(msg->easy_handle == curl->handle);
CURLcode code = msg->data.result;
if (code != CURLE_OK) {
- error("Curl error: %s.", curl_easy_strerror(code));
+ log_error("Curl error: %s.", curl_easy_strerror(code));
http->status_code = -1;
http->callback(http->userdata, NNWT_HTTP_ERROR, NULL, &http->status_code);
return;
@@ -59,10 +59,10 @@ static void http_handle_events(void *userdata, struct nn_curl *curl)
return;
}
case CURLMSG_LAST:
- debug("Unhandled CURLMSG_LAST.");
+ log_debug("Unhandled CURLMSG_LAST.");
break;
case CURLMSG_NONE:
- debug("Unhandled CURLMSG_NONE.");
+ log_debug("Unhandled CURLMSG_NONE.");
break;
}
}
diff --git a/src/curl/websocket.c b/src/curl/websocket.c
index 8995221..d40dd0e 100644
--- a/src/curl/websocket.c
+++ b/src/curl/websocket.c
@@ -33,7 +33,7 @@ static size_t stream_write_callback(char *buffer, size_t size, size_t nmemb, voi
struct nn_websocket *ws = (struct nn_websocket *)userdata;
const struct curl_ws_frame *m = curl_ws_meta(ws->curl.handle);
size_t frame_size = m->offset + m->len + m->bytesleft;
- debug("frame_size: %zu, bytesleft: %zu.", frame_size, m->bytesleft);
+ log_debug("frame_size: %zu, bytesleft: %zu.", frame_size, m->bytesleft);
nn_buffer_ensure_space(&ws->frame, frame_size);
al_memcpy(nn_buffer_get_ptr(&ws->frame, m->offset), buffer, m->len);
if (m->bytesleft == 0) {
@@ -82,7 +82,7 @@ bool nn_websocket_send_frame(struct nn_websocket *ws, u8 *data, size_t size)
size_t sent;
CURLcode code = curl_ws_send(ws->curl.handle, data, size, &sent, 0, CURLWS_TEXT);
if (code != CURLE_OK) {
- error("curl_ws_send() failed (%s).", curl_easy_strerror(code));
+ log_error("curl_ws_send() failed (%s).", curl_easy_strerror(code));
return false;
}
al_assert(sent == size);
diff --git a/src/fs_event/fs_event_inotify.c b/src/fs_event/fs_event_inotify.c
index a70550a..e0c48fa 100644
--- a/src/fs_event/fs_event_inotify.c
+++ b/src/fs_event/fs_event_inotify.c
@@ -37,7 +37,7 @@ bool nn_fs_event_start(struct nn_fs_event *fs, struct nn_event_loop *loop)
fs->loop = loop;
fs->wd = inotify_add_watch(fs->fd, fs->path, fs->mask);
if (fs->wd == -1) {
- error("inotify_add_watch(%s) failed (%s).", fs->path, nn_strerror(errno));
+ log_error("inotify_add_watch(%s) failed (%s).", fs->path, nn_strerror(errno));
return false;
}
ev_io_start(fs->loop->ev, &fs->event);
diff --git a/src/multiplex.c b/src/multiplex.c
index fa13a08..efce31c 100644
--- a/src/multiplex.c
+++ b/src/multiplex.c
@@ -27,7 +27,7 @@ static void socket_read_callback(struct ev_loop *loop, ev_io *w, s32 revents)
ev_io_stop(loop, &conn->event);
nn_socket_close(&conn->sock);
al_free(conn);
- if (ret == 0) warn("read() returned 0 on POLLIN.");
+ if (ret == 0) log_warn("read() returned 0 on POLLIN.");
return;
}
diff --git a/src/packet_stream.c b/src/packet_stream.c
index 5eb2695..271898a 100644
--- a/src/packet_stream.c
+++ b/src/packet_stream.c
@@ -97,7 +97,8 @@ static void stream_read_callback(struct ev_loop *loop, ev_io *w, s32 revents)
// EV_READ can mean any of POLLIN, POLLERR, or POLLHUP.
al_assert(revents & EV_READ); // Assert on EV_ERROR.
- u8 *ptr = nn_buffer_get_ptr(&stream->in.packet->buffer, stream->in.index);
+ struct nn_buffer *buffer = &stream->in.packet->buffer;
+ u8 *ptr = nn_buffer_get_ptr(buffer, stream->in.index);
u32 size = stream->in.have_header ? nn_packet_get_size(stream->in.packet) : NNWT_PACKET_HEADER_LENGTH;
ssize_t ret = nn_socket_read(&stream->sock, ptr, size - stream->in.index);
if (ret <= 0 || stream->connect == PACKET_STREAM_DISCONNECTING) {
@@ -114,7 +115,8 @@ static void stream_read_callback(struct ev_loop *loop, ev_io *w, s32 revents)
if (!stream->in.have_header && stream->in.index >= NNWT_PACKET_HEADER_LENGTH) {
stream->in.have_header = true;
size = nn_packet_get_size(stream->in.packet);
- nn_buffer_ensure_space(&stream->in.packet->buffer, size);
+ nn_buffer_set_size(buffer, size);
+ nn_buffer_ensure_space(buffer, size);
}
if (stream->in.have_header && stream->in.index >= size) {
diff --git a/src/socket/socket_linux.c b/src/socket/socket_linux.c
index b2d76a8..c05a026 100644
--- a/src/socket/socket_linux.c
+++ b/src/socket/socket_linux.c
@@ -46,7 +46,7 @@ bool nn_socket_init(struct nn_socket *sock, s32 flags)
}
if (sock->fd < 0) {
- error("socket() failed: %s (%d).", nn_strerror(errno), errno);
+ log_error("socket() failed: %s (%d).", nn_strerror(errno), errno);
return false;
}
@@ -120,7 +120,7 @@ static bool parse_address(struct nn_socket *sock, str *addr, u16 port)
s32 status = getaddrinfo(c_str, port_str, &hints, &sock->addrinfo);
al_free(c_str);
if (status != 0) {
- error("Failed to parse address (%s).", gai_strerror(status));
+ log_error("Failed to parse address (%s).", gai_strerror(status));
return false;
}
@@ -161,11 +161,11 @@ bool nn_socket_bind(struct nn_socket *sock, str *addr, u16 port)
}
if (bind(sock->fd, saddr, addrlen) < 0) {
- error("bind(%.*s:%hu) failed: %s (%d).", nn_addr_x(addr), port, nn_strerror(errno), errno);
+ log_error("bind(%.*s:%hu) failed: %s (%d).", nn_addr_x(addr), port, nn_strerror(errno), errno);
return false;
}
- info("Socket bound to %.*s:%hu.", nn_addr_x(addr), port);
+ log_info("Socket bound to %.*s:%hu.", nn_addr_x(addr), port);
return true;
}
@@ -175,11 +175,11 @@ bool nn_socket_listen(struct nn_socket *sock)
al_assert(sock->type == NNWT_SOCKET_TCP || sock->type == NNWT_SOCKET_UNIX);
if (listen(sock->fd, SOMAXCONN) < 0) {
- error("listen() failed: %s (%d).", nn_strerror(errno), errno);
+ log_error("listen() failed: %s (%d).", nn_strerror(errno), errno);
return false;
}
- info("Listening.");
+ log_info("Listening.");
return true;
}
@@ -192,7 +192,7 @@ bool nn_socket_accept(struct nn_socket *sock, struct nn_socket *cl, s32 flags)
struct sockaddr_storage addr = { 0 };
socklen_t addrlen = sizeof(addr);
if ((cl->fd = accept(sock->fd, (struct sockaddr *)&addr, &addrlen)) == -1) {
- error("accept() failed: %s (%d).", nn_strerror(errno), errno);
+ log_error("accept() failed: %s (%d).", nn_strerror(errno), errno);
return false;
}
@@ -213,11 +213,11 @@ bool nn_socket_accept(struct nn_socket *sock, struct nn_socket *cl, s32 flags)
port = ntohs(saddr->sin6_port);
inet_ntop(AF_INET6, &saddr->sin6_addr, addr_str, sizeof(addr_str));
}
- info("Connection from %s:%hu.", addr_str, port);
+ log_info("Connection from %s:%hu.", addr_str, port);
break;
}
case NNWT_SOCKET_UNIX:
- info("Connection on UNIX socket.");
+ log_info("Connection on UNIX socket.");
break;
}
@@ -245,7 +245,7 @@ bool nn_socket_connect(struct nn_socket *sock, str *addr, u16 port)
al_assert_and_return(false);
}
if (ret != 0 && errno != EINPROGRESS) {
- error("connect(%.*s:%hu) failed: %s (%d).", nn_addr_x(addr), port, nn_strerror(errno), errno);
+ log_error("connect(%.*s:%hu) failed: %s (%d).", nn_addr_x(addr), port, nn_strerror(errno), errno);
return false;
}
return true;
diff --git a/src/socket/socket_windows.c b/src/socket/socket_windows.c
index 68a7700..544ec92 100644
--- a/src/socket/socket_windows.c
+++ b/src/socket/socket_windows.c
@@ -16,7 +16,7 @@ bool nn_socket_init(struct nn_socket *sock, s32 flags)
}
if (sock->fd == INVALID_SOCKET) {
- error("socket() failed: %d.", WSAGetLastError());
+ log_error("socket() failed: %d.", WSAGetLastError());
return false;
}
@@ -57,11 +57,11 @@ bool nn_socket_bind(struct nn_socket *sock, str *addr, u16 port)
s32 ret = bind(sock->fd, (SOCKADDR *)&sock->addr_in, sizeof(sock->addr_in));
if (ret == SOCKET_ERROR) {
- error("bind(%.*s:%hu) failed: %d.", nn_addr_x(addr), port, WSAGetLastError());
+ log_error("bind(%.*s:%hu) failed: %d.", nn_addr_x(addr), port, WSAGetLastError());
return false;
}
- info("Socket bound to %.*s:%hu.", nn_addr_x(addr), port);
+ log_info("Socket bound to %.*s:%hu.", nn_addr_x(addr), port);
return true;
}
@@ -69,11 +69,11 @@ bool nn_socket_bind(struct nn_socket *sock, str *addr, u16 port)
bool nn_socket_listen(struct nn_socket *sock)
{
if (listen(sock->fd, SOMAXCONN) == SOCKET_ERROR) {
- error("listen() failed: %d.", WSAGetLastError());
+ log_error("listen() failed: %d.", WSAGetLastError());
return false;
}
- info("Listening.");
+ log_info("Listening.");
return true;
}
@@ -82,7 +82,7 @@ bool nn_socket_accept(struct nn_socket *sock, struct nn_socket *cl, s32 flags)
{
cl->type = sock->type;
if ((cl->fd = accept(sock->fd, NULL, NULL)) == INVALID_SOCKET) {
- error("accept() failed: %d.", WSAGetLastError());
+ log_error("accept() failed: %d.", WSAGetLastError());
return false;
}
@@ -105,7 +105,7 @@ bool nn_socket_connect(struct nn_socket *sock, str *addr, u16 port)
s32 ret = connect(sock->fd, (SOCKADDR *)&sock->addr_in, sizeof(sock->addr_in));
if (ret == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK) {
- error("connect() failed: %d.", WSAGetLastError());
+ log_error("connect() failed: %d.", WSAGetLastError());
return false;
}
diff --git a/src/util/file/file.h b/src/util/file/file.h
index 91aa82c..4df4c96 100644
--- a/src/util/file/file.h
+++ b/src/util/file/file.h
@@ -81,6 +81,7 @@ bool nn_file_open(struct nn_file *file, str *path, s32 flags);
bool nn_file_exists(str *path);
bool nn_file_create(str *path);
bool nn_file_truncate(struct nn_file *file, off_t size);
+bool nn_file_flush(struct nn_file *file);
off_t nn_file_seek(struct nn_file *file, off_t offset, s32 whence);
bool nn_file_write(struct nn_file *file, void *buf, size_t size);
bool nn_file_read(struct nn_file *file, void *buf, size_t size);
diff --git a/src/util/file/file_linux.c b/src/util/file/file_linux.c
index c87bc9d..9693d4b 100644
--- a/src/util/file/file_linux.c
+++ b/src/util/file/file_linux.c
@@ -10,7 +10,7 @@ static bool lock_file_internal(s32 fd, size_t size)
{
struct flock l = { .l_type = F_WRLCK, .l_whence = SEEK_SET, .l_start = 0, .l_len = size };
if (fcntl(fd, F_SETLKW, &l) == -1) {
- error("fcntl(F_SETLKW, F_WRLCK) failed (%s).", nn_strerror(errno));
+ log_error("fcntl(F_SETLKW, F_WRLCK) failed (%s).", nn_strerror(errno));
close(fd);
return false;
}
@@ -21,7 +21,7 @@ static bool unlock_file_internal(s32 fd, size_t size)
{
struct flock l = { .l_type = F_ULOCK, .l_whence = SEEK_SET, .l_start = 0, .l_len = size };
if (fcntl(fd, F_SETLKW, &l) == -1) {
- error("fcntl(F_SETLKW, F_ULOCK) failed (%s).", nn_strerror(errno));
+ log_error("fcntl(F_SETLKW, F_ULOCK) failed (%s).", nn_strerror(errno));
return false;
}
return true;
@@ -44,14 +44,14 @@ bool nn_file_open(struct nn_file *file, str *path, s32 flags)
}
if (!open_file_linux(&file->fd, path, oflags)) {
- error("open(%.*s) failed (%d: %s).", al_str_x(path), errno, nn_strerror(errno));
+ log_error("open(%.*s) failed (%d: %s).", al_str_x(path), errno, nn_strerror(errno));
return false;
}
struct stat sb;
s32 res = fstat(file->fd, &sb);
if (res == -1) {
- error("fstat() failed (%s).", nn_strerror(errno));
+ log_error("fstat() failed (%s).", nn_strerror(errno));
close(file->fd);
return false;
}
@@ -87,7 +87,7 @@ off_t nn_file_seek(struct nn_file *file, off_t offset, s32 whence)
{
off_t res = lseek(file->fd, offset, whence);
if (res == (off_t)-1) {
- error("lseek(%zd, %d) failed (%s).", offset, whence, nn_strerror(errno));
+ log_error("lseek(%zd, %d) failed (%s).", offset, whence, nn_strerror(errno));
}
return res;
}
@@ -96,20 +96,30 @@ bool nn_file_truncate(struct nn_file *file, off_t size)
{
s32 ret = ftruncate(file->fd, size);
if (ret != 0) {
- error("ftruncate(%zd) failed (%s).", size, nn_strerror(errno));
+ log_error("ftruncate(%zd) failed (%s).", size, nn_strerror(errno));
return false;
}
file->size = size;
return true;
}
+bool nn_file_flush(struct nn_file *file)
+{
+ s32 ret = fsync(file->fd);
+ if (ret != 0) {
+ log_error("fsync() failed (%s).", nn_strerror(errno));
+ return false;
+ }
+ return true;
+}
+
#define file_io_loop(call, fail_case) \
size_t bc = 0; \
ssize_t res; \
for (;;) { \
res = call(file->fd, buf, size - bc); \
if (fail_case) { \
- error(""#call"() failed (%s).", nn_strerror(errno)); \
+ log_error(""#call"() failed (%s).", nn_strerror(errno)); \
return false; \
} \
if ((bc += res) >= size) break; \
@@ -128,10 +138,11 @@ bool nn_file_read(struct nn_file *file, void *buf, size_t size)
void *nn_file_mmap(struct nn_file *file)
{
+ if (file->size == 0) return NULL;
s32 flags = PROT_READ | ((file->flags & NNWT_FILE_READONLY) ? 0 : PROT_WRITE);
void *map = mmap(NULL, file->size, flags, MAP_SHARED, file->fd, 0L);
if (map == MAP_FAILED) {
- error("mmap(%.*s) failed (%s).", al_str_x(&file->path), nn_strerror(errno));
+ log_error("mmap(%.*s) failed (%s).", al_str_x(&file->path), nn_strerror(errno));
return NULL;
}
return map;
@@ -141,7 +152,7 @@ void *nn_file_mremap(struct nn_file *file, size_t size, void *old_map)
{
void *map = mremap(old_map, file->size, size, MREMAP_MAYMOVE);
if (map == MAP_FAILED) {
- error("mremap(%p, %zu, %zu) failed (%s).", old_map, file->size, size, nn_strerror(errno));
+ log_error("mremap(%p, %zu, %zu) failed (%s).", old_map, file->size, size, nn_strerror(errno));
return NULL;
}
return map;
@@ -151,7 +162,7 @@ void nn_file_munmap(struct nn_file *file, void *map)
{
s32 ret = munmap(map, file->size);
if (ret != 0) {
- error("munmap(%p, %zu) failed (%s).", map, file->size, nn_strerror(errno));
+ log_error("munmap(%p, %zu) failed (%s).", map, file->size, nn_strerror(errno));
}
}
@@ -170,7 +181,7 @@ bool nn_dir_open(struct nn_dir *dir, str *path)
dir->dir = opendir(c_str);
al_free(c_str);
if (!dir->dir) {
- error("opendir(%.*s) failed (%s).", al_str_x(path), nn_strerror(errno));
+ log_error("opendir(%.*s) failed (%s).", al_str_x(path), nn_strerror(errno));
return false;
}
al_str_clone(&dir->path, path);
@@ -191,7 +202,7 @@ bool nn_dir_exists(str *path)
al_free(c_str);
if (!dir) {
if (errno != ENOENT) {
- error("opendir(%.*s) failed (%s).", al_str_x(path), nn_strerror(errno));
+ log_error("opendir(%.*s) failed (%s).", al_str_x(path), nn_strerror(errno));
}
return false;
}
@@ -205,7 +216,7 @@ bool nn_dir_create(str *path)
s32 ret = mkdir(c_str, 0755);
al_free(c_str);
if (ret == -1) {
- error("mkdir(%.*s) failed (%s).", al_str_x(path), nn_strerror(errno));
+ log_error("mkdir(%.*s) failed (%s).", al_str_x(path), nn_strerror(errno));
return false;
}
return true;
@@ -216,7 +227,7 @@ bool nn_dir_read(struct nn_dir *dir, struct nn_dir_entry *entry)
errno = 0;
if (!(entry->entry = readdir(dir->dir))) {
if (errno) {
- error("readdir(%.*s) failed (%s).", al_str_x(&dir->path), nn_strerror(errno));
+ log_error("readdir(%.*s) failed (%s).", al_str_x(&dir->path), nn_strerror(errno));
}
return false;
}
diff --git a/src/util/file/file_stdio.c b/src/util/file/file_stdio.c
index 1969477..48dd545 100644
--- a/src/util/file/file_stdio.c
+++ b/src/util/file/file_stdio.c
@@ -40,7 +40,7 @@ bool nn_file_open(struct nn_file *file, str *path, s32 flags)
{
const char *mode = (flags & NNWT_FILE_CREATE) ? "wb+" : "rb+";
if (!open_stdio_file(&file->file, path, mode)) {
- error("fopen(%.*s) failed (%d: %s).", al_str_x(path), errno, nn_strerror(errno));
+ log_error("fopen(%.*s) failed (%d: %s).", al_str_x(path), errno, nn_strerror(errno));
return false;
}
@@ -71,7 +71,7 @@ bool nn_file_create(str *path)
off_t nn_file_seek(struct nn_file *file, off_t offset, s32 whence)
{
if (fseek(file->file, offset, whence) != 0) {
- error("fseek(%zd, %d) failed (%s).", offset, whence, nn_strerror(errno));
+ log_error("fseek(%zd, %d) failed (%s).", offset, whence, nn_strerror(errno));
return -1;
}
return ftell(file->file);
@@ -87,7 +87,7 @@ bool nn_file_write(struct nn_file *file, void *buf, size_t size)
{
size_t ret = fwrite(buf, size, 1, file->file);
if (ret == 0) {
- error("fwrite(%zu) failed (%s).", size, nn_strerror(errno));
+ log_error("fwrite(%zu) failed (%s).", size, nn_strerror(errno));
return false;
}
return true;
@@ -97,7 +97,7 @@ bool nn_file_read(struct nn_file *file, void *buf, size_t size)
{
size_t ret = fread(buf, size, 1, file->file);
if (ret == 0) {
- error("fread(%zu) failed (%s).", size, nn_strerror(errno));
+ log_error("fread(%zu) failed (%s).", size, nn_strerror(errno));
return false;
}
return true;
diff --git a/subprojects/libalabaster.wrap b/subprojects/libalabaster.wrap
index 038be37..b3661b4 100644
--- a/subprojects/libalabaster.wrap
+++ b/subprojects/libalabaster.wrap
@@ -1,4 +1,4 @@
[wrap-git]
url = https://git.akon.city/libalabaster
-revision = f6a8686b2c209b0e25cd64a587d6e9fb55200ec4
+revision = 85fb9ba380540ce24f1c99f21c14653459161a63
depth = 1