summaryrefslogtreecommitdiffstats
path: root/src/bfstd.h
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2024-01-13 12:42:42 -0500
committerTavian Barnes <tavianator@tavianator.com>2024-01-13 12:42:42 -0500
commite9588c49d5539ded993f720fc6855d6fa878c997 (patch)
treed827157c37f59335252ba874fd41604984775471 /src/bfstd.h
parentd6cae04b54c1d58223e1719101b7c54d348e8d80 (diff)
downloadbfs-e9588c49d5539ded993f720fc6855d6fa878c997.tar.xz
bfstd: New {error,errno}_is_like() functions
We used to have is_nonexistence_error() to consistently treat ENOENT and ENOTDIR the same. Recently, we started considering EFAULT the same as ENAMETOOLONG on DragonFly BSD to work around a kernel bug. Unify both of these behind a more generic interface.
Diffstat (limited to 'src/bfstd.h')
-rw-r--r--src/bfstd.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/bfstd.h b/src/bfstd.h
index 0fcb892..8953b9b 100644
--- a/src/bfstd.h
+++ b/src/bfstd.h
@@ -45,9 +45,23 @@
// #include <errno.h>
/**
- * Return whether an error code is due to a path not existing.
+ * Check if an error code is "like" another one. For example, ENOTDIR is
+ * like ENOENT because they can both be triggered by non-existent paths.
+ *
+ * @param error
+ * The error code to check.
+ * @param category
+ * The category to test for. Known categories include ENOENT and
+ * ENAMETOOLONG.
+ * @return
+ * Whether the error belongs to the given category.
+ */
+bool error_is_like(int error, int category);
+
+/**
+ * Equivalent to error_is_like(errno, category).
*/
-bool is_nonexistence_error(int error);
+bool errno_is_like(int category);
#include <fcntl.h>