aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2022-07-24 11:37:18 -0700
committerKaz Kylheku <kaz@kylheku.com>2022-07-24 11:37:18 -0700
commit527c20f525c0f178707dea37589f494c9f45e48f (patch)
tree996e33eacbfa250c8230d5cd611abf61afcec524
parente2cf2d257e160ee7feeb3d73fb02e941f7e865d0 (diff)
downloadsafepath-527c20f525c0f178707dea37589f494c9f45e48f.tar.gz
safepath-527c20f525c0f178707dea37589f494c9f45e48f.tar.bz2
safepath-527c20f525c0f178707dea37589f494c9f45e48f.zip
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.
-rw-r--r--safepath.c6
-rw-r--r--safepath.h1
2 files changed, 7 insertions, 0 deletions
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 */