From af22d7ef9a553dd9ab86e193209ebb87ca9939cc Mon Sep 17 00:00:00 2001 From: Nikhil Marathe Date: Sun, 21 Sep 2014 16:16:23 -0700 Subject: [PATCH] Fixed code to new API. Not tested yet, but compiles successfully --- code/cgi/main.c | 17 +++++++----- code/detach/main.c | 5 ++-- code/dns/main.c | 29 +++++++++---------- code/idle-basic/main.c | 2 +- code/idle-compute/main.c | 13 +++++---- code/multi-echo-server/main.c | 22 +++++++++------ code/multi-echo-server/worker.c | 49 ++++++++++++++++++++------------- code/onchange/main.c | 7 +++-- code/pipe-echo-server/main.c | 34 +++++++++++------------ code/proc-streams/main.c | 11 ++++---- code/progress/main.c | 2 +- code/queue-cancel/main.c | 2 +- code/ref-timer/main.c | 4 +-- code/spawn/main.c | 10 ++++--- code/tcp-echo-server/main.c | 27 +++++++++--------- code/tty-gravity/main.c | 2 +- code/udp-dhcp/main.c | 41 +++++++++++++++------------ code/uvstop/main.c | 4 +-- 18 files changed, 158 insertions(+), 123 deletions(-) diff --git a/code/cgi/main.c b/code/cgi/main.c index 1a41e6f..80b2382 100644 --- a/code/cgi/main.c +++ b/code/cgi/main.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -7,8 +8,8 @@ uv_loop_t *loop; uv_process_t child_req; uv_process_options_t options; -void cleanup_handles(uv_process_t *req, int exit_status, int term_signal) { - fprintf(stderr, "Process exited with status %d, signal %d\n", exit_status, term_signal); +void cleanup_handles(uv_process_t *req, int64_t exit_status, int term_signal) { + fprintf(stderr, "Process exited with status %" PRId64 ", signal %d\n", exit_status, term_signal); uv_close((uv_handle_t*) req->data, NULL); uv_close((uv_handle_t*) req, NULL); } @@ -38,8 +39,9 @@ void invoke_cgi_script(uv_tcp_t *client) { options.args = args; child_req.data = (void*) client; - if (uv_spawn(loop, &child_req, options)) { - fprintf(stderr, "%s\n", uv_strerror(uv_last_error(loop))); + int r; + if ((r = uv_spawn(loop, &child_req, &options))) { + fprintf(stderr, "%s\n", uv_strerror(r)); return; } } @@ -66,11 +68,12 @@ int main() { uv_tcp_t server; uv_tcp_init(loop, &server); - struct sockaddr_in bind_addr = uv_ip4_addr("0.0.0.0", 7000); - uv_tcp_bind(&server, bind_addr); + struct sockaddr_in bind_addr; + uv_ip4_addr("0.0.0.0", 7000, &bind_addr); + uv_tcp_bind(&server, (const struct sockaddr *)&bind_addr, 0); int r = uv_listen((uv_stream_t*) &server, 128, on_new_connection); if (r) { - fprintf(stderr, "Listen error %s\n", uv_err_name(uv_last_error(loop))); + fprintf(stderr, "Listen error %s\n", uv_err_name(r)); return 1; } return uv_run(loop, UV_RUN_DEFAULT); diff --git a/code/detach/main.c b/code/detach/main.c index 8522c7e..3c88fff 100644 --- a/code/detach/main.c +++ b/code/detach/main.c @@ -19,8 +19,9 @@ int main() { options.args = args; options.flags = UV_PROCESS_DETACHED; - if (uv_spawn(loop, &child_req, options)) { - fprintf(stderr, "%s\n", uv_strerror(uv_last_error(loop))); + int r; + if ((r = uv_spawn(loop, &child_req, &options))) { + fprintf(stderr, "%s\n", uv_strerror(r)); return 1; } fprintf(stderr, "Launched sleep with PID %d\n", child_req.pid); diff --git a/code/dns/main.c b/code/dns/main.c index f12d4d6..79e01ad 100644 --- a/code/dns/main.c +++ b/code/dns/main.c @@ -5,14 +5,15 @@ uv_loop_t *loop; -uv_buf_t alloc_buffer(uv_handle_t *handle, size_t suggested_size) { - return uv_buf_init((char*) malloc(suggested_size), suggested_size); +void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { + buf->base = malloc(suggested_size); + buf->len = suggested_size; } -void on_read(uv_stream_t *client, ssize_t nread, uv_buf_t buf) { - if (nread == -1) { - if (uv_last_error(loop).code != UV_EOF) - fprintf(stderr, "Read error %s\n", uv_err_name(uv_last_error(loop))); +void on_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) { + if (nread < 0) { + if (nread != UV_EOF) + fprintf(stderr, "Read error %s\n", uv_err_name(nread)); uv_close((uv_handle_t*) client, NULL); free(client); return; @@ -20,16 +21,16 @@ void on_read(uv_stream_t *client, ssize_t nread, uv_buf_t buf) { char *data = (char*) malloc(sizeof(char) * (nread+1)); data[nread] = '\0'; - strncpy(data, buf.base, nread); + strncpy(data, buf->base, nread); fprintf(stderr, "%s", data); free(data); - free(buf.base); + free(buf->base); } void on_connect(uv_connect_t *req, int status) { - if (status == -1) { - fprintf(stderr, "connect failed error %s\n", uv_err_name(uv_last_error(loop))); + if (status < 0) { + fprintf(stderr, "connect failed error %s\n", uv_err_name(status)); free(req); return; } @@ -39,8 +40,8 @@ void on_connect(uv_connect_t *req, int status) { } void on_resolved(uv_getaddrinfo_t *resolver, int status, struct addrinfo *res) { - if (status == -1) { - fprintf(stderr, "getaddrinfo callback error %s\n", uv_err_name(uv_last_error(loop))); + if (status < 0) { + fprintf(stderr, "getaddrinfo callback error %s\n", uv_err_name(status)); return; } @@ -53,7 +54,7 @@ void on_resolved(uv_getaddrinfo_t *resolver, int status, struct addrinfo *res) { uv_tcp_init(loop, socket); connect_req->data = (void*) socket; - uv_tcp_connect(connect_req, socket, *(struct sockaddr_in*) res->ai_addr, on_connect); + uv_tcp_connect(connect_req, socket, (const struct sockaddr*) res->ai_addr, on_connect); uv_freeaddrinfo(res); } @@ -72,7 +73,7 @@ int main() { int r = uv_getaddrinfo(loop, &resolver, on_resolved, "irc.freenode.net", "6667", &hints); if (r) { - fprintf(stderr, "getaddrinfo call error %s\n", uv_err_name(uv_last_error(loop))); + fprintf(stderr, "getaddrinfo call error %s\n", uv_err_name(r)); return 1; } return uv_run(loop, UV_RUN_DEFAULT); diff --git a/code/idle-basic/main.c b/code/idle-basic/main.c index 14d8d5a..e4fc4ef 100644 --- a/code/idle-basic/main.c +++ b/code/idle-basic/main.c @@ -3,7 +3,7 @@ int64_t counter = 0; -void wait_for_a_while(uv_idle_t* handle, int status) { +void wait_for_a_while(uv_idle_t* handle) { counter++; if (counter >= 10e6) diff --git a/code/idle-compute/main.c b/code/idle-compute/main.c index 4f6429d..f151435 100644 --- a/code/idle-compute/main.c +++ b/code/idle-compute/main.c @@ -7,7 +7,7 @@ uv_fs_t stdin_watcher; uv_idle_t idler; char buffer[1024]; -void crunch_away(uv_idle_t* handle, int status) { +void crunch_away(uv_idle_t* handle) { // Compute extra-terrestrial life // fold proteins // computer another digit of PI @@ -21,11 +21,13 @@ void on_type(uv_fs_t *req) { if (stdin_watcher.result > 0) { buffer[stdin_watcher.result] = '\0'; printf("Typed %s\n", buffer); - uv_fs_read(loop, &stdin_watcher, 1, buffer, 1024, -1, on_type); + + uv_buf_t buf = uv_buf_init(buffer, 1024); + uv_fs_read(loop, &stdin_watcher, 1, &buf, 1, 0, on_type); uv_idle_start(&idler, crunch_away); } - else { - fprintf(stderr, "error opening file: %d\n", req->errorno); + else if (stdin_watcher.result < 0) { + fprintf(stderr, "error opening file: %s\n", uv_err_name(req->result)); } } @@ -34,7 +36,8 @@ int main() { uv_idle_init(loop, &idler); - uv_fs_read(loop, &stdin_watcher, 1, buffer, 1024, -1, on_type); + uv_buf_t buf = uv_buf_init(buffer, 1024); + uv_fs_read(loop, &stdin_watcher, 1, &buf, 1, 0, on_type); uv_idle_start(&idler, crunch_away); return uv_run(loop, UV_RUN_DEFAULT); } diff --git a/code/multi-echo-server/main.c b/code/multi-echo-server/main.c index e7c7d6c..6db0c74 100644 --- a/code/multi-echo-server/main.c +++ b/code/multi-echo-server/main.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -17,13 +18,14 @@ int child_worker_count; uv_buf_t dummy_buf; char worker_path[500]; -void close_process_handle(uv_process_t *req, int exit_status, int term_signal) { - fprintf(stderr, "Process exited with status %d, signal %d\n", exit_status, term_signal); +void close_process_handle(uv_process_t *req, int64_t exit_status, int term_signal) { + fprintf(stderr, "Process exited with status %" PRId64 ", signal %d\n", exit_status, term_signal); uv_close((uv_handle_t*) req, NULL); } -uv_buf_t alloc_buffer(uv_handle_t *handle, size_t suggested_size) { - return uv_buf_init((char*) calloc(suggested_size, 1), suggested_size); +void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { + buf->base = malloc(suggested_size); + buf->len = suggested_size; } void on_new_connection(uv_stream_t *server, int status) { @@ -87,7 +89,7 @@ void setup_workers() { worker->options.file = args[0]; worker->options.args = args; - uv_spawn(loop, &worker->req, worker->options); + uv_spawn(loop, &worker->req, &worker->options); fprintf(stderr, "Started worker %d\n", worker->req.pid); } } @@ -100,10 +102,12 @@ int main() { uv_tcp_t server; uv_tcp_init(loop, &server); - struct sockaddr_in bind_addr = uv_ip4_addr("0.0.0.0", 7000); - uv_tcp_bind(&server, bind_addr); - if (uv_listen((uv_stream_t*) &server, 128, on_new_connection)) { - fprintf(stderr, "Listen error %s\n", uv_err_name(uv_last_error(loop))); + struct sockaddr_in bind_addr; + uv_ip4_addr("0.0.0.0", 7000, &bind_addr); + uv_tcp_bind(&server, (const struct sockaddr *)&bind_addr, 0); + int r; + if ((r = uv_listen((uv_stream_t*) &server, 128, on_new_connection))) { + fprintf(stderr, "Listen error %s\n", uv_err_name(r)); return 2; } return uv_run(loop, UV_RUN_DEFAULT); diff --git a/code/multi-echo-server/worker.c b/code/multi-echo-server/worker.c index efdea88..ebfdef3 100644 --- a/code/multi-echo-server/worker.c +++ b/code/multi-echo-server/worker.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -7,42 +8,52 @@ uv_loop_t *loop; uv_pipe_t queue; -uv_buf_t alloc_buffer(uv_handle_t *handle, size_t suggested_size) { - return uv_buf_init((char*) calloc(suggested_size, 1), suggested_size); +void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { + buf->base = malloc(suggested_size); + buf->len = suggested_size; } void echo_write(uv_write_t *req, int status) { - if (status == -1) { - fprintf(stderr, "Write error %s\n", uv_err_name(uv_last_error(loop))); + if (status) { + fprintf(stderr, "Write error %s\n", uv_err_name(status)); } - char *base = (char*) req->data; - free(base); free(req); } -void echo_read(uv_stream_t *client, ssize_t nread, uv_buf_t buf) { - if (nread == -1) { - if (uv_last_error(loop).code != UV_EOF) - fprintf(stderr, "Read error %s\n", uv_err_name(uv_last_error(loop))); +void echo_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) { + if (nread < 0) { + if (nread != UV_EOF) + fprintf(stderr, "Read error %s\n", uv_err_name(nread)); uv_close((uv_handle_t*) client, NULL); return; } uv_write_t *req = (uv_write_t *) malloc(sizeof(uv_write_t)); - req->data = (void*) buf.base; - buf.len = nread; - uv_write(req, client, &buf, 1, echo_write); + uv_buf_t wrbuf = uv_buf_init(buf->base, nread); + uv_write(req, client, &wrbuf, 1, echo_write); + free(buf->base); } -void on_new_connection(uv_pipe_t *q, ssize_t nread, uv_buf_t buf, uv_handle_type pending) { - if (pending == UV_UNKNOWN_HANDLE) { - // error! +void on_new_connection(uv_stream_t *q, ssize_t nread, const uv_buf_t *buf) { + if (nread < 0) { + if (nread != UV_EOF) + fprintf(stderr, "Read error %s\n", uv_err_name(nread)); + uv_close((uv_handle_t*) q, NULL); return; } + uv_pipe_t *pipe = (uv_pipe_t*) q; + if (!uv_pipe_pending_count(pipe)) { + fprintf(stderr, "No pending count\n"); + return; + } + + uv_handle_type pending = uv_pipe_pending_type(pipe); + assert(pending == UV_TCP); + uv_tcp_t *client = (uv_tcp_t*) malloc(sizeof(uv_tcp_t)); - uv_tcp_init(loop, client, 0); - if (uv_accept((uv_stream_t*) q, (uv_stream_t*) client) == 0) { + uv_tcp_init(loop, client); + if (uv_accept(q, (uv_stream_t*) client) == 0) { fprintf(stderr, "Worker %d: Accepted fd %d\n", getpid(), client->io_watcher.fd); uv_read_start((uv_stream_t*) client, alloc_buffer, echo_read); } @@ -56,6 +67,6 @@ int main() { uv_pipe_init(loop, &queue, 1); uv_pipe_open(&queue, 0); - uv_read2_start((uv_stream_t*)&queue, alloc_buffer, on_new_connection); + uv_read_start((uv_stream_t*)&queue, alloc_buffer, on_new_connection); return uv_run(loop, UV_RUN_DEFAULT); } diff --git a/code/onchange/main.c b/code/onchange/main.c index 1f0391c..dffd5d5 100644 --- a/code/onchange/main.c +++ b/code/onchange/main.c @@ -7,7 +7,7 @@ uv_loop_t *loop; const char *command; void run_command(uv_fs_event_t *handle, const char *filename, int events, int status) { - fprintf(stderr, "Change detected in %s: ", handle->filename); + fprintf(stderr, "Change detected in %s: ", handle->path); if (events == UV_RENAME) fprintf(stderr, "renamed"); if (events == UV_CHANGE) @@ -28,7 +28,10 @@ int main(int argc, char **argv) { while (argc-- > 2) { fprintf(stderr, "Adding watch on %s\n", argv[argc]); - uv_fs_event_init(loop, (uv_fs_event_t*) malloc(sizeof(uv_fs_event_t)), argv[argc], run_command, 0); + uv_fs_event_t *fs_event_req = malloc(sizeof(uv_fs_event_t)); + uv_fs_event_init(loop, fs_event_req); + // The recursive flag watches subdirectories too. + uv_fs_event_start(fs_event_req, run_command, argv[argc], UV_FS_EVENT_RECURSIVE); } return uv_run(loop, UV_RUN_DEFAULT); diff --git a/code/pipe-echo-server/main.c b/code/pipe-echo-server/main.c index 41edc4d..7051a96 100644 --- a/code/pipe-echo-server/main.c +++ b/code/pipe-echo-server/main.c @@ -5,31 +5,30 @@ uv_loop_t *loop; -uv_buf_t alloc_buffer(uv_handle_t *handle, size_t suggested_size) { - return uv_buf_init((char*) calloc(suggested_size, 1), suggested_size); +void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { + buf->base = malloc(suggested_size); + buf->len = suggested_size; } void echo_write(uv_write_t *req, int status) { - if (status == -1) { - fprintf(stderr, "Write error %s\n", uv_err_name(uv_last_error(loop))); + if (status < 0) { + fprintf(stderr, "Write error %s\n", uv_err_name(status)); } - char *base = (char*) req->data; - free(base); free(req); } -void echo_read(uv_stream_t *client, ssize_t nread, uv_buf_t buf) { - if (nread == -1) { - if (uv_last_error(loop).code != UV_EOF) - fprintf(stderr, "Read error %s\n", uv_err_name(uv_last_error(loop))); +void echo_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) { + if (nread < 0) { + if (nread != UV_EOF) + fprintf(stderr, "Read error %s\n", uv_err_name(nread)); uv_close((uv_handle_t*) client, NULL); return; } uv_write_t *req = (uv_write_t *) malloc(sizeof(uv_write_t)); - req->data = (void*) buf.base; - buf.len = nread; - uv_write(req, client, &buf, 1, echo_write); + uv_buf_t wrbuf = uv_buf_init(buf->base, nread); + uv_write(req, client, &wrbuf, 1, echo_write); + free(buf->base); } void on_new_connection(uv_stream_t *server, int status) { @@ -62,12 +61,13 @@ int main() { signal(SIGINT, remove_sock); - if (uv_pipe_bind(&server, "echo.sock")) { - fprintf(stderr, "Bind error %s\n", uv_err_name(uv_last_error(loop))); + int r; + if ((r = uv_pipe_bind(&server, "echo.sock"))) { + fprintf(stderr, "Bind error %s\n", uv_err_name(r)); return 1; } - if (uv_listen((uv_stream_t*) &server, 128, on_new_connection)) { - fprintf(stderr, "Listen error %s\n", uv_err_name(uv_last_error(loop))); + if ((r = uv_listen((uv_stream_t*) &server, 128, on_new_connection))) { + fprintf(stderr, "Listen error %s\n", uv_err_name(r)); return 2; } return uv_run(loop, UV_RUN_DEFAULT); diff --git a/code/proc-streams/main.c b/code/proc-streams/main.c index d2ce39a..b8a6521 100644 --- a/code/proc-streams/main.c +++ b/code/proc-streams/main.c @@ -1,5 +1,6 @@ #include #include +#include #include @@ -7,8 +8,8 @@ uv_loop_t *loop; uv_process_t child_req; uv_process_options_t options; -void on_exit(uv_process_t *req, int exit_status, int term_signal) { - fprintf(stderr, "Process exited with status %d, signal %d\n", exit_status, term_signal); +void on_exit(uv_process_t *req, int64_t exit_status, int term_signal) { + fprintf(stderr, "Process exited with status %" PRId64 ", signal %d\n", exit_status, term_signal); uv_close((uv_handle_t*) req, NULL); } @@ -38,9 +39,9 @@ int main() { options.file = args[0]; options.args = args; - - if (uv_spawn(loop, &child_req, options)) { - fprintf(stderr, "%s\n", uv_strerror(uv_last_error(loop))); + int r; + if ((r = uv_spawn(loop, &child_req, &options))) { + fprintf(stderr, "%s\n", uv_strerror(r)); return 1; } diff --git a/code/progress/main.c b/code/progress/main.c index 2a301d7..56104c6 100644 --- a/code/progress/main.c +++ b/code/progress/main.c @@ -27,7 +27,7 @@ void after(uv_work_t *req, int status) { uv_close((uv_handle_t*) &async, NULL); } -void print_progress(uv_async_t *handle, int status /*UNUSED*/) { +void print_progress(uv_async_t *handle) { double percentage = *((double*) handle->data); fprintf(stderr, "Downloaded %.2f%%\n", percentage); } diff --git a/code/queue-cancel/main.c b/code/queue-cancel/main.c index 19b36e7..3f7836c 100644 --- a/code/queue-cancel/main.c +++ b/code/queue-cancel/main.c @@ -26,7 +26,7 @@ void fib(uv_work_t *req) { } void after_fib(uv_work_t *req, int status) { - if (status == -1 && uv_last_error(loop).code == UV_ECANCELED) + if (status == UV_ECANCELED) fprintf(stderr, "Calculation of %d cancelled.\n", *(int *) req->data); } diff --git a/code/ref-timer/main.c b/code/ref-timer/main.c index ac18e05..ad7c829 100644 --- a/code/ref-timer/main.c +++ b/code/ref-timer/main.c @@ -6,11 +6,11 @@ uv_loop_t *loop; uv_timer_t gc_req; uv_timer_t fake_job_req; -void gc(uv_timer_t *handle, int status) { +void gc(uv_timer_t *handle) { fprintf(stderr, "Freeing unused objects\n"); } -void fake_job(uv_timer_t *handle, int status) { +void fake_job(uv_timer_t *handle) { fprintf(stdout, "Fake job done\n"); } diff --git a/code/spawn/main.c b/code/spawn/main.c index fd951f9..05a4686 100644 --- a/code/spawn/main.c +++ b/code/spawn/main.c @@ -1,4 +1,5 @@ #include +#include #include @@ -6,8 +7,8 @@ uv_loop_t *loop; uv_process_t child_req; uv_process_options_t options; -void on_exit(uv_process_t *req, int exit_status, int term_signal) { - fprintf(stderr, "Process exited with status %d, signal %d\n", exit_status, term_signal); +void on_exit(uv_process_t *req, int64_t exit_status, int term_signal) { + fprintf(stderr, "Process exited with status %" PRId64 ", signal %d\n", exit_status, term_signal); uv_close((uv_handle_t*) req, NULL); } @@ -23,8 +24,9 @@ int main() { options.file = "mkdir"; options.args = args; - if (uv_spawn(loop, &child_req, options)) { - fprintf(stderr, "%s\n", uv_strerror(uv_last_error(loop))); + int r; + if ((r = uv_spawn(loop, &child_req, &options))) { + fprintf(stderr, "%s\n", uv_strerror(r)); return 1; } diff --git a/code/tcp-echo-server/main.c b/code/tcp-echo-server/main.c index 0b754df..a226b9f 100644 --- a/code/tcp-echo-server/main.c +++ b/code/tcp-echo-server/main.c @@ -9,31 +9,30 @@ uv_loop_t *loop; struct sockaddr_in addr; -uv_buf_t alloc_buffer(uv_handle_t *handle, size_t suggested_size) { - return uv_buf_init((char*) malloc(suggested_size), suggested_size); +void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { + buf->base = (char*) malloc(suggested_size); + buf->len = suggested_size; } void echo_write(uv_write_t *req, int status) { - if (status == -1) { - fprintf(stderr, "Write error %s\n", uv_err_name(uv_last_error(loop))); + if (status) { + fprintf(stderr, "Write error %s\n", uv_err_name(status)); } - char *base = (char*) req->data; - free(base); free(req); } -void echo_read(uv_stream_t *client, ssize_t nread, uv_buf_t buf) { - if (nread == -1) { - if (uv_last_error(loop).code != UV_EOF) - fprintf(stderr, "Read error %s\n", uv_err_name(uv_last_error(loop))); +void echo_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) { + if (nread < 0) { + if (nread != UV_EOF) + fprintf(stderr, "Read error %s\n", uv_err_name(nread)); uv_close((uv_handle_t*) client, NULL); return; } uv_write_t *req = (uv_write_t *) malloc(sizeof(uv_write_t)); - req->data = (void*) buf.base; - buf.len = nread; - uv_write(req, client, &buf, 1, echo_write); + uv_buf_t wrbuf = uv_buf_init(buf->base, nread); + uv_write(req, client, &wrbuf, 1, echo_write); + free(buf->base); } void on_new_connection(uv_stream_t *server, int status) { @@ -60,7 +59,7 @@ int main() { uv_ip4_addr("0.0.0.0", DEFAULT_PORT, &addr); - uv_tcp_bind(&server, (const struct sockaddr*)&bind_addr, 0); + uv_tcp_bind(&server, (const struct sockaddr*)&addr, 0); int r = uv_listen((uv_stream_t*) &server, DEFAULT_BACKLOG, on_new_connection); if (r) { fprintf(stderr, "Listen error %s\n", uv_strerror(r)); diff --git a/code/tty-gravity/main.c b/code/tty-gravity/main.c index ae2c04e..053e7e5 100644 --- a/code/tty-gravity/main.c +++ b/code/tty-gravity/main.c @@ -11,7 +11,7 @@ int width, height; int pos = 0; char *message = " Hello TTY "; -void update(uv_timer_t *req, int status) { +void update(uv_timer_t *req) { char data[500]; uv_buf_t buf; diff --git a/code/udp-dhcp/main.c b/code/udp-dhcp/main.c index 0074cb7..8a7eeb4 100644 --- a/code/udp-dhcp/main.c +++ b/code/udp-dhcp/main.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -8,27 +9,28 @@ uv_loop_t *loop; uv_udp_t send_socket; uv_udp_t recv_socket; -uv_buf_t alloc_buffer(uv_handle_t *handle, size_t suggested_size) { - return uv_buf_init((char*) malloc(suggested_size), suggested_size); +void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { + buf->base = malloc(suggested_size); + buf->len = suggested_size; } -void on_read(uv_udp_t *req, ssize_t nread, uv_buf_t buf, struct sockaddr *addr, unsigned flags) { - if (nread == -1) { - fprintf(stderr, "Read error %s\n", uv_err_name(uv_last_error(loop))); +void on_read(uv_udp_t *req, ssize_t nread, const uv_buf_t *buf, const struct sockaddr *addr, unsigned flags) { + if (nread < 0) { + fprintf(stderr, "Read error %s\n", uv_err_name(nread)); uv_close((uv_handle_t*) req, NULL); - free(buf.base); + free(buf->base); return; } char sender[17] = { 0 }; - uv_ip4_name((struct sockaddr_in*) addr, sender, 16); + uv_ip4_name((const struct sockaddr_in*) addr, sender, 16); fprintf(stderr, "Recv from %s\n", sender); // ... DHCP specific code // above comment is only for book code snippet purposes - unsigned int *as_integer = (unsigned int*)buf.base; + unsigned int *as_integer = (unsigned int*)buf->base; unsigned int ipbin = ntohl(as_integer[4]); unsigned char ip[4] = {0}; int i; @@ -36,12 +38,13 @@ void on_read(uv_udp_t *req, ssize_t nread, uv_buf_t buf, struct sockaddr *addr, ip[i] = (ipbin >> i*8) & 0xff; fprintf(stderr, "Offered IP %d.%d.%d.%d\n", ip[3], ip[2], ip[1], ip[0]); - free(buf.base); + free(buf->base); uv_udp_recv_stop(req); } uv_buf_t make_discover_msg(uv_udp_send_t *req) { - uv_buf_t buffer = alloc_buffer((uv_handle_t*)req, 256); + uv_buf_t buffer; + alloc_buffer((uv_handle_t*)req, 256, &buffer); memset(buffer.base, 0, buffer.len); // BOOTREQUEST @@ -95,8 +98,8 @@ uv_buf_t make_discover_msg(uv_udp_send_t *req) { } void on_send(uv_udp_send_t *req, int status) { - if (status == -1) { - fprintf(stderr, "Send error %s\n", uv_err_name(uv_last_error(loop))); + if (status) { + fprintf(stderr, "Send error %s\n", uv_err_name(status)); return; } } @@ -105,19 +108,23 @@ int main() { loop = uv_default_loop(); uv_udp_init(loop, &recv_socket); - struct sockaddr_in recv_addr = uv_ip4_addr("0.0.0.0", 68); - uv_udp_bind(&recv_socket, recv_addr, 0); + struct sockaddr_in recv_addr; + assert(uv_ip4_addr("0.0.0.0", 68, &recv_addr) == 0); + uv_udp_bind(&recv_socket, (const struct sockaddr *)&recv_addr, 0); uv_udp_recv_start(&recv_socket, alloc_buffer, on_read); uv_udp_init(loop, &send_socket); - uv_udp_bind(&send_socket, uv_ip4_addr("0.0.0.0", 0), 0); + struct sockaddr_in bind_addr; + assert(uv_ip4_addr("0.0.0.0", 0, &bind_addr) == 0); + uv_udp_bind(&send_socket, (const struct sockaddr *)&bind_addr, 0); uv_udp_set_broadcast(&send_socket, 1); uv_udp_send_t send_req; uv_buf_t discover_msg = make_discover_msg(&send_req); - struct sockaddr_in send_addr = uv_ip4_addr("255.255.255.255", 67); - uv_udp_send(&send_req, &send_socket, &discover_msg, 1, send_addr, on_send); + struct sockaddr_in send_addr; + assert(uv_ip4_addr("255.255.255.255", 67, &send_addr) == 0); + uv_udp_send(&send_req, &send_socket, &discover_msg, 1, (const struct sockaddr *)&send_addr, on_send); return uv_run(loop, UV_RUN_DEFAULT); } diff --git a/code/uvstop/main.c b/code/uvstop/main.c index 5b28ee2..7aa53b7 100644 --- a/code/uvstop/main.c +++ b/code/uvstop/main.c @@ -3,7 +3,7 @@ int64_t counter = 0; -void idle_cb(uv_idle_t *handle, int status) { +void idle_cb(uv_idle_t *handle) { printf("Idle callback\n"); counter++; @@ -13,7 +13,7 @@ void idle_cb(uv_idle_t *handle, int status) { } } -void prep_cb(uv_prepare_t *handle, int status) { +void prep_cb(uv_prepare_t *handle) { printf("Prep callback\n"); }