diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2021-05-18 04:05:23 +0200 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2021-05-19 02:08:11 +0200 |
commit | d8548232ea2858d1d130f3ac835185159d367caa (patch) | |
tree | f870a8f843dbf090500b509586da3f013dd9ab82 /fs/d_path.c | |
parent | getcwd(2): saner logics around prepend_path() call (diff) | |
download | linux-d8548232ea2858d1d130f3ac835185159d367caa.tar.xz linux-d8548232ea2858d1d130f3ac835185159d367caa.zip |
d_path: don't bother with return value of prepend()
Only simple_dname() checks it, and there we can simply do those
calls and check for overflow (by looking of negative buflen)
in the end.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/d_path.c')
-rw-r--r-- | fs/d_path.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/fs/d_path.c b/fs/d_path.c index 311d43287572..72b8087aaf9c 100644 --- a/fs/d_path.c +++ b/fs/d_path.c @@ -8,14 +8,13 @@ #include <linux/prefetch.h> #include "mount.h" -static int prepend(char **buffer, int *buflen, const char *str, int namelen) +static void prepend(char **buffer, int *buflen, const char *str, int namelen) { *buflen -= namelen; - if (*buflen < 0) - return -ENAMETOOLONG; - *buffer -= namelen; - memcpy(*buffer, str, namelen); - return 0; + if (likely(*buflen >= 0)) { + *buffer -= namelen; + memcpy(*buffer, str, namelen); + } } /** @@ -298,11 +297,10 @@ char *simple_dname(struct dentry *dentry, char *buffer, int buflen) { char *end = buffer + buflen; /* these dentries are never renamed, so d_lock is not needed */ - if (prepend(&end, &buflen, " (deleted)", 11) || - prepend(&end, &buflen, dentry->d_name.name, dentry->d_name.len) || - prepend(&end, &buflen, "/", 1)) - end = ERR_PTR(-ENAMETOOLONG); - return end; + prepend(&end, &buflen, " (deleted)", 11); + prepend(&end, &buflen, dentry->d_name.name, dentry->d_name.len); + prepend(&end, &buflen, "/", 1); + return buflen >= 0 ? end : ERR_PTR(-ENAMETOOLONG); } /* |