Gene Cumm
2009-Mar-06 02:50 UTC
[syslinux] [PATCH 3/3] COM32/stat(): preset ret and move zeroing errno
From: Gene Cumm <gene.cumm at gmail.com> COM32/stat(): preset ret and move zeroing errno Signed-off-by: Gene Cumm <gene.cumm at gmail.com> --- Depends on string of patches this week diff --git a/com32/lib/sys/stat.c b/com32/lib/sys/stat.c index d1b2629..da55e0c 100644 --- a/com32/lib/sys/stat.c +++ b/com32/lib/sys/stat.c @@ -28,7 +28,9 @@ /* * stat.c * - * Very trivial stat emulation by using open(), fstat(), close() + * Very trivial stat emulation by using open(), then either fstat() and + * close() or opendir() and closedir(). Probably more expensive than it + * should be. */ #include <sys/stat.h> @@ -41,32 +43,32 @@ int stat(const char *pathname, struct stat *buf) { - int fd, status, ret; + int fd, status, ret = -1; + /* int terr; */ DIR *d; mode_t st_mode; fd = open(pathname, O_RDONLY); if (fd != -1){ status = fstat(fd, buf); + /* terr = errno; */ /* FIXME:should fstat()'s error be + preserved over close()'s error? */ close(fd); + /* errno = terr; */ ret = 0; } else { if ((errno == 0) || (errno == ENOENT)) { - errno = 0; st_mode = (S_IFDIR | S_IRUSR | S_IXUSR); /* | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) - */ + */ /* FIXME: Should these modes be included? */ d = opendir(pathname); if (d != NULL) { + errno = 0; /* No real error occurred */ buf->st_size = 0; buf->st_mode = st_mode; closedir(d); ret = 0; - } else { - ret = -1; /* Preserve errno */ } - } else { - ret = -1; /* Preserve errno */ } } return ret;