From 527c20f525c0f178707dea37589f494c9f45e48f Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 24 Jul 2022 11:37:18 -0700 Subject: Add SAFEPATH_NOTIDIR error code. * safepath.h (SAFEPATH_NOTDIR): New enum. * safepath.c (safepath_err, set_errno): Handle conversion between SAFEPATH_NOTDIR and ENOTDIR. (safepath_strerr): Map SAFEPATH_NOTDIR to message. --- safepath.c | 6 ++++++ safepath.h | 1 + 2 files changed, 7 insertions(+) diff --git a/safepath.c b/safepath.c index 862b5ed..7d9f6fc 100644 --- a/safepath.c +++ b/safepath.c @@ -132,6 +132,8 @@ static int safepath_err(int eno) return SAFEPATH_OK; case ENOENT: return SAFEPATH_NOENT; + case ENOTDIR: + return SAFEPATH_NOTDIR; case EPERM: case EACCES: return SAFEPATH_PERM; @@ -158,6 +160,9 @@ static void set_errno(int spres) case SAFEPATH_NOENT: errno = ENOENT; break; + case SAFEPATH_NOTDIR: + errno = ENOTDIR; + break; case SAFEPATH_INVAL: errno = EINVAL; break; @@ -344,6 +349,7 @@ const char *safepath_strerr(int err) [SAFEPATH_UNSAFE] = "path contains untrusted component", [SAFEPATH_PERM] = "path contains inaccessible component", [SAFEPATH_NOENT] = "path contains nonexistent component", + [SAFEPATH_NOTDIR] = "path contains non-directory component", [SAFEPATH_INVAL] = "path is syntactically invalid", [SAFEPATH_NOMEM] = "out of memory", [SAFEPATH_LOOP] = "too many symlink resolutions" diff --git a/safepath.h b/safepath.h index db83d4c..766a163 100644 --- a/safepath.h +++ b/safepath.h @@ -41,6 +41,7 @@ enum { SAFEPATH_UNSAFE, /* path traversible, unsafe */ SAFEPATH_PERM, /* path not traversible due to perms */ SAFEPATH_NOENT, /* component other than last doesn't exist */ + SAFEPATH_NOTDIR, /* interior path component isn't a directory */ SAFEPATH_INVAL, /* path is invalid */ SAFEPATH_NOMEM, /* out of memory */ SAFEPATH_LOOP, /* more than 8 levels of symlink */ -- cgit v1.2.3