diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/common.c | 1 | ||||
| -rw-r--r-- | src/curl/curl.c | 6 | ||||
| -rw-r--r-- | src/curl/http.c | 6 | ||||
| -rw-r--r-- | src/curl/websocket.c | 4 | ||||
| -rw-r--r-- | src/fs_event/fs_event_inotify.c | 2 | ||||
| -rw-r--r-- | src/multiplex.c | 2 | ||||
| -rw-r--r-- | src/packet_stream.c | 6 | ||||
| -rw-r--r-- | src/socket/socket_linux.c | 20 | ||||
| -rw-r--r-- | src/socket/socket_windows.c | 14 | ||||
| -rw-r--r-- | src/util/file/file.h | 1 | ||||
| -rw-r--r-- | src/util/file/file_linux.c | 39 | ||||
| -rw-r--r-- | src/util/file/file_stdio.c | 8 |
12 files changed, 61 insertions, 48 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; |