Alternative version for those legacy systems without atfile-source

atfile source is posix 2008, but some legacy systems seems to not ship
with those, in that case use slower version.



SVN revision: 39958
This commit is contained in:
Gustavo Sverzut Barbieri 2009-04-11 05:40:18 +00:00
parent 44a5dff5f9
commit 689146ef39
2 changed files with 31 additions and 3 deletions

View File

@ -12,6 +12,7 @@ AC_ISC_POSIX
AM_INIT_AUTOMAKE(1.6 dist-bzip2)
AM_CONFIG_HEADER(config.h)
AC_GNU_SOURCE
AC_C_BIGENDIAN
AC_PROG_CC_C99
AM_PROG_CC_C_O
@ -28,6 +29,27 @@ AC_PROG_LIBTOOL
AC_CHECK_FUNCS(setenv)
AC_CHECK_FUNCS(unsetenv)
have_atfile_source=auto
AC_ARG_ENABLE(atfile-source,
AC_HELP_STRING([--disable-atfile-source],
[disable use of atfile source functions as openat and mkdirat @<:@default=detect@:>@]),
[have_atfile_source=$enableval], [have_atfile_source=auto])
if test "x$have_atfile_source" != "xno"; then
AC_CHECK_FUNCS(mkdirat,
[
have_atfile_source=yes
AC_DEFINE(HAVE_ATFILE_SOURCE, 1, [mkdirat exists])
],
[
if test "x$have_atfile_source" = "xyes"; then
AC_MSG_ERROR([required atfile-source but no mkdirat()])
fi
have_atfile_source=no
])
fi
AC_CHECK_HEADERS(fnmatch.h,, AC_MSG_ERROR([Cannot find fnmatch.h. Make sure your CFLAGS environment variable contains include lines for the location of this file]))
AC_CHECK_FUNCS(fnmatch, res=yes, res=no)

View File

@ -1225,11 +1225,13 @@ _e_main_dirs_init(void)
retval = 1;
for (i = 0; i < (int)(sizeof(dirs) / sizeof(char *)); i++)
{
/* TODO: probably need to handle cases without ATSOURCE files?
* let's wait people to report and if any I'll fix it.
*/
struct stat st;
#ifndef HAVE_ATFILE_SOURCE
ecore_strlcpy(buf + baselen, dirs[i], sizeof(buf) - baselen);
if (stat(buf, &st) == 0)
#else
if (fstatat(fd, dirs[i], &st, 0) == 0)
#endif
{
if (S_ISDIR(st.st_mode))
continue;
@ -1244,7 +1246,11 @@ _e_main_dirs_init(void)
{
if (errno == ENOENT)
{
#ifndef HAVE_ATFILE_SOURCE
if (mkdir(buf, default_mode) == 0)
#else
if (mkdirat(fd, dirs[i], default_mode) == 0)
#endif
continue;
else
{