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