From 6cb8f64a3bf07c809b6f5f13b89f75daf41c0c84 Mon Sep 17 00:00:00 2001 From: Bastien ROUCARIES Date: Tue, 11 Jan 2011 13:32:26 +0100 Subject: [PATCH 3/3] Add errno return to openat_proc_name Add errno return in order to clarify some error condition on caller --- lib/fdopendir.c | 4 ++++ lib/openat-proc.c | 13 ++++++++++++- lib/openat.c | 3 +++ 3 files changed, 19 insertions(+), 1 deletions(-) diff --git a/lib/fdopendir.c b/lib/fdopendir.c index 0853e59..acdc24a 100644 --- a/lib/fdopendir.c +++ b/lib/fdopendir.c @@ -145,6 +145,10 @@ fd_clone_opendir (int fd, struct saved_cwd const *cwd) int saved_errno = EOPNOTSUPP; char buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (buf, fd, "."); + + if(NULL == proc_file && ENOMEM == errno) + return NULL; + if (proc_file) { dir = opendir (proc_file); diff --git a/lib/openat-proc.c b/lib/openat-proc.c index 5868e5d..534ca90 100644 --- a/lib/openat-proc.c +++ b/lib/openat-proc.c @@ -31,6 +31,8 @@ #include #include +#include + #include "dirname.h" #include "intprops.h" #include "same-inode.h" @@ -66,6 +68,7 @@ openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file) if (!*file) { buf[0] = '\0'; + errno = ENOENT; return buf; } @@ -98,11 +101,19 @@ openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file) } if (proc_status < 0) - return NULL; + { + errno = EOPNOTSUPP; + return NULL; + } else { size_t bufsize = PROC_SELF_FD_NAME_SIZE_BOUND (strlen (file)); char *result = (bufsize < OPENAT_BUFFER_SIZE ? buf : malloc (bufsize)); + if(result == NULL) + { + errno = ENOMEM; + return NULL; + } sprintf (result, PROC_SELF_FD_FORMAT, fd, file); return result; } diff --git a/lib/openat.c b/lib/openat.c index 55e12e2..9ef4b00 100644 --- a/lib/openat.c +++ b/lib/openat.c @@ -178,6 +178,9 @@ openat_permissive (int fd, char const *file, int flags, mode_t mode, { char buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (buf, fd, file); + if(NULL == proc_file && ENOMEM == errno) + return -1; + if (proc_file) { int open_result = open (proc_file, flags, mode); -- 1.7.1