/* provide a chdir function that tries not to fail due to ENAMETOOLONG
- Copyright (C) 2004-2011 Free Software Foundation, Inc.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
# error "compile this file only if your system defines PATH_MAX"
#endif
-/* The attribute __pure__ was added in gcc 2.96. */
-#undef _GL_ATTRIBUTE_PURE
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
-# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
-#else
-# define _GL_ATTRIBUTE_PURE /* empty */
-#endif
-
/* The results of openat() in this file are not leaked to any
single-threaded code that could use stdio.
FIXME - if the kernel ever adds support for multi-thread safety for
int fd;
};
-static inline void
+static void
cdb_init (struct cd_buf *cdb)
{
cdb->fd = AT_FDCWD;
}
-static inline int
+static int
cdb_fchdir (struct cd_buf const *cdb)
{
return fchdir (cdb->fd);
}
-static inline void
+static void
cdb_free (struct cd_buf const *cdb)
{
if (0 <= cdb->fd)
}
/* Return a pointer to the first non-slash in S. */
-static inline char * _GL_ATTRIBUTE_PURE
+static char * _GL_ATTRIBUTE_PURE
find_non_slash (char const *s)
{
size_t n_slash = strspn (s, "/");
name. It handles an arbitrarily long directory name by operating
on manageable portions of the name. On systems without the openat
syscall, this means changing the working directory to more and more
- `distant' points along the long directory name and then restoring
+ "distant" points along the long directory name and then restoring
the working directory. If any of those attempts to save or restore
the working directory fails, this function exits nonzero.
if (argc <= 1)
{
- /* Using `pwd' here makes sense only if it is a robust implementation,
+ /* Using 'pwd' here makes sense only if it is a robust implementation,
like the one in coreutils after the 2004-04-19 changes. */
char const *cmd = "pwd";
execlp (cmd, (char *) NULL);