Take some unistd.h dependencies out of examples
diff --git a/example/crc32/crc32.cc b/example/crc32/crc32.cc
index 5737fbe..97b5cc3 100644
--- a/example/crc32/crc32.cc
+++ b/example/crc32/crc32.cc
@@ -30,7 +30,6 @@
#include <errno.h>
#include <inttypes.h>
#include <stdio.h>
-#include <unistd.h>
// Wuffs ships as a "single file C library" or "header file library" as per
// https://github.com/nothings/stb/blob/master/docs/stb_howto.txt
@@ -66,22 +65,14 @@
}
while (true) {
- const int stdin_fd = 0;
- ssize_t n = read(stdin_fd, src_buffer, SRC_BUFFER_SIZE);
- if (n < 0) {
- if (errno != EINTR) {
- fprintf(stderr, "%s\n", strerror(errno));
- return 1;
- }
- continue;
- }
-
- uint32_t checksum =
- h.update(wuffs_base__make_slice_u8(src_buffer, static_cast<size_t>(n)));
-
- if (n == 0) {
+ size_t n = fread(src_buffer, sizeof(uint8_t), SRC_BUFFER_SIZE, stdin);
+ uint32_t checksum = h.update(wuffs_base__make_slice_u8(src_buffer, n));
+ if (feof(stdin)) {
printf("%08" PRIx32 "\n", checksum);
return 0;
+ } else if (ferror(stdin)) {
+ fprintf(stderr, "read error\n");
+ return 1;
}
}
}
diff --git a/example/gifplayer/gifplayer.c b/example/gifplayer/gifplayer.c
index 0bb7207..74ff1be 100644
--- a/example/gifplayer/gifplayer.c
+++ b/example/gifplayer/gifplayer.c
@@ -32,15 +32,17 @@
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
-#include <unistd.h>
-#ifndef _POSIX_TIMERS
-#error "TODO: timers on non-POSIX systems"
-#else
+// ----------------
+
+#if defined(__unix__) || defined(__MACH__)
+
#include <time.h>
+#include <unistd.h>
+#define WUFFS_EXAMPLE_USE_TIMERS
bool started = false;
-struct timespec start_time;
+struct timespec start_time = {0};
int64_t micros_since_start(struct timespec* now) {
if (!started) {
@@ -53,8 +55,13 @@
}
return nanos / 1000;
}
+
+#else
+#warning "TODO: timers on non-POSIX systems"
#endif
+// ----------------
+
// Wuffs ships as a "single file C library" or "header file library" as per
// https://github.com/nothings/stb/blob/master/docs/stb_howto.txt
//
@@ -98,21 +105,15 @@
wuffs_base__flicks cumulative_delay_micros = 0;
-// ignore_return_value suppresses errors from -Wall -Werror.
-static void ignore_return_value(int ignored) {}
-
const char* read_stdin() {
while (src_len < SRC_BUFFER_SIZE) {
- const int stdin_fd = 0;
- ssize_t n = read(stdin_fd, src_buffer + src_len, SRC_BUFFER_SIZE - src_len);
- if (n > 0) {
- src_len += n;
- } else if (n == 0) {
+ size_t n = fread(src_buffer + src_len, sizeof(uint8_t),
+ SRC_BUFFER_SIZE - src_len, stdin);
+ src_len += n;
+ if (feof(stdin)) {
return NULL;
- } else if (errno == EINTR) {
- // No-op.
- } else {
- return strerror(errno);
+ } else if (ferror(stdin)) {
+ return "read error";
}
}
return "input is too large";
@@ -380,7 +381,7 @@
}
}
-#ifdef _POSIX_TIMERS
+#if defined(WUFFS_EXAMPLE_USE_TIMERS)
if (started) {
struct timespec now;
if (clock_gettime(CLOCK_MONOTONIC, &now)) {
@@ -399,7 +400,7 @@
}
#endif
- ignore_return_value(write(stdout_fd, printbuf.ptr, n));
+ fwrite(printbuf.ptr, sizeof(uint8_t), n, stdout);
cumulative_delay_micros +=
(1000 * wuffs_base__frame_config__duration(&fc)) /
@@ -416,13 +417,6 @@
return NULL;
}
-int fail(const char* msg) {
- const int stderr_fd = 2;
- ignore_return_value(write(stderr_fd, msg, strnlen(msg, 4095)));
- ignore_return_value(write(stderr_fd, "\n", 1));
- return 1;
-}
-
int main(int argc, char** argv) {
int i;
for (i = 1; i < argc; i++) {
@@ -431,14 +425,17 @@
}
}
- const char* msg = read_stdin();
- if (msg) {
- return fail(msg);
+ const char* status = read_stdin();
+ if (status) {
+ fprintf(stderr, "%s\n", status);
+ return 1;
}
+
while (true) {
- msg = play();
- if (msg) {
- return fail(msg);
+ status = play();
+ if (status) {
+ fprintf(stderr, "%s\n", status);
+ return 1;
}
if (num_loops_remaining == 0) {
continue;
diff --git a/example/library/library.c b/example/library/library.c
index 2b112c6..cd5468a 100644
--- a/example/library/library.c
+++ b/example/library/library.c
@@ -32,8 +32,8 @@
for a C compiler $CC, such as clang or gcc.
*/
+#include <stdio.h>
#include <stdlib.h>
-#include <unistd.h>
// Wuffs ships as a "single file C library" or "header file library" as per
// https://github.com/nothings/stb/blob/master/docs/stb_howto.txt
@@ -73,9 +73,6 @@
uint8_t work_buffer[1];
#endif
-// ignore_return_value suppresses errors from -Wall -Werror.
-static void ignore_return_value(int ignored) {}
-
static const char* decode() {
wuffs_base__io_buffer dst;
dst.data.ptr = dst_buffer;
@@ -115,18 +112,16 @@
free(dec);
return status;
}
- ignore_return_value(write(1, dst.data.ptr, dst.meta.wi));
+ fwrite(dst.data.ptr, sizeof(uint8_t), dst.meta.wi, stdout);
free(dec);
return NULL;
}
int main(int argc, char** argv) {
- const char* status_msg = decode();
- int status = 0;
- if (status_msg) {
- status = 1;
- ignore_return_value(write(2, status_msg, strnlen(status_msg, 4095)));
- ignore_return_value(write(2, "\n", 1));
+ const char* status = decode();
+ if (status) {
+ fprintf(stderr, "%s\n", status);
+ return 1;
}
- return status;
+ return 0;
}
diff --git a/example/zcat/zcat.c b/example/zcat/zcat.c
index a5f73f2..c2bf06a 100644
--- a/example/zcat/zcat.c
+++ b/example/zcat/zcat.c
@@ -53,7 +53,7 @@
// program to generate a stand-alone C file.
#include "../../release/c/wuffs-unsupported-snapshot.c"
-#ifdef __linux__
+#if defined(__linux__)
#include <linux/prctl.h>
#include <linux/seccomp.h>
#include <sys/prctl.h>
@@ -160,17 +160,17 @@
}
int main(int argc, char** argv) {
-#ifdef WUFFS_EXAMPLE_USE_SECCOMP
+#if defined(WUFFS_EXAMPLE_USE_SECCOMP)
prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT);
#endif
- const char* msg = decode();
- int status = msg ? fail(msg) : 0;
+ const char* status = decode();
+ int status_code = status ? fail(status) : 0;
-#ifdef WUFFS_EXAMPLE_USE_SECCOMP
+#if defined(WUFFS_EXAMPLE_USE_SECCOMP)
// Call SYS_exit explicitly instead of SYS_exit_group implicitly.
// SECCOMP_MODE_STRICT allows only the former.
- syscall(SYS_exit, status);
+ syscall(SYS_exit, status_code);
#endif
- return status;
+ return status_code;
}