AC_CHECK_FUNCS(getcwd gethostname gettimeofday getusershell mkdir rmdir select socket strdup strcasestr strstr strtoul strchr memcpy)
AC_CHECK_FUNCS(backtrace_symbols setlocale nl_langinfo strlcpy strlcat setlinebuf dirfd pselect access pread pwrite)
AC_CHECK_FUNCS(waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64)
-#ac_neta_haveatfuncs=yes
-#AC_CHECK_FUNCS(openat renameat fstatat unlinkat, ,ac_neta_haveatfuncs=no)
-#if test x"$ac_neta_haveatfuncs" = x"yes" ; then
-# AC_DEFINE([_ATFILE_SOURCE], 1, AT file source)
-#fi
-AC_DEFINE([_ATFILE_SOURCE], 1, AT file source)
-AC_CHECK_FUNCS(openat renameat fstatat unlinkat, ,AC_DEFINE([_ATFILE_SOURCE], 0, AT file source))
+ac_neta_haveatfuncs=yes
+AC_CHECK_FUNCS(openat renameat fstatat unlinkat, , ac_neta_haveatfuncs=no)
+if test x"$ac_neta_haveatfuncs" = x"yes" ; then
+ AC_DEFINE([_ATFILE_SOURCE], 1, AT file source)
+ AC_DEFINE([HAVE_ATFUNCS], 1, whether at funcs are available)
+fi
AC_CHECK_MEMBERS(struct tm.tm_gmtoff,,, [#include <time.h>])
if ((p = mtoupath(vol, oldname, sdir->d_did, utf8_encoding())) == NULL)
return AFPERR_PARAM; /* can't convert */
-#ifndef HAVE_RENAMEAT
+#ifndef HAVE_ATFUNCS
/* Need full path */
id = cnid_get(vol->v_cdb, sdir->d_did, p, strlen(p));
p = ctoupath( vol, sdir, oldname );
if (!p)
return AFPERR_PARAM; /* pathname too long */
-#endif /* HAVE_RENAMEAT */
+#endif /* HAVE_ATFUNCS */
path.st_valid = 0;
path.u_name = p;
-#ifdef HAVE_RENAMEAT
+#ifdef HAVE_ATFUNCS
opened = of_findnameat(sdir_fd, &path);
#else
opened = of_findname(&path);
-#endif /* HAVE_RENAMEAT */
+#endif /* HAVE_ATFUNCS */
if (opened) {
/* reuse struct adouble so it won't break locks */
adp = opened->of_ad;
memcpy(oldname, cfrombstr(sdir->d_m_name), blength(sdir->d_m_name) + 1);
}
-#ifdef HAVE_RENAMEAT
+#ifdef HAVE_ATFUNCS
if ((sdir_fd = open(".", O_RDONLY)) == -1)
return AFPERR_MISC;
#endif
}
exit:
-#ifdef HAVE_RENAMEAT
+#ifdef HAVE_ATFUNCS
if (sdir_fd != -1)
close(sdir_fd);
#endif
/*
* @brief system rmdir with afp error code.
*
- * Supports *at semantics (cf openat) if HAVE_RENAMEAT. Pass dirfd=-1 to ignore this.
+ * Supports *at semantics (cf openat) if HAVE_ATFUNCS. Pass dirfd=-1 to ignore this.
*/
int netatalk_rmdir_all_errors(int dirfd, const char *name)
{
int err;
-#ifdef HAVE_RENAMEAT
+#ifdef HAVE_ATFUNCS
if (dirfd == -1)
- dirfd = ATFD_CWD;
+ dirfd = AT_FDCWD;
err = unlinkat(dirfd, name, AT_REMOVEDIR);
#else
err = rmdir(name);
/*
* @brief System rmdir with afp error code, but ENOENT is not an error.
*
- * Supports *at semantics (cf openat) if HAVE_RENAMEAT. Pass dirfd=-1 to ignore this.
+ * Supports *at semantics (cf openat) if HAVE_ATFUNCS. Pass dirfd=-1 to ignore this.
*/
int netatalk_rmdir(int dirfd, const char *name)
{
**************************************************************************/
/*
- * Supports *at semantics if HAVE_RENAMEAT, pass dirfd=-1 to ignore this
+ * Supports *at semantics if HAVE_ATFUNCS, pass dirfd=-1 to ignore this
*/
int copy_file(int dirfd, const char *src, const char *dst, mode_t mode)
{
size_t buflen;
char filebuf[8192];
-#ifdef HAVE_RENAMEAT
+#ifdef HAVE_ATFUNCS
if (dirfd == -1)
- dirfd = ATFD_CWD;
+ dirfd = AT_FDCWD;
sfd = openat(dirfd, src, O_RDONLY);
#else
sfd = open(src, O_RDONLY);
*/
int netatalk_unlinkat(int dirfd, const char *name)
{
-#ifdef HAVE_RENAMEAT
+#ifdef HAVE_ATFUNCS
if (dirfd == -1)
dirfd = AT_FDCWD;
/*
* @brief This is equivalent of unix rename()
*
- * unix_rename mulitplexes rename and renameat. If we dont HAVE_RENAMEAT, sfd and dfd
+ * unix_rename mulitplexes rename and renameat. If we dont HAVE_ATFUNCS, sfd and dfd
* are ignored.
*
- * @param sfd (r) if we HAVE_RENAMEAT, -1 gives AT_FDCWD
+ * @param sfd (r) if we HAVE_ATFUNCS, -1 gives AT_FDCWD
* @param oldpath (r) guess what
* @param dfd (r) same as sfd
* @param newpath (r) guess what
*/
int unix_rename(int sfd, const char *oldpath, int dfd, const char *newpath)
{
-#ifdef HAVE_RENAMEAT
+#ifdef HAVE_ATFUNCS
if (sfd == -1)
sfd = AT_FDCWD;
if (dfd == -1)
#else
if (rename(oldpath, newpath) < 0)
return -1;
-#endif /* HAVE_RENAMEAT */
+#endif /* HAVE_ATFUNCS */
return 0;
}
/*
* @brief stat/fsstatat multiplexer
*
- * statat mulitplexes stat and fstatat. If we dont HAVE_RENAMEAT, dirfd is ignored.
+ * statat mulitplexes stat and fstatat. If we dont HAVE_ATFUNCS, dirfd is ignored.
*
- * @param dirfd (r) Only used if HAVE_RENAMEAT, ignored else, -1 gives AT_FDCWD
+ * @param dirfd (r) Only used if HAVE_ATFUNCS, ignored else, -1 gives AT_FDCWD
* @param path (r) pathname
* @param st (rw) pointer to struct stat
*/
int statat(int dirfd, const char *path, struct stat *st)
{
-#ifdef HAVE_RENAMEAT
+#ifdef HAVE_ATFUNCS
if (dirfd == -1)
dirfd = AT_FDCWD;
return (fstatat(dirfd, path, st, 0));
/*
* @brief lstat/fsstatat multiplexer
*
- * lstatat mulitplexes lstat and fstatat. If we dont HAVE_RENAMEAT, dirfd is ignored.
+ * lstatat mulitplexes lstat and fstatat. If we dont HAVE_ATFUNCS, dirfd is ignored.
*
- * @param dirfd (r) Only used if HAVE_RENAMEAT, ignored else, -1 gives AT_FDCWD
+ * @param dirfd (r) Only used if HAVE_ATFUNCS, ignored else, -1 gives AT_FDCWD
* @param path (r) pathname
* @param st (rw) pointer to struct stat
*/
int lstatat(int dirfd, const char *path, struct stat *st)
{
-#ifdef HAVE_RENAMEAT
+#ifdef HAVE_ATFUNCS
if (dirfd == -1)
dirfd = AT_FDCWD;
return (fstatat(dirfd, path, st, AT_SYMLINK_NOFOLLOW));